jose 1.1.2 → 1.1.3

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
- SHA1:
3
- metadata.gz: aa018b696c9f264acc7691bb2ae92a7e48ec95e7
4
- data.tar.gz: c07468825b96248e7e15376711e573913f0d33ce
2
+ SHA256:
3
+ metadata.gz: bfd5ea4addb2127fc84ce5fe41ba48895c8906a1a1252dae1731c05cf530fcdd
4
+ data.tar.gz: 12051ba779da5cbc36666f1d2b1b8df8b6a781e03878afebacdd17456012e6bd
5
5
  SHA512:
6
- metadata.gz: 41a28230b46f5e9ea6ef56c7c8bdc2f353f7472f18faea6923d39326eb8d87f77a3ae247d22181ef5a4babe550cab1db31361e657d066959e8629a6df87c8e6d
7
- data.tar.gz: 00c55722c8dc85d65c53a7628abdd9baa4c536d409249dd5de4487a7b3d8e34254035151526cbedf520809401153604f7c301705274d70d02fbc05fe1665a4e2
6
+ metadata.gz: 300be47e599d8fc493c955bca536d33aca2ce92d28f7088985f916e70bea4dbdf1d8d3e45e34a1d2fb2adda6103915bba7b76f8c072553e1dc209e9e790f93e2
7
+ data.tar.gz: c1e31e5479b471a86203d048b2a2efe9fb67f14941be4409a91438b74dc87cce6d075f7d2164c8a991e0d0af0477a3790211fc3a53fbb2a207cd6cd23f4f49f2
@@ -1 +1 @@
1
- 2.3.1
1
+ 2.5.1
@@ -9,10 +9,10 @@ env:
9
9
  - RUBYOPT="-W0"
10
10
 
11
11
  rvm:
12
- - 2.3.1
12
+ - 2.5.1
13
13
 
14
14
  notifications:
15
15
  email: false
16
16
 
17
17
  before_install:
18
- - "gem install bundler -v 1.12.2"
18
+ - "gem install bundler -v 1.16.4"
@@ -1,5 +1,13 @@
1
1
  # Changelog
2
2
 
3
+ ## 1.1.3 (2018-09-20)
4
+
5
+ * Enhancements
6
+ * Add support for [crypto-rb/ed25519](https://github.com/crypto-rb/ed25519) and [crypto-rb/x25519](https://github.com/crypto-rb/x25519) for curve25519 operations.
7
+
8
+ * Fixes
9
+ * Support for Ruby 2.5.x RSA keys (thanks to [@waynerobinson](https://github.com/waynerobinson) see [#7](https://github.com/potatosalad/ruby-jose/pull/7))
10
+
3
11
  ## 1.1.2 (2016-07-07)
4
12
 
5
13
  * Enhancements
data/Gemfile CHANGED
@@ -12,7 +12,7 @@ end
12
12
  group :test do
13
13
  gem 'minitest-focus', require: false
14
14
  gem 'minitest-perf', require: false
15
- gem 'rantly', github: 'abargnesi/rantly', ref: '4d219ea3eb340a5153a43d051b2e22ccb2bce274', require: false
15
+ gem 'rantly', github: 'abargnesi/rantly', ref: '2875f63bfc695d270ecb574c56d1a7d8f6af0153', require: false
16
16
  gem 'simplecov', require: false
17
17
  if ENV['CI']
18
18
  gem 'coveralls', require: false
@@ -7,7 +7,7 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "jose"
8
8
  spec.version = JOSE::VERSION
9
9
  spec.authors = ["Andrew Bennett"]
10
- spec.email = ["andrew@pixid.com"]
10
+ spec.email = ["potatosaladx@gmail.com"]
11
11
 
12
12
  spec.summary = %q{JSON Object Signing and Encryption}
13
13
  spec.description = %q{JSON Object Signing and Encryption}
@@ -29,9 +29,11 @@ Gem::Specification.new do |spec|
29
29
 
30
30
  spec.add_dependency "hamster"
31
31
 
32
- spec.add_development_dependency "bundler", "~> 1.12"
33
- spec.add_development_dependency "rake", "~> 11.1"
32
+ spec.add_development_dependency "bundler", "~> 1.16"
33
+ spec.add_development_dependency "rake", "~> 12.3"
34
34
  spec.add_development_dependency "minitest"
35
35
  spec.add_development_dependency "json"
36
36
  spec.add_development_dependency "rbnacl-libsodium"
37
+ spec.add_development_dependency "ed25519"
38
+ spec.add_development_dependency "x25519"
37
39
  end
@@ -6,6 +6,7 @@ require 'json'
6
6
  require 'openssl'
7
7
  require 'securerandom'
8
8
  require 'thread'
9
+ require 'zlib'
9
10
 
10
11
  # JOSE stands for JSON Object Signing and Encryption which is a is a set of
11
12
  # standards established by the [JOSE Working Group](https://datatracker.ietf.org/wg/jose).
@@ -94,10 +94,13 @@ private
94
94
  end
95
95
 
96
96
  require 'jose/jwa/ed25519'
97
+ require 'jose/jwa/ed25519_cryptorb'
97
98
  require 'jose/jwa/ed25519_rbnacl'
98
99
  require 'jose/jwa/x25519'
100
+ require 'jose/jwa/x25519_cryptorb'
99
101
  require 'jose/jwa/x25519_rbnacl'
100
102
 
101
103
  require 'jose/jwa/curve25519_unsupported'
102
104
  require 'jose/jwa/curve25519_ruby'
105
+ require 'jose/jwa/curve25519_cryptorb'
103
106
  require 'jose/jwa/curve25519_rbnacl'
@@ -0,0 +1,67 @@
1
+ module JOSE::JWA::Curve25519_CryptoRb
2
+
3
+ extend self
4
+
5
+ def __ruby__?; false; end
6
+
7
+ def __supported__?
8
+ return @supported ||= begin
9
+ begin
10
+ require 'ed25519'
11
+ rescue LoadError
12
+ end
13
+ begin
14
+ require 'x25519'
15
+ rescue LoadError
16
+ end
17
+ !!(defined?(Ed25519::SigningKey) and defined?(X25519::Scalar))
18
+ end
19
+ end
20
+
21
+ def ed25519_keypair(secret = nil)
22
+ return JOSE::JWA::Ed25519_CryptoRb.keypair(secret)
23
+ end
24
+
25
+ def ed25519_secret_to_public(sk)
26
+ return JOSE::JWA::Ed25519_CryptoRb.sk_to_pk(sk)
27
+ end
28
+
29
+ def ed25519_sign(m, sk)
30
+ return JOSE::JWA::Ed25519_CryptoRb.sign(m, sk)
31
+ end
32
+
33
+ def ed25519_verify(sig, m, pk)
34
+ return JOSE::JWA::Ed25519_CryptoRb.verify(sig, m, pk)
35
+ end
36
+
37
+ def ed25519ph_keypair(secret = nil)
38
+ return JOSE::JWA::Ed25519_CryptoRb.keypair(secret)
39
+ end
40
+
41
+ def ed25519ph_secret_to_public(sk)
42
+ return JOSE::JWA::Ed25519_CryptoRb.sk_to_pk(sk)
43
+ end
44
+
45
+ def ed25519ph_sign(m, sk)
46
+ return JOSE::JWA::Ed25519_CryptoRb.sign_ph(m, sk)
47
+ end
48
+
49
+ def ed25519ph_verify(sig, m, pk)
50
+ return JOSE::JWA::Ed25519_CryptoRb.verify_ph(sig, m, pk)
51
+ end
52
+
53
+ def x25519_keypair(secret = nil)
54
+ return JOSE::JWA::X25519_CryptoRb.keypair(secret)
55
+ end
56
+
57
+ def x25519_secret_to_public(sk)
58
+ return JOSE::JWA::X25519_CryptoRb.sk_to_pk(sk)
59
+ end
60
+
61
+ def x25519_shared_secret(pk, sk)
62
+ return JOSE::JWA::X25519_CryptoRb.shared_secret(pk, sk)
63
+ end
64
+
65
+ end
66
+
67
+ JOSE::JWA::Curve25519.__register__(JOSE::JWA::Curve25519_CryptoRb)
@@ -114,4 +114,79 @@ module JOSE::JWA::Ed25519
114
114
  return verify(sig, Digest::SHA512.digest(m), pk)
115
115
  end
116
116
 
117
+ def coerce_publickey_bytes!(publickey)
118
+ raise ArgumentError, "publickey size must be #{C_publickeybytes} bytes" if not valid_publickey?(publickey)
119
+ publickey = publickey.to_bytes(C_bits) if publickey.is_a?(JOSE::JWA::FieldElement)
120
+ publickey = publickey.to_bn if not publickey.is_a?(OpenSSL::BN) and publickey.respond_to?(:to_bn)
121
+ publickey = publickey.to_s(2).rjust(C_bytes, JOSE::JWA::ZERO_PAD).reverse if publickey.is_a?(OpenSSL::BN)
122
+ return publickey
123
+ end
124
+
125
+ def coerce_secret_bytes!(secret)
126
+ raise ArgumentError, "secret size must be #{C_secretbytes} bytes" if not valid_secret?(secret)
127
+ secret = secret.to_bytes(C_bits) if secret.is_a?(JOSE::JWA::FieldElement)
128
+ secret = secret.to_bn if not secret.is_a?(OpenSSL::BN) and secret.respond_to?(:to_bn)
129
+ secret = secret.to_s(2).rjust(C_bytes, JOSE::JWA::ZERO_PAD).reverse if secret.is_a?(OpenSSL::BN)
130
+ return secret
131
+ end
132
+
133
+ def coerce_secretkey_bytes!(secretkey)
134
+ raise ArgumentError, "secretkey size must be #{C_secretkeybytes} bytes" if not valid_secretkey?(secretkey)
135
+ secretkey = secretkey.to_bytes(C_secretkeybytes * 8) if secretkey.is_a?(JOSE::JWA::FieldElement)
136
+ secretkey = secretkey.to_bn if not secretkey.is_a?(OpenSSL::BN) and secretkey.respond_to?(:to_bn)
137
+ secretkey = secretkey.to_s(2).rjust(C_secretkeybytes, JOSE::JWA::ZERO_PAD).reverse if secretkey.is_a?(OpenSSL::BN)
138
+ return secretkey
139
+ end
140
+
141
+ def valid_publickey?(publickey)
142
+ return true if publickey.is_a?(JOSE::JWA::FieldElement) and publickey.p == C_p
143
+ if not publickey.is_a?(OpenSSL::BN) and publickey.respond_to?(:to_bn)
144
+ publickey = publickey.to_bn
145
+ end
146
+ pkbytes = 0
147
+ if publickey.is_a?(OpenSSL::BN)
148
+ if publickey.num_bytes > C_publickeybytes
149
+ pkbytes = publickey.num_bytes
150
+ else
151
+ pkbytes = C_publickeybytes
152
+ end
153
+ end
154
+ pkbytes = publickey.bytesize if publickey.respond_to?(:bytesize)
155
+ return !!(pkbytes == C_publickeybytes)
156
+ end
157
+
158
+ def valid_secret?(secret)
159
+ return true if secret.is_a?(JOSE::JWA::FieldElement) and secret.p == C_p
160
+ if not secret.is_a?(OpenSSL::BN) and secret.respond_to?(:to_bn)
161
+ secret = secret.to_bn
162
+ end
163
+ seedbytes = 0
164
+ if secret.is_a?(OpenSSL::BN)
165
+ if secret.num_bytes > C_secretbytes
166
+ seedbytes = secret.num_bytes
167
+ else
168
+ seedbytes = C_secretbytes
169
+ end
170
+ end
171
+ seedbytes = secret.bytesize if secret.respond_to?(:bytesize)
172
+ return !!(seedbytes == C_secretbytes)
173
+ end
174
+
175
+ def valid_secretkey?(secretkey)
176
+ return true if secretkey.is_a?(JOSE::JWA::FieldElement) and secretkey.p == C_p
177
+ if not secretkey.is_a?(OpenSSL::BN) and secretkey.respond_to?(:to_bn)
178
+ secretkey = secretkey.to_bn
179
+ end
180
+ skbytes = 0
181
+ if secretkey.is_a?(OpenSSL::BN)
182
+ if secretkey.num_bytes > C_secretkeybytes
183
+ skbytes = secretkey.num_bytes
184
+ else
185
+ skbytes = C_secretkeybytes
186
+ end
187
+ end
188
+ skbytes = secretkey.bytesize if secretkey.respond_to?(:bytesize)
189
+ return !!(skbytes == C_secretkeybytes)
190
+ end
191
+
117
192
  end
@@ -0,0 +1,55 @@
1
+ module JOSE::JWA::Ed25519_CryptoRb
2
+
3
+ extend self
4
+
5
+ def keypair(secret = nil)
6
+ secret ||= Ed25519::SigningKey.generate()
7
+ sk = coerce_signing_key!(secret)
8
+ pk = sk.verify_key()
9
+ return pk.to_bytes(), sk.keypair()
10
+ end
11
+
12
+ def sk_to_pk(sk)
13
+ return sk[Ed25519::KEY_SIZE..-1]
14
+ end
15
+
16
+ def sign(m, sk)
17
+ signing_key = coerce_signing_key!(sk)
18
+ return signing_key.sign(m)
19
+ end
20
+
21
+ def sign_ph(m, sk)
22
+ return sign(Digest::SHA512.digest(m), sk)
23
+ end
24
+
25
+ def verify(sig, m, pk)
26
+ return Ed25519::VerifyKey.new(pk).verify(sig, m)
27
+ end
28
+
29
+ def verify_ph(sig, m, pk)
30
+ return verify(sig, Digest::SHA512.digest(m), pk)
31
+ end
32
+
33
+ def coerce_signing_key!(sk)
34
+ return sk if sk.is_a?(Ed25519::SigningKey)
35
+ sk =
36
+ if not sk.respond_to?(:bytesize)
37
+ begin
38
+ JOSE::JWA::Ed25519.coerce_secret_bytes!(sk)
39
+ rescue ArgumentError
40
+ JOSE::JWA::Ed25519.coerce_secretkey_bytes!(sk)
41
+ end
42
+ else
43
+ sk
44
+ end
45
+ return Ed25519::SigningKey.from_keypair(sk) if sk.bytesize === JOSE::JWA::Ed25519::C_secretkeybytes
46
+ return Ed25519::SigningKey.new(sk)
47
+ end
48
+
49
+ def coerce_verify_key!(pk)
50
+ return pk if pk.is_a?(Ed25519::VerifyKey)
51
+ pk = JOSE::JWA::Ed25519.coerce_publickey_bytes!(pk) if not pk.respond_to?(:bytesize)
52
+ return Ed25519::VerifyKey.new(pk)
53
+ end
54
+
55
+ end
@@ -0,0 +1,47 @@
1
+ module JOSE::JWA::X25519_CryptoRb
2
+
3
+ extend self
4
+
5
+ def curve25519(k, u)
6
+ k = coerce_scalar!(k)
7
+ u = coerce_montgomery_u!(u)
8
+ return k.diffie_hellman(u)
9
+ end
10
+
11
+ def x25519(sk, pk)
12
+ return curve25519(sk, pk).to_bytes()
13
+ end
14
+
15
+ def x25519_base(sk)
16
+ scalar = coerce_scalar!(sk)
17
+ return scalar.public_key.to_bytes()
18
+ end
19
+
20
+ def keypair(sk = nil)
21
+ sk ||= X25519::Scalar.generate()
22
+ scalar = coerce_scalar!(sk)
23
+ pk = sk_to_pk(scalar)
24
+ return pk, scalar.to_bytes()
25
+ end
26
+
27
+ def shared_secret(pk, sk)
28
+ return x25519(sk, pk)
29
+ end
30
+
31
+ def sk_to_pk(sk)
32
+ return x25519_base(sk)
33
+ end
34
+
35
+ def coerce_montgomery_u!(pk)
36
+ return pk if pk.is_a?(X25519::MontgomeryU)
37
+ pk = JOSE::JWA::X25519.coerce_coordinate_bytes!(u) if not pk.respond_to?(:bytesize)
38
+ return X25519::MontgomeryU.new(pk)
39
+ end
40
+
41
+ def coerce_scalar!(sk)
42
+ return sk if sk.is_a?(X25519::Scalar)
43
+ sk = JOSE::JWA::X25519.coerce_scalar_bytes!(sk) if not sk.respond_to?(:bytesize)
44
+ return X25519::Scalar.new(sk)
45
+ end
46
+
47
+ end
@@ -9,14 +9,20 @@ class JOSE::JWK::KTY_RSA < Struct.new(:key)
9
9
  elsif fields['d'].is_a?(String)
10
10
  if fields['dp'].is_a?(String) and fields['dq'].is_a?(String) and fields['p'].is_a?(String) and fields['q'].is_a?(String) and fields['qi'].is_a?(String)
11
11
  rsa = OpenSSL::PKey::RSA.new
12
- rsa.d = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['d']), 2)
13
- rsa.dmp1 = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['dp']), 2)
14
- rsa.dmq1 = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['dq']), 2)
15
- rsa.e = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['e']), 2)
16
- rsa.n = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['n']), 2)
17
- rsa.p = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['p']), 2)
18
- rsa.q = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['q']), 2)
19
- rsa.iqmp = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['qi']), 2)
12
+ rsa.set_key(
13
+ OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['n']), 2),
14
+ OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['e']), 2),
15
+ OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['d']), 2)
16
+ )
17
+ rsa.set_factors(
18
+ OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['p']), 2),
19
+ OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['q']), 2)
20
+ )
21
+ rsa.set_crt_params(
22
+ OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['dp']), 2),
23
+ OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['dq']), 2),
24
+ OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['qi']), 2)
25
+ )
20
26
  return JOSE::JWK::KTY_RSA.new(JOSE::JWK::PKeyProxy.new(rsa)), fields.except('kty', 'd', 'dp', 'dq', 'e', 'n', 'p', 'q', 'qi')
21
27
  else
22
28
  d = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['d']), 2)
@@ -27,8 +33,11 @@ class JOSE::JWK::KTY_RSA < Struct.new(:key)
27
33
  end
28
34
  else
29
35
  rsa = OpenSSL::PKey::RSA.new
30
- rsa.e = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['e']), 2)
31
- rsa.n = OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['n']), 2)
36
+ rsa.set_key(
37
+ OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['n']), 2),
38
+ OpenSSL::BN.new(JOSE.urlsafe_decode64(fields['e']), 2),
39
+ nil
40
+ )
32
41
  return JOSE::JWK::KTY_RSA.new(JOSE::JWK::PKeyProxy.new(rsa)), fields.except('kty', 'e', 'n')
33
42
  end
34
43
  else
@@ -220,15 +229,12 @@ private
220
229
  dp = d % (p - 1)
221
230
  dq = d % (q - 1)
222
231
  qi = q.mod_inverse(p)
223
- rsa = OpenSSL::PKey::RSA.new
224
- rsa.d = d
225
- rsa.dmp1 = dp
226
- rsa.dmq1 = dq
227
- rsa.e = e
228
- rsa.n = n
229
- rsa.p = p
230
- rsa.q = q
231
- rsa.iqmp = qi
232
+
233
+ rsa = OpenSSL::PKey::RSA.new
234
+ rsa.set_key(n, e, d)
235
+ rsa.set_factors(p, q)
236
+ rsa.set_crt_params(dp, dq, qi)
237
+
232
238
  return rsa
233
239
  end
234
240
 
@@ -1,3 +1,3 @@
1
1
  module JOSE
2
- VERSION = "1.1.2"
2
+ VERSION = "1.1.3"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jose
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Andrew Bennett
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2016-07-08 00:00:00.000000000 Z
11
+ date: 2018-09-21 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: hamster
@@ -30,28 +30,28 @@ dependencies:
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '1.12'
33
+ version: '1.16'
34
34
  type: :development
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: '1.12'
40
+ version: '1.16'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: '11.1'
47
+ version: '12.3'
48
48
  type: :development
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - "~>"
53
53
  - !ruby/object:Gem::Version
54
- version: '11.1'
54
+ version: '12.3'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: minitest
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -94,9 +94,37 @@ dependencies:
94
94
  - - ">="
95
95
  - !ruby/object:Gem::Version
96
96
  version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: ed25519
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :development
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
107
+ requirements:
108
+ - - ">="
109
+ - !ruby/object:Gem::Version
110
+ version: '0'
111
+ - !ruby/object:Gem::Dependency
112
+ name: x25519
113
+ requirement: !ruby/object:Gem::Requirement
114
+ requirements:
115
+ - - ">="
116
+ - !ruby/object:Gem::Version
117
+ version: '0'
118
+ type: :development
119
+ prerelease: false
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ requirements:
122
+ - - ">="
123
+ - !ruby/object:Gem::Version
124
+ version: '0'
97
125
  description: JSON Object Signing and Encryption
98
126
  email:
99
- - andrew@pixid.com
127
+ - potatosaladx@gmail.com
100
128
  executables: []
101
129
  extensions: []
102
130
  extra_rdoc_files: []
@@ -125,6 +153,7 @@ files:
125
153
  - lib/jose/jwa/aes_kw.rb
126
154
  - lib/jose/jwa/concat_kdf.rb
127
155
  - lib/jose/jwa/curve25519.rb
156
+ - lib/jose/jwa/curve25519_cryptorb.rb
128
157
  - lib/jose/jwa/curve25519_rbnacl.rb
129
158
  - lib/jose/jwa/curve25519_ruby.rb
130
159
  - lib/jose/jwa/curve25519_unsupported.rb
@@ -132,6 +161,7 @@ files:
132
161
  - lib/jose/jwa/curve448_ruby.rb
133
162
  - lib/jose/jwa/curve448_unsupported.rb
134
163
  - lib/jose/jwa/ed25519.rb
164
+ - lib/jose/jwa/ed25519_cryptorb.rb
135
165
  - lib/jose/jwa/ed25519_rbnacl.rb
136
166
  - lib/jose/jwa/ed448.rb
137
167
  - lib/jose/jwa/edwards_point.rb
@@ -140,6 +170,7 @@ files:
140
170
  - lib/jose/jwa/pkcs7.rb
141
171
  - lib/jose/jwa/sha3.rb
142
172
  - lib/jose/jwa/x25519.rb
173
+ - lib/jose/jwa/x25519_cryptorb.rb
143
174
  - lib/jose/jwa/x25519_rbnacl.rb
144
175
  - lib/jose/jwa/x448.rb
145
176
  - lib/jose/jwe.rb
@@ -200,9 +231,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
200
231
  version: '0'
201
232
  requirements: []
202
233
  rubyforge_project:
203
- rubygems_version: 2.5.1
234
+ rubygems_version: 2.7.6
204
235
  signing_key:
205
236
  specification_version: 4
206
237
  summary: JSON Object Signing and Encryption
207
238
  test_files: []
208
- has_rdoc: