cose 0.9.0 → 1.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: ad1f050dae008442fcd66013cf0b0dcd6c192b66c8fb308b7aeed1fdd53687f7
4
- data.tar.gz: 2917bb5f18b73c9651ca33946aea646f72fcfb3d3ee84dc26bf653b7e2573a71
3
+ metadata.gz: a9bd8e1fa2c7e0f08d903f81ec2303a60a2377e6ba63c548b0c7f72d1c3197ee
4
+ data.tar.gz: ccf797d8600edc7020c9248db5bfc60ffdfd7c07f11f7c39cad172116176430e
5
5
  SHA512:
6
- metadata.gz: da3842878fc2de2d47006aeea49fdc644197226362de585f4b1692929676d0fa048567b29091682ede9f31aeda0a704db88a79f0773548342720c4bcb5a98969
7
- data.tar.gz: edf9e3bef367c32a46c8a554a422df690c2156fcabc61c55c658cfa1f0b67f70471a9566052574c92bb640002196dc33244a19c86bb7368d00c35447142a4063
6
+ metadata.gz: 5f27deece5637039eb3fd8ce9a8d33baf99c31fab75036462e40d599c4e0df789cf6f5ada85fcd4df75ebfddef91faa49132b0f08486f2e322e731cf2e217808
7
+ data.tar.gz: 6eebcecddf4fc55ce1b8f7f219d9dc8bd37f1e01a18a4e3877b47b84398de883cae204d6013349e409836111b82c254a6374e9b104e552c4339ad7a94153df4b
data/.rspec CHANGED
@@ -1,3 +1,3 @@
1
- --format documentation
2
1
  --color
3
2
  --require spec_helper
3
+ --order random
@@ -6,7 +6,7 @@ inherit_mode:
6
6
  - Exclude
7
7
 
8
8
  AllCops:
9
- TargetRubyVersion: 2.3
9
+ TargetRubyVersion: 2.4
10
10
  DisabledByDefault: true
11
11
  Exclude:
12
12
  - "gemfiles/**/*"
@@ -20,13 +20,12 @@ Gemspec:
20
20
  Layout:
21
21
  Enabled: true
22
22
 
23
+ Layout/LineLength:
24
+ Max: 120
25
+
23
26
  Lint:
24
27
  Enabled: true
25
28
 
26
- Metrics/LineLength:
27
- Max: 120
28
- IgnoreCopDirectives: true
29
-
30
29
  Naming:
31
30
  Enabled: true
32
31
 
@@ -1,17 +1,17 @@
1
- sudo: false
1
+ dist: bionic
2
2
  language: ruby
3
3
  cache: bundler
4
4
 
5
5
  rvm:
6
6
  - ruby-head
7
- - 2.7.0-preview1
8
- - 2.6.4
9
- - 2.5.6
10
- - 2.4.7
11
- - 2.3.8
7
+ - 2.7.1
8
+ - 2.6.6
9
+ - 2.5.8
10
+ - 2.4.10
12
11
 
13
12
  gemfile:
14
13
  - gemfiles/openssl_head.gemfile
14
+ - gemfiles/openssl_2_2.gemfile
15
15
  - gemfiles/openssl_2_1.gemfile
16
16
  - gemfiles/openssl_2_0.gemfile
17
17
  - gemfiles/openssl_default.gemfile
@@ -22,5 +22,4 @@ matrix:
22
22
  fast_finish: true
23
23
  allow_failures:
24
24
  - rvm: ruby-head
25
- - rvm: 2.7.0-preview1
26
25
  - gemfile: gemfiles/openssl_head.gemfile
data/Appraisals CHANGED
@@ -4,6 +4,10 @@ appraise "openssl_head" do
4
4
  gem "openssl", git: "https://github.com/ruby/openssl"
5
5
  end
6
6
 
7
+ appraise "openssl_2_2" do
8
+ gem "openssl", "~> 2.2.0"
9
+ end
10
+
7
11
  appraise "openssl_2_1" do
8
12
  gem "openssl", "~> 2.1.0"
9
13
  end
@@ -1,5 +1,45 @@
1
1
  # Changelog
2
2
 
3
+ ## [v1.2.0] - 2020-07-10
4
+
5
+ ### Added
6
+
7
+ - Support ES256K signature algorithm
8
+
9
+ ## [v1.1.0] - 2020-07-09
10
+
11
+ ### Dependencies
12
+
13
+ - Update `openssl-signature_algorithm` runtime dependency from `~> 0.4.0` to `~> 1.0`.
14
+
15
+ ## [v1.0.0] - 2020-03-29
16
+
17
+ ### Added
18
+
19
+ - Signature verification validates key `alg` is compatible with the signature algorithm
20
+
21
+ NOTE: No breaking changes. Moving out of `v0.x` to express the intention to keep the public API stable.
22
+
23
+ ## [v0.11.0] - 2020-01-30
24
+
25
+ ### Added
26
+
27
+ - Let others easily support more signature algorithms by making `COSE::Algorithm::SignatureAlgorithm` smarter
28
+
29
+ ## [v0.10.0] - 2019-12-19
30
+
31
+ ### Added
32
+
33
+ - Works on ruby 2.7 without throwing any warnings
34
+ - Simpler way to rescue key deserialization error, now possible to:
35
+ ```rb
36
+ begin
37
+ COSE::Key.deserialize(cbor)
38
+ rescue COSE::KeyDeserializationError
39
+ # handle error
40
+ end
41
+ ```
42
+
3
43
  ## [v0.9.0] - 2019-08-31
4
44
 
5
45
  ### Added
@@ -95,7 +135,12 @@
95
135
  - EC2 key object
96
136
  - Works with ruby 2.5
97
137
 
98
- [v0.8.0]: https://github.com/cedarcode/cose-ruby/compare/v0.8.0...v0.9.0/
138
+ [v1.2.0]: https://github.com/cedarcode/cose-ruby/compare/v1.1.0...v1.2.0/
139
+ [v1.1.0]: https://github.com/cedarcode/cose-ruby/compare/v1.0.0...v1.1.0/
140
+ [v1.0.0]: https://github.com/cedarcode/cose-ruby/compare/v0.11.0...v1.0.0/
141
+ [v0.11.0]: https://github.com/cedarcode/cose-ruby/compare/v0.10.0...v0.11.0/
142
+ [v0.10.0]: https://github.com/cedarcode/cose-ruby/compare/v0.9.0...v0.10.0/
143
+ [v0.9.0]: https://github.com/cedarcode/cose-ruby/compare/v0.8.0...v0.9.0/
99
144
  [v0.8.0]: https://github.com/cedarcode/cose-ruby/compare/v0.7.0...v0.8.0/
100
145
  [v0.7.0]: https://github.com/cedarcode/cose-ruby/compare/v0.6.1...v0.7.0/
101
146
  [v0.6.1]: https://github.com/cedarcode/cose-ruby/compare/v0.6.0...v0.6.1/
data/README.md CHANGED
@@ -1,8 +1,8 @@
1
- # cose
1
+ # cose-ruby
2
2
 
3
- Ruby implementation of RFC 8152 CBOR Object Signing and Encryption (COSE)
3
+ Ruby implementation of RFC [8152](https://tools.ietf.org/html/rfc8152) CBOR Object Signing and Encryption (COSE)
4
4
 
5
- [![Gem](https://img.shields.io/gem/v/cose.svg?style=flat-square)](https://rubygems.org/gems/cose)
5
+ [![Gem](https://img.shields.io/gem/v/cose.svg?style=flat-square&color=informational)](https://rubygems.org/gems/cose)
6
6
  [![Travis](https://img.shields.io/travis/cedarcode/cose-ruby.svg?style=flat-square)](https://travis-ci.org/cedarcode/cose-ruby)
7
7
 
8
8
  ## Installation
data/bin/setup CHANGED
@@ -3,6 +3,8 @@ set -euo pipefail
3
3
  IFS=$'\n\t'
4
4
  set -vx
5
5
 
6
+ git submodule update --init --recursive
7
+
6
8
  bundle install
7
9
 
8
10
  # Do any other automated setup that you need to do here
@@ -29,15 +29,16 @@ Gem::Specification.new do |spec|
29
29
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
30
30
  spec.require_paths = ["lib"]
31
31
 
32
- spec.required_ruby_version = ">= 2.3"
32
+ spec.required_ruby_version = ">= 2.4"
33
33
 
34
34
  spec.add_dependency "cbor", "~> 0.5.9"
35
+ spec.add_dependency "openssl-signature_algorithm", "~> 1.0"
35
36
 
36
37
  spec.add_development_dependency "appraisal", "~> 2.2.0"
37
38
  spec.add_development_dependency "bundler", ">= 1.17", "< 3"
38
- spec.add_development_dependency "byebug", ">= 10.0"
39
- spec.add_development_dependency "rake", "~> 12.3"
39
+ spec.add_development_dependency "byebug", "~> 11.0"
40
+ spec.add_development_dependency "rake", "~> 13.0"
40
41
  spec.add_development_dependency "rspec", "~> 3.8"
41
- spec.add_development_dependency "rubocop", "0.74.0"
42
+ spec.add_development_dependency "rubocop", "0.80.1"
42
43
  spec.add_development_dependency "rubocop-performance", "~> 1.4"
43
44
  end
@@ -0,0 +1,7 @@
1
+ # This file was generated by Appraisal
2
+
3
+ source "https://rubygems.org"
4
+
5
+ gem "openssl", "~> 2.2.0"
6
+
7
+ gemspec path: "../"
@@ -26,9 +26,10 @@ module COSE
26
26
  @registered_by_name[name]
27
27
  end
28
28
 
29
- register(ECDSA.new(-7, "ES256", hash_function: "SHA256"))
30
- register(ECDSA.new(-35, "ES384", hash_function: "SHA384"))
31
- register(ECDSA.new(-36, "ES512", hash_function: "SHA512"))
29
+ register(ECDSA.new(-7, "ES256", hash_function: "SHA256", curve_name: "P-256"))
30
+ register(ECDSA.new(-35, "ES384", hash_function: "SHA384", curve_name: "P-384"))
31
+ register(ECDSA.new(-36, "ES512", hash_function: "SHA512", curve_name: "P-521"))
32
+ register(ECDSA.new(-47, "ES256K", hash_function: "SHA256", curve_name: "secp256k1"))
32
33
  register(RSAPSS.new(-37, "PS256", hash_function: "SHA256", salt_length: 32))
33
34
  register(RSAPSS.new(-38, "PS384", hash_function: "SHA384", salt_length: 48))
34
35
  register(RSAPSS.new(-39, "PS512", hash_function: "SHA512", salt_length: 64))
@@ -3,8 +3,6 @@
3
3
  module COSE
4
4
  module Algorithm
5
5
  class Base
6
- BYTE_LENGTH = 8
7
-
8
6
  attr_reader :id, :name
9
7
 
10
8
  def initialize(id, name)
@@ -2,32 +2,41 @@
2
2
 
3
3
  require "cose/algorithm/signature_algorithm"
4
4
  require "cose/error"
5
+ require "cose/key/curve"
5
6
  require "cose/key/ec2"
6
7
  require "openssl"
8
+ require "openssl/signature_algorithm/ecdsa"
7
9
 
8
10
  module COSE
9
11
  module Algorithm
10
12
  class ECDSA < SignatureAlgorithm
11
- attr_reader :hash_function
13
+ attr_reader :hash_function, :curve
12
14
 
13
- def initialize(*args, hash_function:)
15
+ def initialize(*args, hash_function:, curve_name:)
14
16
  super(*args)
15
17
 
16
18
  @hash_function = hash_function
17
- end
18
-
19
- def compatible_key?(key)
20
- to_pkey(key)
21
- rescue COSE::Error
22
- false
19
+ @curve = COSE::Key::Curve.by_name(curve_name) || raise("Couldn't find curve with name='#{curve_name}'")
23
20
  end
24
21
 
25
22
  private
26
23
 
27
- def valid_signature?(key, signature, verification_data)
28
- pkey = to_pkey(key)
24
+ def valid_key?(key)
25
+ cose_key = to_cose_key(key)
26
+
27
+ cose_key.is_a?(COSE::Key::EC2) && (!cose_key.alg || cose_key.alg == id)
28
+ end
29
29
 
30
- pkey.verify(hash_function, in_der(signature, pkey.group.degree), verification_data)
30
+ def signature_algorithm_class
31
+ OpenSSL::SignatureAlgorithm::ECDSA
32
+ end
33
+
34
+ def signature_algorithm_parameters
35
+ if curve
36
+ super.merge(curve: curve.pkey_name)
37
+ else
38
+ super
39
+ end
31
40
  end
32
41
 
33
42
  def to_pkey(key)
@@ -40,23 +49,6 @@ module COSE
40
49
  raise(COSE::Error, "Incompatible key for algorithm")
41
50
  end
42
51
  end
43
-
44
- # Borrowed from jwt rubygem.
45
- # https://github.com/jwt/ruby-jwt/blob/7a6a3f1dbaff806993156d1dff9c217bb2523ff8/lib/jwt/security_utils.rb#L34-L39
46
- #
47
- # Hopefully this will be provided by openssl rubygem in the future.
48
- def in_der(signature, key_length)
49
- n = (key_length.to_f / BYTE_LENGTH).ceil
50
-
51
- if signature.size == n * 2
52
- r = signature[0..(n - 1)]
53
- s = signature[n..-1]
54
-
55
- OpenSSL::ASN1::Sequence.new([r, s].map { |int| OpenSSL::ASN1::Integer.new(OpenSSL::BN.new(int, 2)) }).to_der
56
- else
57
- signature
58
- end
59
- end
60
52
  end
61
53
  end
62
54
  end
@@ -6,6 +6,8 @@ require "openssl"
6
6
  module COSE
7
7
  module Algorithm
8
8
  class HMAC < Base
9
+ BYTE_LENGTH = 8
10
+
9
11
  attr_reader :hash_function, :tag_length
10
12
 
11
13
  def initialize(*args, hash_function:, tag_length:)
@@ -4,6 +4,7 @@ require "cose/algorithm/signature_algorithm"
4
4
  require "cose/key/rsa"
5
5
  require "cose/error"
6
6
  require "openssl"
7
+ require "openssl/signature_algorithm/rsapss"
7
8
 
8
9
  module COSE
9
10
  module Algorithm
@@ -17,22 +18,14 @@ module COSE
17
18
  @salt_length = salt_length
18
19
  end
19
20
 
20
- def compatible_key?(key)
21
- to_pkey(key)
22
- rescue COSE::Error
23
- false
24
- end
25
-
26
21
  private
27
22
 
28
- def valid_signature?(key, signature, verification_data)
29
- pkey = to_pkey(key)
23
+ def valid_key?(key)
24
+ to_cose_key(key).is_a?(COSE::Key::RSA)
25
+ end
30
26
 
31
- if pkey.respond_to?(:verify_pss)
32
- pkey.verify_pss(hash_function, signature, verification_data, salt_length: :digest, mgf1_hash: hash_function)
33
- else
34
- raise(COSE::Error, "Update to openssl gem >= v2.1 to have RSA-PSS support")
35
- end
27
+ def signature_algorithm_class
28
+ OpenSSL::SignatureAlgorithm::RSAPSS
36
29
  end
37
30
 
38
31
  def to_pkey(key)
@@ -7,8 +7,55 @@ module COSE
7
7
  module Algorithm
8
8
  class SignatureAlgorithm < Base
9
9
  def verify(key, signature, verification_data)
10
+ compatible_key?(key) || raise(COSE::Error, "Incompatible key for signature verification")
10
11
  valid_signature?(key, signature, verification_data) || raise(COSE::Error, "Signature verification failed")
11
12
  end
13
+
14
+ def compatible_key?(key)
15
+ valid_key?(key) && to_pkey(key)
16
+ rescue COSE::Error
17
+ false
18
+ end
19
+
20
+ private
21
+
22
+ def valid_signature?(key, signature, verification_data)
23
+ signature_algorithm = signature_algorithm_class.new(**signature_algorithm_parameters)
24
+ signature_algorithm.verify_key = to_pkey(key)
25
+
26
+ begin
27
+ signature_algorithm.verify(signature, verification_data)
28
+ rescue OpenSSL::SignatureAlgorithm::Error
29
+ false
30
+ end
31
+ end
32
+
33
+ def signature_algorithm_parameters
34
+ { hash_function: hash_function }
35
+ end
36
+
37
+ def to_cose_key(key)
38
+ case key
39
+ when COSE::Key::Base
40
+ key
41
+ when OpenSSL::PKey::PKey
42
+ COSE::Key.from_pkey(key)
43
+ else
44
+ raise(COSE::Error, "Don't know how to transform #{key.class} to COSE::Key")
45
+ end
46
+ end
47
+
48
+ def signature_algorithm_class
49
+ raise NotImplementedError
50
+ end
51
+
52
+ def valid_key?(_key)
53
+ raise NotImplementedError
54
+ end
55
+
56
+ def to_pkey(_key)
57
+ raise NotImplementedError
58
+ end
12
59
  end
13
60
  end
14
61
  end
@@ -8,7 +8,10 @@ require "cose/key/symmetric"
8
8
  require "openssl"
9
9
 
10
10
  module COSE
11
- class UnknownKeyType < StandardError; end
11
+ class Error < StandardError; end
12
+ class KeyDeserializationError < Error; end
13
+ class MalformedKeyError < KeyDeserializationError; end
14
+ class UnknownKeyType < KeyDeserializationError; end
12
15
 
13
16
  module Key
14
17
  def self.serialize(pkey)
@@ -27,7 +30,7 @@ module COSE
27
30
  end
28
31
 
29
32
  def self.deserialize(data)
30
- map = CBOR.decode(data)
33
+ map = cbor_decode(data)
31
34
 
32
35
  case map[Base::LABEL_KTY]
33
36
  when COSE::Key::OKP::KTY_OKP
@@ -39,10 +42,16 @@ module COSE
39
42
  when COSE::Key::Symmetric::KTY_SYMMETRIC
40
43
  COSE::Key::Symmetric.from_map(map)
41
44
  when nil
42
- raise UnknownKeyType, "Missing required key type kty label"
45
+ raise COSE::UnknownKeyType, "Missing required key type kty label"
43
46
  else
44
- raise UnknownKeyType, "Unsupported or unknown key type #{map[Base::LABEL_KTY]}"
47
+ raise COSE::UnknownKeyType, "Unsupported or unknown key type #{map[Base::LABEL_KTY]}"
45
48
  end
46
49
  end
50
+
51
+ def self.cbor_decode(data)
52
+ CBOR.decode(data)
53
+ rescue CBOR::MalformedFormatError, EOFError, FloatDomainError, RegexpError, TypeError, URI::InvalidURIError
54
+ raise COSE::MalformedKeyError, "Malformed CBOR key input"
55
+ end
47
56
  end
48
57
  end
@@ -41,14 +41,12 @@ module COSE
41
41
  end
42
42
 
43
43
  def map
44
- map = {
44
+ {
45
45
  LABEL_BASE_IV => base_iv,
46
46
  LABEL_KEY_OPS => key_ops,
47
47
  LABEL_ALG => alg,
48
48
  LABEL_KID => kid,
49
- }
50
-
51
- map.reject { |_k, v| v.nil? }
49
+ }.compact
52
50
  end
53
51
  end
54
52
  end
@@ -32,3 +32,4 @@ end
32
32
  COSE::Key::Curve.register(1, "P-256", "prime256v1")
33
33
  COSE::Key::Curve.register(2, "P-384", "secp384r1")
34
34
  COSE::Key::Curve.register(3, "P-521", "secp521r1")
35
+ COSE::Key::Curve.register(8, "secp256k1", "secp256k1")
@@ -20,7 +20,7 @@ module COSE
20
20
  }
21
21
  end
22
22
 
23
- def initialize(crv:, x: nil, d: nil, **keyword_arguments) # rubocop:disable Naming/UncommunicativeMethodParamName
23
+ def initialize(crv:, x: nil, d: nil, **keyword_arguments) # rubocop:disable Naming/MethodParameterName
24
24
  super(**keyword_arguments)
25
25
 
26
26
  if !crv
@@ -35,13 +35,11 @@ module COSE
35
35
  end
36
36
 
37
37
  def map
38
- map = super.merge(
38
+ super.merge(
39
39
  LABEL_CRV => crv,
40
40
  LABEL_X => x,
41
41
  LABEL_D => d
42
- )
43
-
44
- map.reject { |_k, v| v.nil? }
42
+ ).compact
45
43
  end
46
44
  end
47
45
  end
@@ -48,7 +48,7 @@ module COSE
48
48
 
49
49
  attr_reader :y
50
50
 
51
- def initialize(y: nil, **keyword_arguments) # rubocop:disable Naming/UncommunicativeMethodParamName
51
+ def initialize(y: nil, **keyword_arguments) # rubocop:disable Naming/MethodParameterName
52
52
  if (!y || !keyword_arguments[:x]) && !keyword_arguments[:d]
53
53
  raise ArgumentError, "Both x and y are required if d is missing"
54
54
  else
@@ -59,12 +59,10 @@ module COSE
59
59
  end
60
60
 
61
61
  def map
62
- map = super.merge(
62
+ super.merge(
63
63
  Base::LABEL_KTY => KTY_EC2,
64
64
  LABEL_Y => y,
65
- )
66
-
67
- map.reject { |_k, v| v.nil? }
65
+ ).compact
68
66
  end
69
67
 
70
68
  def to_pkey
@@ -42,12 +42,12 @@ module COSE
42
42
  )
43
43
  end
44
44
 
45
- new(attributes)
45
+ new(**attributes)
46
46
  end
47
47
 
48
48
  attr_reader :n, :e, :d, :p, :q, :dp, :dq, :qinv
49
49
 
50
- def initialize(n:, e:, d: nil, p: nil, q: nil, dp: nil, dq: nil, qinv: nil, **keyword_arguments) # rubocop:disable Naming/UncommunicativeMethodParamName
50
+ def initialize(n:, e:, d: nil, p: nil, q: nil, dp: nil, dq: nil, qinv: nil, **keyword_arguments) # rubocop:disable Naming/MethodParameterName
51
51
  super(**keyword_arguments)
52
52
 
53
53
  if !n
@@ -74,7 +74,7 @@ module COSE
74
74
  end
75
75
 
76
76
  def map
77
- map = super.merge(
77
+ super.merge(
78
78
  Base::LABEL_KTY => KTY_RSA,
79
79
  LABEL_N => n,
80
80
  LABEL_E => e,
@@ -84,9 +84,7 @@ module COSE
84
84
  LABEL_DP => dp,
85
85
  LABEL_DQ => dq,
86
86
  LABEL_QINV => qinv
87
- )
88
-
89
- map.reject { |_k, v| v.nil? }
87
+ ).compact
90
88
  end
91
89
 
92
90
  def to_pkey
@@ -17,7 +17,7 @@ module COSE
17
17
  end
18
18
  end
19
19
 
20
- def initialize(k:, **keyword_arguments) # rubocop:disable Naming/UncommunicativeMethodParamName
20
+ def initialize(k:, **keyword_arguments) # rubocop:disable Naming/MethodParameterName
21
21
  super(**keyword_arguments)
22
22
 
23
23
  if !k
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module COSE
4
- VERSION = "0.9.0"
4
+ VERSION = "1.2.0"
5
5
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: cose
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.0
4
+ version: 1.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Gonzalo Rodriguez
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: exe
11
11
  cert_chain: []
12
- date: 2019-08-31 00:00:00.000000000 Z
12
+ date: 2020-07-10 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: cbor
@@ -25,6 +25,20 @@ dependencies:
25
25
  - - "~>"
26
26
  - !ruby/object:Gem::Version
27
27
  version: 0.5.9
28
+ - !ruby/object:Gem::Dependency
29
+ name: openssl-signature_algorithm
30
+ requirement: !ruby/object:Gem::Requirement
31
+ requirements:
32
+ - - "~>"
33
+ - !ruby/object:Gem::Version
34
+ version: '1.0'
35
+ type: :runtime
36
+ prerelease: false
37
+ version_requirements: !ruby/object:Gem::Requirement
38
+ requirements:
39
+ - - "~>"
40
+ - !ruby/object:Gem::Version
41
+ version: '1.0'
28
42
  - !ruby/object:Gem::Dependency
29
43
  name: appraisal
30
44
  requirement: !ruby/object:Gem::Requirement
@@ -63,30 +77,30 @@ dependencies:
63
77
  name: byebug
64
78
  requirement: !ruby/object:Gem::Requirement
65
79
  requirements:
66
- - - ">="
80
+ - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '10.0'
82
+ version: '11.0'
69
83
  type: :development
70
84
  prerelease: false
71
85
  version_requirements: !ruby/object:Gem::Requirement
72
86
  requirements:
73
- - - ">="
87
+ - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '10.0'
89
+ version: '11.0'
76
90
  - !ruby/object:Gem::Dependency
77
91
  name: rake
78
92
  requirement: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '12.3'
96
+ version: '13.0'
83
97
  type: :development
84
98
  prerelease: false
85
99
  version_requirements: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '12.3'
103
+ version: '13.0'
90
104
  - !ruby/object:Gem::Dependency
91
105
  name: rspec
92
106
  requirement: !ruby/object:Gem::Requirement
@@ -107,14 +121,14 @@ dependencies:
107
121
  requirements:
108
122
  - - '='
109
123
  - !ruby/object:Gem::Version
110
- version: 0.74.0
124
+ version: 0.80.1
111
125
  type: :development
112
126
  prerelease: false
113
127
  version_requirements: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - '='
116
130
  - !ruby/object:Gem::Version
117
- version: 0.74.0
131
+ version: 0.80.1
118
132
  - !ruby/object:Gem::Dependency
119
133
  name: rubocop-performance
120
134
  requirement: !ruby/object:Gem::Requirement
@@ -154,6 +168,7 @@ files:
154
168
  - cose.gemspec
155
169
  - gemfiles/openssl_2_0.gemfile
156
170
  - gemfiles/openssl_2_1.gemfile
171
+ - gemfiles/openssl_2_2.gemfile
157
172
  - gemfiles/openssl_default.gemfile
158
173
  - gemfiles/openssl_head.gemfile
159
174
  - lib/cose.rb
@@ -198,14 +213,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
198
213
  requirements:
199
214
  - - ">="
200
215
  - !ruby/object:Gem::Version
201
- version: '2.3'
216
+ version: '2.4'
202
217
  required_rubygems_version: !ruby/object:Gem::Requirement
203
218
  requirements:
204
219
  - - ">="
205
220
  - !ruby/object:Gem::Version
206
221
  version: '0'
207
222
  requirements: []
208
- rubygems_version: 3.0.6
223
+ rubygems_version: 3.1.4
209
224
  signing_key:
210
225
  specification_version: 4
211
226
  summary: Ruby implementation of RFC 8152 CBOR Object Signing and Encryption (COSE)