jose 1.1.2 → 1.1.3
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 +5 -5
- data/.ruby-version +1 -1
- data/.travis.yml +2 -2
- data/CHANGELOG.md +8 -0
- data/Gemfile +1 -1
- data/jose.gemspec +5 -3
- data/lib/jose.rb +1 -0
- data/lib/jose/jwa/curve25519.rb +3 -0
- data/lib/jose/jwa/curve25519_cryptorb.rb +67 -0
- data/lib/jose/jwa/ed25519.rb +75 -0
- data/lib/jose/jwa/ed25519_cryptorb.rb +55 -0
- data/lib/jose/jwa/x25519_cryptorb.rb +47 -0
- data/lib/jose/jwk/kty_rsa.rb +25 -19
- data/lib/jose/version.rb +1 -1
- metadata +39 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bfd5ea4addb2127fc84ce5fe41ba48895c8906a1a1252dae1731c05cf530fcdd
|
4
|
+
data.tar.gz: 12051ba779da5cbc36666f1d2b1b8df8b6a781e03878afebacdd17456012e6bd
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 300be47e599d8fc493c955bca536d33aca2ce92d28f7088985f916e70bea4dbdf1d8d3e45e34a1d2fb2adda6103915bba7b76f8c072553e1dc209e9e790f93e2
|
7
|
+
data.tar.gz: c1e31e5479b471a86203d048b2a2efe9fb67f14941be4409a91438b74dc87cce6d075f7d2164c8a991e0d0af0477a3790211fc3a53fbb2a207cd6cd23f4f49f2
|
data/.ruby-version
CHANGED
@@ -1 +1 @@
|
|
1
|
-
2.
|
1
|
+
2.5.1
|
data/.travis.yml
CHANGED
data/CHANGELOG.md
CHANGED
@@ -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: '
|
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
|
data/jose.gemspec
CHANGED
@@ -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 = ["
|
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.
|
33
|
-
spec.add_development_dependency "rake", "~>
|
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
|
data/lib/jose.rb
CHANGED
@@ -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).
|
data/lib/jose/jwa/curve25519.rb
CHANGED
@@ -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)
|
data/lib/jose/jwa/ed25519.rb
CHANGED
@@ -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
|
data/lib/jose/jwk/kty_rsa.rb
CHANGED
@@ -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.
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
rsa.
|
18
|
-
|
19
|
-
|
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.
|
31
|
-
|
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
|
-
|
224
|
-
rsa
|
225
|
-
rsa.
|
226
|
-
rsa.
|
227
|
-
rsa.
|
228
|
-
|
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
|
|
data/lib/jose/version.rb
CHANGED
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.
|
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:
|
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.
|
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.
|
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: '
|
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: '
|
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
|
-
-
|
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.
|
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:
|