webauthn 2.0.0.beta1 → 2.3.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 +4 -4
- data/.gitignore +1 -0
- data/.rubocop.yml +65 -13
- data/.travis.yml +22 -18
- data/Appraisals +4 -0
- data/CHANGELOG.md +72 -25
- data/CONTRIBUTING.md +0 -5
- data/README.md +172 -15
- data/SECURITY.md +4 -4
- data/gemfiles/openssl_2_2.gemfile +7 -0
- data/lib/cose/rsapkcs1_algorithm.rb +43 -0
- data/lib/webauthn/attestation_object.rb +43 -0
- data/lib/webauthn/attestation_statement.rb +20 -20
- data/lib/webauthn/attestation_statement/android_key.rb +28 -30
- data/lib/webauthn/attestation_statement/android_safetynet.rb +30 -20
- data/lib/webauthn/attestation_statement/base.rb +124 -14
- data/lib/webauthn/attestation_statement/fido_u2f.rb +13 -9
- data/lib/webauthn/attestation_statement/packed.rb +14 -42
- data/lib/webauthn/attestation_statement/tpm.rb +38 -54
- data/lib/webauthn/authenticator_assertion_response.rb +7 -36
- data/lib/webauthn/authenticator_attestation_response.rb +24 -46
- data/lib/webauthn/authenticator_data.rb +51 -51
- data/lib/webauthn/authenticator_data/attested_credential_data.rb +29 -50
- data/lib/webauthn/authenticator_response.rb +15 -10
- data/lib/webauthn/configuration.rb +23 -0
- data/lib/webauthn/credential.rb +4 -4
- data/lib/webauthn/credential_creation_options.rb +1 -1
- data/lib/webauthn/fake_authenticator.rb +7 -3
- data/lib/webauthn/fake_authenticator/attestation_object.rb +7 -3
- data/lib/webauthn/fake_authenticator/authenticator_data.rb +2 -4
- data/lib/webauthn/fake_client.rb +17 -4
- data/lib/webauthn/public_key.rb +68 -0
- data/lib/webauthn/public_key_credential.rb +13 -3
- data/lib/webauthn/public_key_credential/creation_options.rb +2 -2
- data/lib/webauthn/u2f_migrator.rb +5 -4
- data/lib/webauthn/version.rb +1 -1
- data/script/ci/install-openssl +7 -0
- data/script/ci/install-ruby +13 -0
- data/webauthn.gemspec +14 -9
- metadata +70 -42
- data/lib/android_safetynet/attestation_response.rb +0 -84
- data/lib/cose/algorithm.rb +0 -38
- data/lib/tpm/constants.rb +0 -22
- data/lib/tpm/s_attest.rb +0 -26
- data/lib/tpm/s_attest/s_certify_info.rb +0 -14
- data/lib/tpm/sized_buffer.rb +0 -13
- data/lib/tpm/t_public.rb +0 -32
- data/lib/tpm/t_public/s_ecc_parms.rb +0 -17
- data/lib/tpm/t_public/s_rsa_parms.rb +0 -17
- data/lib/webauthn/attestation_statement/android_key/authorization_list.rb +0 -39
- data/lib/webauthn/attestation_statement/android_key/key_description.rb +0 -37
- data/lib/webauthn/attestation_statement/tpm/cert_info.rb +0 -44
- data/lib/webauthn/attestation_statement/tpm/pub_area.rb +0 -85
- data/lib/webauthn/signature_verifier.rb +0 -65
@@ -14,7 +14,8 @@ module WebAuthn
|
|
14
14
|
user_present: true,
|
15
15
|
user_verified: false,
|
16
16
|
attested_credential_data: true,
|
17
|
-
sign_count: 0
|
17
|
+
sign_count: 0,
|
18
|
+
extensions: nil
|
18
19
|
)
|
19
20
|
@client_data_hash = client_data_hash
|
20
21
|
@rp_id_hash = rp_id_hash
|
@@ -24,6 +25,7 @@ module WebAuthn
|
|
24
25
|
@user_verified = user_verified
|
25
26
|
@attested_credential_data = attested_credential_data
|
26
27
|
@sign_count = sign_count
|
28
|
+
@extensions = extensions
|
27
29
|
end
|
28
30
|
|
29
31
|
def serialize
|
@@ -44,7 +46,8 @@ module WebAuthn
|
|
44
46
|
:user_present,
|
45
47
|
:user_verified,
|
46
48
|
:attested_credential_data,
|
47
|
-
:sign_count
|
49
|
+
:sign_count,
|
50
|
+
:extensions
|
48
51
|
)
|
49
52
|
|
50
53
|
def authenticator_data
|
@@ -60,7 +63,8 @@ module WebAuthn
|
|
60
63
|
credential: credential_data,
|
61
64
|
user_present: user_present,
|
62
65
|
user_verified: user_verified,
|
63
|
-
sign_count: 0
|
66
|
+
sign_count: 0,
|
67
|
+
extensions: extensions
|
64
68
|
)
|
65
69
|
end
|
66
70
|
end
|
@@ -115,8 +115,7 @@ module WebAuthn
|
|
115
115
|
case credential[:public_key]
|
116
116
|
when OpenSSL::PKey::RSA
|
117
117
|
key = COSE::Key::RSA.from_pkey(credential[:public_key])
|
118
|
-
|
119
|
-
key.instance_variable_set(:@alg, -257)
|
118
|
+
key.alg = -257
|
120
119
|
when OpenSSL::PKey::EC::Point
|
121
120
|
alg = {
|
122
121
|
COSE::Key::Curve.by_name("P-256").id => -7,
|
@@ -125,8 +124,7 @@ module WebAuthn
|
|
125
124
|
}
|
126
125
|
|
127
126
|
key = COSE::Key::EC2.from_pkey(credential[:public_key])
|
128
|
-
|
129
|
-
key.instance_variable_set(:@alg, alg[key.crv])
|
127
|
+
key.alg = alg[key.crv]
|
130
128
|
|
131
129
|
end
|
132
130
|
|
data/lib/webauthn/fake_client.rb
CHANGED
@@ -29,7 +29,8 @@ module WebAuthn
|
|
29
29
|
rp_id: nil,
|
30
30
|
user_present: true,
|
31
31
|
user_verified: false,
|
32
|
-
attested_credential_data: true
|
32
|
+
attested_credential_data: true,
|
33
|
+
extensions: nil
|
33
34
|
)
|
34
35
|
rp_id ||= URI.parse(origin).host
|
35
36
|
|
@@ -41,12 +42,16 @@ module WebAuthn
|
|
41
42
|
client_data_hash: client_data_hash,
|
42
43
|
user_present: user_present,
|
43
44
|
user_verified: user_verified,
|
44
|
-
attested_credential_data: attested_credential_data
|
45
|
+
attested_credential_data: attested_credential_data,
|
46
|
+
extensions: extensions
|
45
47
|
)
|
46
48
|
|
47
49
|
id =
|
48
50
|
if attested_credential_data
|
49
|
-
WebAuthn::AuthenticatorData
|
51
|
+
WebAuthn::AuthenticatorData
|
52
|
+
.deserialize(CBOR.decode(attestation_object)["authData"])
|
53
|
+
.attested_credential_data
|
54
|
+
.id
|
50
55
|
else
|
51
56
|
"id-for-pk-without-attested-credential-data"
|
52
57
|
end
|
@@ -55,6 +60,7 @@ module WebAuthn
|
|
55
60
|
"type" => "public-key",
|
56
61
|
"id" => internal_encoder.encode(id),
|
57
62
|
"rawId" => encoder.encode(id),
|
63
|
+
"clientExtensionResults" => extensions,
|
58
64
|
"response" => {
|
59
65
|
"attestationObject" => encoder.encode(attestation_object),
|
60
66
|
"clientDataJSON" => encoder.encode(client_data_json)
|
@@ -62,7 +68,12 @@ module WebAuthn
|
|
62
68
|
}
|
63
69
|
end
|
64
70
|
|
65
|
-
def get(challenge: fake_challenge,
|
71
|
+
def get(challenge: fake_challenge,
|
72
|
+
rp_id: nil,
|
73
|
+
user_present: true,
|
74
|
+
user_verified: false,
|
75
|
+
sign_count: nil,
|
76
|
+
extensions: nil)
|
66
77
|
rp_id ||= URI.parse(origin).host
|
67
78
|
|
68
79
|
client_data_json = data_json_for(:get, encoder.decode(challenge))
|
@@ -74,12 +85,14 @@ module WebAuthn
|
|
74
85
|
user_present: user_present,
|
75
86
|
user_verified: user_verified,
|
76
87
|
sign_count: sign_count,
|
88
|
+
extensions: extensions
|
77
89
|
)
|
78
90
|
|
79
91
|
{
|
80
92
|
"type" => "public-key",
|
81
93
|
"id" => internal_encoder.encode(assertion[:credential_id]),
|
82
94
|
"rawId" => encoder.encode(assertion[:credential_id]),
|
95
|
+
"clientExtensionResults" => extensions,
|
83
96
|
"response" => {
|
84
97
|
"clientDataJSON" => encoder.encode(client_data_json),
|
85
98
|
"authenticatorData" => encoder.encode(assertion[:authenticator_data]),
|
@@ -0,0 +1,68 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require "cose/algorithm"
|
4
|
+
require "cose/error"
|
5
|
+
require "cose/key"
|
6
|
+
require "cose/rsapkcs1_algorithm"
|
7
|
+
require "webauthn/attestation_statement/fido_u2f/public_key"
|
8
|
+
|
9
|
+
module WebAuthn
|
10
|
+
class PublicKey
|
11
|
+
class UnsupportedAlgorithm < Error; end
|
12
|
+
|
13
|
+
def self.deserialize(public_key)
|
14
|
+
cose_key =
|
15
|
+
if WebAuthn::AttestationStatement::FidoU2f::PublicKey.uncompressed_point?(public_key)
|
16
|
+
# Gem version v1.11.0 and lower, used to behave so that Credential#public_key
|
17
|
+
# returned an EC P-256 uncompressed point.
|
18
|
+
#
|
19
|
+
# Because of https://github.com/cedarcode/webauthn-ruby/issues/137 this was changed
|
20
|
+
# and Credential#public_key started returning the unchanged COSE_Key formatted
|
21
|
+
# credentialPublicKey (as in https://www.w3.org/TR/webauthn/#credentialpublickey).
|
22
|
+
#
|
23
|
+
# Given that the credential public key is expected to be stored long-term by the gem
|
24
|
+
# user and later be passed as the public_key argument in the
|
25
|
+
# AuthenticatorAssertionResponse.verify call, we then need to support the two formats.
|
26
|
+
COSE::Key::EC2.new(
|
27
|
+
alg: COSE::Algorithm.by_name("ES256").id,
|
28
|
+
crv: 1,
|
29
|
+
x: public_key[1..32],
|
30
|
+
y: public_key[33..-1]
|
31
|
+
)
|
32
|
+
else
|
33
|
+
COSE::Key.deserialize(public_key)
|
34
|
+
end
|
35
|
+
|
36
|
+
new(cose_key: cose_key)
|
37
|
+
end
|
38
|
+
|
39
|
+
attr_reader :cose_key
|
40
|
+
|
41
|
+
def initialize(cose_key:)
|
42
|
+
@cose_key = cose_key
|
43
|
+
end
|
44
|
+
|
45
|
+
def pkey
|
46
|
+
@cose_key.to_pkey
|
47
|
+
end
|
48
|
+
|
49
|
+
def alg
|
50
|
+
@cose_key.alg
|
51
|
+
end
|
52
|
+
|
53
|
+
def verify(signature, verification_data)
|
54
|
+
cose_algorithm.verify(pkey, signature, verification_data)
|
55
|
+
rescue COSE::Error
|
56
|
+
false
|
57
|
+
end
|
58
|
+
|
59
|
+
private
|
60
|
+
|
61
|
+
def cose_algorithm
|
62
|
+
@cose_algorithm ||= COSE::Algorithm.find(alg) || raise(
|
63
|
+
UnsupportedAlgorithm,
|
64
|
+
"The public key algorithm #{alg} is not among the available COSE algorithms"
|
65
|
+
)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
@@ -4,21 +4,23 @@ require "webauthn/encoder"
|
|
4
4
|
|
5
5
|
module WebAuthn
|
6
6
|
class PublicKeyCredential
|
7
|
-
attr_reader :type, :id, :raw_id, :response
|
7
|
+
attr_reader :type, :id, :raw_id, :client_extension_outputs, :response
|
8
8
|
|
9
9
|
def self.from_client(credential)
|
10
10
|
new(
|
11
11
|
type: credential["type"],
|
12
12
|
id: credential["id"],
|
13
13
|
raw_id: WebAuthn.configuration.encoder.decode(credential["rawId"]),
|
14
|
+
client_extension_outputs: credential["clientExtensionResults"],
|
14
15
|
response: response_class.from_client(credential["response"])
|
15
16
|
)
|
16
17
|
end
|
17
18
|
|
18
|
-
def initialize(type:, id:, raw_id:, response:)
|
19
|
+
def initialize(type:, id:, raw_id:, client_extension_outputs: {}, response:)
|
19
20
|
@type = type
|
20
21
|
@id = id
|
21
22
|
@raw_id = raw_id
|
23
|
+
@client_extension_outputs = client_extension_outputs
|
22
24
|
@response = response
|
23
25
|
end
|
24
26
|
|
@@ -30,7 +32,11 @@ module WebAuthn
|
|
30
32
|
end
|
31
33
|
|
32
34
|
def sign_count
|
33
|
-
|
35
|
+
authenticator_data&.sign_count
|
36
|
+
end
|
37
|
+
|
38
|
+
def authenticator_extension_outputs
|
39
|
+
authenticator_data.extension_data if authenticator_data&.extension_data_included?
|
34
40
|
end
|
35
41
|
|
36
42
|
private
|
@@ -43,6 +49,10 @@ module WebAuthn
|
|
43
49
|
raw_id && id && raw_id == WebAuthn.standard_encoder.decode(id)
|
44
50
|
end
|
45
51
|
|
52
|
+
def authenticator_data
|
53
|
+
response&.authenticator_data
|
54
|
+
end
|
55
|
+
|
46
56
|
def encoder
|
47
57
|
WebAuthn.configuration.encoder
|
48
58
|
end
|
@@ -42,14 +42,14 @@ module WebAuthn
|
|
42
42
|
rp[:name] ||= configuration.rp_name
|
43
43
|
rp[:id] ||= configuration.rp_id
|
44
44
|
|
45
|
-
RPEntity.new(rp)
|
45
|
+
RPEntity.new(**rp)
|
46
46
|
else
|
47
47
|
rp
|
48
48
|
end
|
49
49
|
|
50
50
|
@user =
|
51
51
|
if user.is_a?(Hash)
|
52
|
-
UserEntity.new(user)
|
52
|
+
UserEntity.new(**user)
|
53
53
|
else
|
54
54
|
user
|
55
55
|
end
|
@@ -28,10 +28,11 @@ module WebAuthn
|
|
28
28
|
end
|
29
29
|
|
30
30
|
def credential
|
31
|
-
@credential ||=
|
32
|
-
|
33
|
-
|
34
|
-
|
31
|
+
@credential ||=
|
32
|
+
begin
|
33
|
+
hash = authenticator_data.send(:credential)
|
34
|
+
WebAuthn::AuthenticatorData::AttestedCredentialData::Credential.new(hash[:id], hash[:public_key].serialize)
|
35
|
+
end
|
35
36
|
end
|
36
37
|
|
37
38
|
def attestation_type
|
data/lib/webauthn/version.rb
CHANGED
@@ -0,0 +1,13 @@
|
|
1
|
+
#!/bin/bash
|
2
|
+
|
3
|
+
set -e
|
4
|
+
|
5
|
+
source "$HOME/.rvm/scripts/rvm"
|
6
|
+
|
7
|
+
if [[ "$LIBSSL" == "1.0" ]]; then
|
8
|
+
rvm use --install $RB --autolibs=read-only --disable-binary
|
9
|
+
elif [[ "$LIBSSL" == "1.1" ]]; then
|
10
|
+
rvm use --install $RB --binary --fuzzy
|
11
|
+
fi
|
12
|
+
|
13
|
+
[[ "`ruby -ropenssl -e 'puts OpenSSL::OPENSSL_VERSION'`" =~ "OpenSSL $LIBSSL" ]] || { echo "Wrong libssl version"; exit 1; }
|
data/webauthn.gemspec
CHANGED
@@ -22,27 +22,32 @@ Gem::Specification.new do |spec|
|
|
22
22
|
"source_code_uri" => "https://github.com/cedarcode/webauthn-ruby"
|
23
23
|
}
|
24
24
|
|
25
|
-
spec.files =
|
26
|
-
|
27
|
-
|
25
|
+
spec.files =
|
26
|
+
`git ls-files -z`.split("\x0").reject do |f|
|
27
|
+
f.match(%r{^(test|spec|features|assets)/})
|
28
|
+
end
|
29
|
+
|
28
30
|
spec.bindir = "exe"
|
29
31
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
30
32
|
spec.require_paths = ["lib"]
|
31
33
|
|
32
|
-
spec.required_ruby_version = ">= 2.
|
34
|
+
spec.required_ruby_version = ">= 2.4"
|
33
35
|
|
36
|
+
spec.add_dependency "android_key_attestation", "~> 0.3.0"
|
34
37
|
spec.add_dependency "awrence", "~> 1.1"
|
35
38
|
spec.add_dependency "bindata", "~> 2.4"
|
36
39
|
spec.add_dependency "cbor", "~> 0.5.9"
|
37
|
-
spec.add_dependency "cose", "~>
|
38
|
-
spec.add_dependency "jwt", [">= 1.5", "< 3.0"]
|
40
|
+
spec.add_dependency "cose", "~> 1.0"
|
39
41
|
spec.add_dependency "openssl", "~> 2.0"
|
42
|
+
spec.add_dependency "safety_net_attestation", "~> 0.4.0"
|
40
43
|
spec.add_dependency "securecompare", "~> 1.0"
|
44
|
+
spec.add_dependency "tpm-key_attestation", "~> 0.9.0"
|
41
45
|
|
42
|
-
spec.add_development_dependency "appraisal", "~> 2.
|
46
|
+
spec.add_development_dependency "appraisal", "~> 2.3.0"
|
43
47
|
spec.add_development_dependency "bundler", ">= 1.17", "< 3.0"
|
44
48
|
spec.add_development_dependency "byebug", "~> 11.0"
|
45
|
-
spec.add_development_dependency "rake", "~>
|
49
|
+
spec.add_development_dependency "rake", "~> 13.0"
|
46
50
|
spec.add_development_dependency "rspec", "~> 3.8"
|
47
|
-
spec.add_development_dependency "rubocop", "0.
|
51
|
+
spec.add_development_dependency "rubocop", "0.80.1"
|
52
|
+
spec.add_development_dependency "rubocop-rspec", "~> 1.38.1"
|
48
53
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: webauthn
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 2.
|
4
|
+
version: 2.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Gonzalo Rodriguez
|
@@ -9,8 +9,22 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: exe
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2020-06-27 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: android_key_attestation
|
16
|
+
requirement: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 0.3.0
|
21
|
+
type: :runtime
|
22
|
+
prerelease: false
|
23
|
+
version_requirements: !ruby/object:Gem::Requirement
|
24
|
+
requirements:
|
25
|
+
- - "~>"
|
26
|
+
- !ruby/object:Gem::Version
|
27
|
+
version: 0.3.0
|
14
28
|
- !ruby/object:Gem::Dependency
|
15
29
|
name: awrence
|
16
30
|
requirement: !ruby/object:Gem::Requirement
|
@@ -59,48 +73,42 @@ dependencies:
|
|
59
73
|
requirements:
|
60
74
|
- - "~>"
|
61
75
|
- !ruby/object:Gem::Version
|
62
|
-
version:
|
76
|
+
version: '1.0'
|
63
77
|
type: :runtime
|
64
78
|
prerelease: false
|
65
79
|
version_requirements: !ruby/object:Gem::Requirement
|
66
80
|
requirements:
|
67
81
|
- - "~>"
|
68
82
|
- !ruby/object:Gem::Version
|
69
|
-
version:
|
83
|
+
version: '1.0'
|
70
84
|
- !ruby/object:Gem::Dependency
|
71
|
-
name:
|
85
|
+
name: openssl
|
72
86
|
requirement: !ruby/object:Gem::Requirement
|
73
87
|
requirements:
|
74
|
-
- - "
|
75
|
-
- !ruby/object:Gem::Version
|
76
|
-
version: '1.5'
|
77
|
-
- - "<"
|
88
|
+
- - "~>"
|
78
89
|
- !ruby/object:Gem::Version
|
79
|
-
version: '
|
90
|
+
version: '2.0'
|
80
91
|
type: :runtime
|
81
92
|
prerelease: false
|
82
93
|
version_requirements: !ruby/object:Gem::Requirement
|
83
94
|
requirements:
|
84
|
-
- - "
|
85
|
-
- !ruby/object:Gem::Version
|
86
|
-
version: '1.5'
|
87
|
-
- - "<"
|
95
|
+
- - "~>"
|
88
96
|
- !ruby/object:Gem::Version
|
89
|
-
version: '
|
97
|
+
version: '2.0'
|
90
98
|
- !ruby/object:Gem::Dependency
|
91
|
-
name:
|
99
|
+
name: safety_net_attestation
|
92
100
|
requirement: !ruby/object:Gem::Requirement
|
93
101
|
requirements:
|
94
102
|
- - "~>"
|
95
103
|
- !ruby/object:Gem::Version
|
96
|
-
version:
|
104
|
+
version: 0.4.0
|
97
105
|
type: :runtime
|
98
106
|
prerelease: false
|
99
107
|
version_requirements: !ruby/object:Gem::Requirement
|
100
108
|
requirements:
|
101
109
|
- - "~>"
|
102
110
|
- !ruby/object:Gem::Version
|
103
|
-
version:
|
111
|
+
version: 0.4.0
|
104
112
|
- !ruby/object:Gem::Dependency
|
105
113
|
name: securecompare
|
106
114
|
requirement: !ruby/object:Gem::Requirement
|
@@ -115,20 +123,34 @@ dependencies:
|
|
115
123
|
- - "~>"
|
116
124
|
- !ruby/object:Gem::Version
|
117
125
|
version: '1.0'
|
126
|
+
- !ruby/object:Gem::Dependency
|
127
|
+
name: tpm-key_attestation
|
128
|
+
requirement: !ruby/object:Gem::Requirement
|
129
|
+
requirements:
|
130
|
+
- - "~>"
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 0.9.0
|
133
|
+
type: :runtime
|
134
|
+
prerelease: false
|
135
|
+
version_requirements: !ruby/object:Gem::Requirement
|
136
|
+
requirements:
|
137
|
+
- - "~>"
|
138
|
+
- !ruby/object:Gem::Version
|
139
|
+
version: 0.9.0
|
118
140
|
- !ruby/object:Gem::Dependency
|
119
141
|
name: appraisal
|
120
142
|
requirement: !ruby/object:Gem::Requirement
|
121
143
|
requirements:
|
122
144
|
- - "~>"
|
123
145
|
- !ruby/object:Gem::Version
|
124
|
-
version: 2.
|
146
|
+
version: 2.3.0
|
125
147
|
type: :development
|
126
148
|
prerelease: false
|
127
149
|
version_requirements: !ruby/object:Gem::Requirement
|
128
150
|
requirements:
|
129
151
|
- - "~>"
|
130
152
|
- !ruby/object:Gem::Version
|
131
|
-
version: 2.
|
153
|
+
version: 2.3.0
|
132
154
|
- !ruby/object:Gem::Dependency
|
133
155
|
name: bundler
|
134
156
|
requirement: !ruby/object:Gem::Requirement
|
@@ -169,14 +191,14 @@ dependencies:
|
|
169
191
|
requirements:
|
170
192
|
- - "~>"
|
171
193
|
- !ruby/object:Gem::Version
|
172
|
-
version: '
|
194
|
+
version: '13.0'
|
173
195
|
type: :development
|
174
196
|
prerelease: false
|
175
197
|
version_requirements: !ruby/object:Gem::Requirement
|
176
198
|
requirements:
|
177
199
|
- - "~>"
|
178
200
|
- !ruby/object:Gem::Version
|
179
|
-
version: '
|
201
|
+
version: '13.0'
|
180
202
|
- !ruby/object:Gem::Dependency
|
181
203
|
name: rspec
|
182
204
|
requirement: !ruby/object:Gem::Requirement
|
@@ -197,14 +219,28 @@ dependencies:
|
|
197
219
|
requirements:
|
198
220
|
- - '='
|
199
221
|
- !ruby/object:Gem::Version
|
200
|
-
version: 0.
|
222
|
+
version: 0.80.1
|
201
223
|
type: :development
|
202
224
|
prerelease: false
|
203
225
|
version_requirements: !ruby/object:Gem::Requirement
|
204
226
|
requirements:
|
205
227
|
- - '='
|
206
228
|
- !ruby/object:Gem::Version
|
207
|
-
version: 0.
|
229
|
+
version: 0.80.1
|
230
|
+
- !ruby/object:Gem::Dependency
|
231
|
+
name: rubocop-rspec
|
232
|
+
requirement: !ruby/object:Gem::Requirement
|
233
|
+
requirements:
|
234
|
+
- - "~>"
|
235
|
+
- !ruby/object:Gem::Version
|
236
|
+
version: 1.38.1
|
237
|
+
type: :development
|
238
|
+
prerelease: false
|
239
|
+
version_requirements: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - "~>"
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: 1.38.1
|
208
244
|
description: |-
|
209
245
|
WebAuthn ruby server library ― Make your application a W3C Web Authentication conformant
|
210
246
|
Relying Party and allow your users to authenticate with U2F and FIDO2 authenticators.
|
@@ -233,21 +269,13 @@ files:
|
|
233
269
|
- gemfiles/cose_head.gemfile
|
234
270
|
- gemfiles/openssl_2_0.gemfile
|
235
271
|
- gemfiles/openssl_2_1.gemfile
|
272
|
+
- gemfiles/openssl_2_2.gemfile
|
236
273
|
- gemfiles/openssl_head.gemfile
|
237
|
-
- lib/
|
238
|
-
- lib/cose/algorithm.rb
|
239
|
-
- lib/tpm/constants.rb
|
240
|
-
- lib/tpm/s_attest.rb
|
241
|
-
- lib/tpm/s_attest/s_certify_info.rb
|
242
|
-
- lib/tpm/sized_buffer.rb
|
243
|
-
- lib/tpm/t_public.rb
|
244
|
-
- lib/tpm/t_public/s_ecc_parms.rb
|
245
|
-
- lib/tpm/t_public/s_rsa_parms.rb
|
274
|
+
- lib/cose/rsapkcs1_algorithm.rb
|
246
275
|
- lib/webauthn.rb
|
276
|
+
- lib/webauthn/attestation_object.rb
|
247
277
|
- lib/webauthn/attestation_statement.rb
|
248
278
|
- lib/webauthn/attestation_statement/android_key.rb
|
249
|
-
- lib/webauthn/attestation_statement/android_key/authorization_list.rb
|
250
|
-
- lib/webauthn/attestation_statement/android_key/key_description.rb
|
251
279
|
- lib/webauthn/attestation_statement/android_safetynet.rb
|
252
280
|
- lib/webauthn/attestation_statement/base.rb
|
253
281
|
- lib/webauthn/attestation_statement/fido_u2f.rb
|
@@ -255,8 +283,6 @@ files:
|
|
255
283
|
- lib/webauthn/attestation_statement/none.rb
|
256
284
|
- lib/webauthn/attestation_statement/packed.rb
|
257
285
|
- lib/webauthn/attestation_statement/tpm.rb
|
258
|
-
- lib/webauthn/attestation_statement/tpm/cert_info.rb
|
259
|
-
- lib/webauthn/attestation_statement/tpm/pub_area.rb
|
260
286
|
- lib/webauthn/authenticator_assertion_response.rb
|
261
287
|
- lib/webauthn/authenticator_attestation_response.rb
|
262
288
|
- lib/webauthn/authenticator_data.rb
|
@@ -277,6 +303,7 @@ files:
|
|
277
303
|
- lib/webauthn/fake_authenticator/attestation_object.rb
|
278
304
|
- lib/webauthn/fake_authenticator/authenticator_data.rb
|
279
305
|
- lib/webauthn/fake_client.rb
|
306
|
+
- lib/webauthn/public_key.rb
|
280
307
|
- lib/webauthn/public_key_credential.rb
|
281
308
|
- lib/webauthn/public_key_credential/creation_options.rb
|
282
309
|
- lib/webauthn/public_key_credential/entity.rb
|
@@ -287,9 +314,10 @@ files:
|
|
287
314
|
- lib/webauthn/public_key_credential_with_assertion.rb
|
288
315
|
- lib/webauthn/public_key_credential_with_attestation.rb
|
289
316
|
- lib/webauthn/security_utils.rb
|
290
|
-
- lib/webauthn/signature_verifier.rb
|
291
317
|
- lib/webauthn/u2f_migrator.rb
|
292
318
|
- lib/webauthn/version.rb
|
319
|
+
- script/ci/install-openssl
|
320
|
+
- script/ci/install-ruby
|
293
321
|
- webauthn.gemspec
|
294
322
|
homepage: https://github.com/cedarcode/webauthn-ruby
|
295
323
|
licenses:
|
@@ -306,14 +334,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
306
334
|
requirements:
|
307
335
|
- - ">="
|
308
336
|
- !ruby/object:Gem::Version
|
309
|
-
version: '2.
|
337
|
+
version: '2.4'
|
310
338
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
311
339
|
requirements:
|
312
|
-
- - "
|
340
|
+
- - ">="
|
313
341
|
- !ruby/object:Gem::Version
|
314
|
-
version:
|
342
|
+
version: '0'
|
315
343
|
requirements: []
|
316
|
-
rubygems_version: 3.
|
344
|
+
rubygems_version: 3.1.4
|
317
345
|
signing_key:
|
318
346
|
specification_version: 4
|
319
347
|
summary: WebAuthn ruby server library
|