webauthn 2.2.0 → 2.2.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +3 -0
- data/.travis.yml +21 -8
- data/Appraisals +4 -0
- data/CHANGELOG.md +8 -0
- data/README.md +4 -7
- data/gemfiles/openssl_2_2.gemfile +7 -0
- data/lib/cose/rsapkcs1_algorithm.rb +4 -0
- data/lib/webauthn/attestation_object.rb +2 -2
- data/lib/webauthn/attestation_statement/base.rb +0 -5
- data/lib/webauthn/attestation_statement/packed.rb +2 -13
- data/lib/webauthn/attestation_statement/tpm.rb +10 -19
- data/lib/webauthn/authenticator_attestation_response.rb +2 -2
- data/lib/webauthn/version.rb +1 -1
- data/script/ci/install-openssl +7 -0
- data/script/ci/install-ruby +13 -0
- data/webauthn.gemspec +2 -2
- metadata +10 -7
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 1c61ea0ee6982c86b8413c42097b7ab9518c0b49e8067a89d5380ed76f214a0b
|
4
|
+
data.tar.gz: 4fe7e8aa42ff3a3894c5bc162575a7f5145c2d1bff6d844c247b434c4ff86854
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 8ef6c40183c3a7f45ba73e07e96eaa9bac5c05c4a61bb80849cc1ff985b4f139eefe12fcbff0d2988ce22e8c0bc3aa05ba0f41aa5f046b41df1c004ac16b9d8d
|
7
|
+
data.tar.gz: 36563d824c96cccda9281077197a4f0a98475d536f928aad5882e1e9b83c79c7f6b4b97afbd0abce8a58e3953f5fe74fa29a6d9ce644557761e94410e7158318
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -1,26 +1,39 @@
|
|
1
1
|
dist: bionic
|
2
2
|
language: ruby
|
3
|
-
cache: bundler
|
4
3
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
4
|
+
cache:
|
5
|
+
bundler: true
|
6
|
+
directories:
|
7
|
+
- /home/travis/.rvm/
|
8
|
+
|
9
|
+
env:
|
10
|
+
- LIBSSL=1.1 RB=2.7.1
|
11
|
+
- LIBSSL=1.1 RB=2.6.6
|
12
|
+
- LIBSSL=1.1 RB=2.5.8
|
13
|
+
- LIBSSL=1.1 RB=2.4.10
|
14
|
+
- LIBSSL=1.1 RB=ruby-head
|
15
|
+
- LIBSSL=1.0 RB=2.7.1
|
16
|
+
- LIBSSL=1.0 RB=2.6.6
|
17
|
+
- LIBSSL=1.0 RB=2.5.8
|
18
|
+
- LIBSSL=1.0 RB=2.4.10
|
19
|
+
- LIBSSL=1.0 RB=ruby-head
|
11
20
|
|
12
21
|
gemfile:
|
13
22
|
- gemfiles/cose_head.gemfile
|
14
23
|
- gemfiles/openssl_head.gemfile
|
24
|
+
- gemfiles/openssl_2_2.gemfile
|
15
25
|
- gemfiles/openssl_2_1.gemfile
|
16
26
|
- gemfiles/openssl_2_0.gemfile
|
17
27
|
|
18
28
|
matrix:
|
19
29
|
fast_finish: true
|
20
30
|
allow_failures:
|
21
|
-
-
|
31
|
+
- env: LIBSSL=1.1 RB=ruby-head
|
32
|
+
- env: LIBSSL=1.0 RB=ruby-head
|
22
33
|
- gemfile: gemfiles/cose_head.gemfile
|
23
34
|
- gemfile: gemfiles/openssl_head.gemfile
|
24
35
|
|
25
36
|
before_install:
|
37
|
+
- ./script/ci/install-openssl
|
38
|
+
- ./script/ci/install-ruby
|
26
39
|
- gem install bundler -v "~> 2.0"
|
data/Appraisals
CHANGED
data/CHANGELOG.md
CHANGED
@@ -1,5 +1,11 @@
|
|
1
1
|
# Changelog
|
2
2
|
|
3
|
+
## [v2.2.1] - 2020-06-06
|
4
|
+
|
5
|
+
### Fixed
|
6
|
+
|
7
|
+
- Fixed compatibility with OpenSSL-C (libssl) v1.0.2 ([@santiagorodriguez96])
|
8
|
+
|
3
9
|
## [v2.2.0] - 2020-03-14
|
4
10
|
|
5
11
|
### Added
|
@@ -282,6 +288,7 @@ Note: Both additions should help making it compatible with Chrome for Android 70
|
|
282
288
|
- `WebAuthn::AuthenticatorAttestationResponse.valid?` can be used to validate fido-u2f attestations returned by the browser
|
283
289
|
- Works with ruby 2.5
|
284
290
|
|
291
|
+
[v2.2.1]: https://github.com/cedarcode/webauthn-ruby/compare/v2.2.0...v2.2.1/
|
285
292
|
[v2.2.0]: https://github.com/cedarcode/webauthn-ruby/compare/v2.1.0...v2.2.0/
|
286
293
|
[v2.1.0]: https://github.com/cedarcode/webauthn-ruby/compare/v2.0.0...v2.1.0/
|
287
294
|
[v2.0.0]: https://github.com/cedarcode/webauthn-ruby/compare/v1.18.0...v2.0.0/
|
@@ -314,3 +321,4 @@ Note: Both additions should help making it compatible with Chrome for Android 70
|
|
314
321
|
[@sorah]: https://github.com/sorah
|
315
322
|
[@ssuttner]: https://github.com/ssuttner
|
316
323
|
[@padulafacundo]: https://github.com/padulafacundo
|
324
|
+
[@santiagorodriguez96]: https://github.com/santiagorodriguez96
|
data/README.md
CHANGED
@@ -66,11 +66,10 @@ Known conformant pairs are, for example:
|
|
66
66
|
- Mozilla Firefox for Desktop and Yubico's Security Key roaming authenticator via USB
|
67
67
|
- Safari in iOS 13.3+ and YubiKey 5 NFC via NFC
|
68
68
|
|
69
|
-
For a
|
70
|
-
|
71
|
-
- [apowers313/fido2-webauthn-status](https://github.com/apowers313/fido2-webauthn-status)
|
72
|
-
- [FIDO certified products](https://fidoalliance.org/certification/fido-certified-products)
|
69
|
+
For a complete list:
|
73
70
|
|
71
|
+
- User Agents (Clients): [Can I Use: Web Authentication API](https://caniuse.com/#search=webauthn)
|
72
|
+
- Authenticators: [FIDO certified products](https://fidoalliance.org/certification/fido-certified-products) (search for Type=Authenticator and Specification=FIDO2)
|
74
73
|
|
75
74
|
## Install
|
76
75
|
|
@@ -151,7 +150,7 @@ if !user.webauthn_id
|
|
151
150
|
end
|
152
151
|
|
153
152
|
options = WebAuthn::Credential.options_for_create(
|
154
|
-
user: { id: user.webauthn_id, name: user.name }
|
153
|
+
user: { id: user.webauthn_id, name: user.name },
|
155
154
|
exclude: user.credentials.map { |c| c.webauthn_id }
|
156
155
|
)
|
157
156
|
|
@@ -351,9 +350,7 @@ credential_with_assertion.verify(
|
|
351
350
|
| -------- | :--------: |
|
352
351
|
| packed (self attestation) | Yes |
|
353
352
|
| packed (x5c attestation) | Yes |
|
354
|
-
| packed (ECDAA attestation) | No |
|
355
353
|
| tpm (x5c attestation) | Yes |
|
356
|
-
| tpm (ECDAA attestation) | No |
|
357
354
|
| android-key | Yes |
|
358
355
|
| android-safetynet | Yes |
|
359
356
|
| fido-u2f | Yes |
|
@@ -8,6 +8,8 @@ require "webauthn/authenticator_data"
|
|
8
8
|
|
9
9
|
module WebAuthn
|
10
10
|
class AttestationObject
|
11
|
+
extend Forwardable
|
12
|
+
|
11
13
|
def self.deserialize(attestation_object)
|
12
14
|
from_map(CBOR.decode(attestation_object))
|
13
15
|
end
|
@@ -35,8 +37,6 @@ module WebAuthn
|
|
35
37
|
attestation_statement.valid?(authenticator_data, client_data_hash)
|
36
38
|
end
|
37
39
|
|
38
|
-
extend Forwardable
|
39
|
-
|
40
40
|
def_delegators :authenticator_data, :credential, :aaguid
|
41
41
|
def_delegators :attestation_statement, :attestation_certificate_key_id
|
42
42
|
end
|
@@ -10,7 +10,6 @@ module WebAuthn
|
|
10
10
|
ATTESTATION_TYPE_BASIC = "Basic"
|
11
11
|
ATTESTATION_TYPE_SELF = "Self"
|
12
12
|
ATTESTATION_TYPE_ATTCA = "AttCA"
|
13
|
-
ATTESTATION_TYPE_ECDAA = "ECDAA"
|
14
13
|
ATTESTATION_TYPE_BASIC_OR_ATTCA = "Basic_or_AttCA"
|
15
14
|
|
16
15
|
ATTESTATION_TYPES_WITH_ROOT = [
|
@@ -81,10 +80,6 @@ module WebAuthn
|
|
81
80
|
statement["x5c"]
|
82
81
|
end
|
83
82
|
|
84
|
-
def raw_ecdaa_key_id
|
85
|
-
statement["ecdaaKeyId"]
|
86
|
-
end
|
87
|
-
|
88
83
|
def signature
|
89
84
|
statement["sig"]
|
90
85
|
end
|
@@ -6,13 +6,10 @@ require "webauthn/signature_verifier"
|
|
6
6
|
|
7
7
|
module WebAuthn
|
8
8
|
# Implements https://www.w3.org/TR/2018/CR-webauthn-20180807/#packed-attestation
|
9
|
-
# ECDAA attestation is unsupported.
|
10
9
|
module AttestationStatement
|
11
10
|
class Packed < Base
|
12
11
|
# Follows "Verification procedure"
|
13
12
|
def valid?(authenticator_data, client_data_hash)
|
14
|
-
check_unsupported_feature
|
15
|
-
|
16
13
|
valid_format? &&
|
17
14
|
valid_algorithm?(authenticator_data.credential) &&
|
18
15
|
valid_ec_public_keys?(authenticator_data.credential) &&
|
@@ -30,19 +27,11 @@ module WebAuthn
|
|
30
27
|
end
|
31
28
|
|
32
29
|
def self_attestation?
|
33
|
-
!raw_certificates
|
30
|
+
!raw_certificates
|
34
31
|
end
|
35
32
|
|
36
33
|
def valid_format?
|
37
|
-
algorithm && signature
|
38
|
-
[raw_certificates, raw_ecdaa_key_id].compact.size < 2
|
39
|
-
)
|
40
|
-
end
|
41
|
-
|
42
|
-
def check_unsupported_feature
|
43
|
-
if raw_ecdaa_key_id
|
44
|
-
raise NotSupportedError, "ecdaaKeyId of the packed attestation format is not implemented yet"
|
45
|
-
end
|
34
|
+
algorithm && signature
|
46
35
|
end
|
47
36
|
|
48
37
|
def valid_ec_public_keys?(credential)
|
@@ -19,23 +19,16 @@ module WebAuthn
|
|
19
19
|
}.freeze
|
20
20
|
|
21
21
|
def valid?(authenticator_data, client_data_hash)
|
22
|
-
|
23
|
-
when ATTESTATION_TYPE_ATTCA
|
22
|
+
attestation_type == ATTESTATION_TYPE_ATTCA &&
|
24
23
|
ver == TPM_V2 &&
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
when ATTESTATION_TYPE_ECDAA
|
34
|
-
raise(
|
35
|
-
WebAuthn::AttestationStatement::Base::NotSupportedError,
|
36
|
-
"Attestation type ECDAA is not supported"
|
37
|
-
)
|
38
|
-
end
|
24
|
+
valid_key_attestation?(
|
25
|
+
authenticator_data.data + client_data_hash,
|
26
|
+
authenticator_data.credential.public_key_object,
|
27
|
+
authenticator_data.aaguid
|
28
|
+
) &&
|
29
|
+
matching_aaguid?(authenticator_data.attested_credential_data.raw_aaguid) &&
|
30
|
+
trustworthy?(aaguid: authenticator_data.aaguid) &&
|
31
|
+
[attestation_type, attestation_trust_path]
|
39
32
|
end
|
40
33
|
|
41
34
|
private
|
@@ -78,10 +71,8 @@ module WebAuthn
|
|
78
71
|
end
|
79
72
|
|
80
73
|
def attestation_type
|
81
|
-
if raw_certificates
|
74
|
+
if raw_certificates
|
82
75
|
ATTESTATION_TYPE_ATTCA
|
83
|
-
elsif raw_ecdaa_key_id && !raw_certificates
|
84
|
-
ATTESTATION_TYPE_ECDAA
|
85
76
|
else
|
86
77
|
raise "Attestation type invalid"
|
87
78
|
end
|
@@ -16,6 +16,8 @@ module WebAuthn
|
|
16
16
|
class AttestedCredentialVerificationError < VerificationError; end
|
17
17
|
|
18
18
|
class AuthenticatorAttestationResponse < AuthenticatorResponse
|
19
|
+
extend Forwardable
|
20
|
+
|
19
21
|
def self.from_client(response)
|
20
22
|
encoder = WebAuthn.configuration.encoder
|
21
23
|
|
@@ -48,8 +50,6 @@ module WebAuthn
|
|
48
50
|
@attestation_object ||= WebAuthn::AttestationObject.deserialize(attestation_object_bytes)
|
49
51
|
end
|
50
52
|
|
51
|
-
extend Forwardable
|
52
|
-
|
53
53
|
def_delegators(
|
54
54
|
:attestation_object,
|
55
55
|
:aaguid,
|
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
@@ -37,11 +37,11 @@ Gem::Specification.new do |spec|
|
|
37
37
|
spec.add_dependency "awrence", "~> 1.1"
|
38
38
|
spec.add_dependency "bindata", "~> 2.4"
|
39
39
|
spec.add_dependency "cbor", "~> 0.5.9"
|
40
|
-
spec.add_dependency "cose", "~>
|
40
|
+
spec.add_dependency "cose", "~> 1.0"
|
41
41
|
spec.add_dependency "openssl", "~> 2.0"
|
42
42
|
spec.add_dependency "safety_net_attestation", "~> 0.4.0"
|
43
43
|
spec.add_dependency "securecompare", "~> 1.0"
|
44
|
-
spec.add_dependency "tpm-key_attestation", "~> 0.
|
44
|
+
spec.add_dependency "tpm-key_attestation", "~> 0.9.0"
|
45
45
|
|
46
46
|
spec.add_development_dependency "appraisal", "~> 2.2.0"
|
47
47
|
spec.add_development_dependency "bundler", ">= 1.17", "< 3.0"
|
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.2.
|
4
|
+
version: 2.2.1
|
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: 2020-
|
12
|
+
date: 2020-06-06 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: android_key_attestation
|
@@ -73,14 +73,14 @@ dependencies:
|
|
73
73
|
requirements:
|
74
74
|
- - "~>"
|
75
75
|
- !ruby/object:Gem::Version
|
76
|
-
version:
|
76
|
+
version: '1.0'
|
77
77
|
type: :runtime
|
78
78
|
prerelease: false
|
79
79
|
version_requirements: !ruby/object:Gem::Requirement
|
80
80
|
requirements:
|
81
81
|
- - "~>"
|
82
82
|
- !ruby/object:Gem::Version
|
83
|
-
version:
|
83
|
+
version: '1.0'
|
84
84
|
- !ruby/object:Gem::Dependency
|
85
85
|
name: openssl
|
86
86
|
requirement: !ruby/object:Gem::Requirement
|
@@ -129,14 +129,14 @@ dependencies:
|
|
129
129
|
requirements:
|
130
130
|
- - "~>"
|
131
131
|
- !ruby/object:Gem::Version
|
132
|
-
version: 0.
|
132
|
+
version: 0.9.0
|
133
133
|
type: :runtime
|
134
134
|
prerelease: false
|
135
135
|
version_requirements: !ruby/object:Gem::Requirement
|
136
136
|
requirements:
|
137
137
|
- - "~>"
|
138
138
|
- !ruby/object:Gem::Version
|
139
|
-
version: 0.
|
139
|
+
version: 0.9.0
|
140
140
|
- !ruby/object:Gem::Dependency
|
141
141
|
name: appraisal
|
142
142
|
requirement: !ruby/object:Gem::Requirement
|
@@ -269,6 +269,7 @@ files:
|
|
269
269
|
- gemfiles/cose_head.gemfile
|
270
270
|
- gemfiles/openssl_2_0.gemfile
|
271
271
|
- gemfiles/openssl_2_1.gemfile
|
272
|
+
- gemfiles/openssl_2_2.gemfile
|
272
273
|
- gemfiles/openssl_head.gemfile
|
273
274
|
- lib/cose/rsapkcs1_algorithm.rb
|
274
275
|
- lib/webauthn.rb
|
@@ -316,6 +317,8 @@ files:
|
|
316
317
|
- lib/webauthn/signature_verifier.rb
|
317
318
|
- lib/webauthn/u2f_migrator.rb
|
318
319
|
- lib/webauthn/version.rb
|
320
|
+
- script/ci/install-openssl
|
321
|
+
- script/ci/install-ruby
|
319
322
|
- webauthn.gemspec
|
320
323
|
homepage: https://github.com/cedarcode/webauthn-ruby
|
321
324
|
licenses:
|
@@ -339,7 +342,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
339
342
|
- !ruby/object:Gem::Version
|
340
343
|
version: '0'
|
341
344
|
requirements: []
|
342
|
-
rubygems_version: 3.1.
|
345
|
+
rubygems_version: 3.1.4
|
343
346
|
signing_key:
|
344
347
|
specification_version: 4
|
345
348
|
summary: WebAuthn ruby server library
|