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.
Files changed (54) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rubocop.yml +65 -13
  4. data/.travis.yml +22 -18
  5. data/Appraisals +4 -0
  6. data/CHANGELOG.md +72 -25
  7. data/CONTRIBUTING.md +0 -5
  8. data/README.md +172 -15
  9. data/SECURITY.md +4 -4
  10. data/gemfiles/openssl_2_2.gemfile +7 -0
  11. data/lib/cose/rsapkcs1_algorithm.rb +43 -0
  12. data/lib/webauthn/attestation_object.rb +43 -0
  13. data/lib/webauthn/attestation_statement.rb +20 -20
  14. data/lib/webauthn/attestation_statement/android_key.rb +28 -30
  15. data/lib/webauthn/attestation_statement/android_safetynet.rb +30 -20
  16. data/lib/webauthn/attestation_statement/base.rb +124 -14
  17. data/lib/webauthn/attestation_statement/fido_u2f.rb +13 -9
  18. data/lib/webauthn/attestation_statement/packed.rb +14 -42
  19. data/lib/webauthn/attestation_statement/tpm.rb +38 -54
  20. data/lib/webauthn/authenticator_assertion_response.rb +7 -36
  21. data/lib/webauthn/authenticator_attestation_response.rb +24 -46
  22. data/lib/webauthn/authenticator_data.rb +51 -51
  23. data/lib/webauthn/authenticator_data/attested_credential_data.rb +29 -50
  24. data/lib/webauthn/authenticator_response.rb +15 -10
  25. data/lib/webauthn/configuration.rb +23 -0
  26. data/lib/webauthn/credential.rb +4 -4
  27. data/lib/webauthn/credential_creation_options.rb +1 -1
  28. data/lib/webauthn/fake_authenticator.rb +7 -3
  29. data/lib/webauthn/fake_authenticator/attestation_object.rb +7 -3
  30. data/lib/webauthn/fake_authenticator/authenticator_data.rb +2 -4
  31. data/lib/webauthn/fake_client.rb +17 -4
  32. data/lib/webauthn/public_key.rb +68 -0
  33. data/lib/webauthn/public_key_credential.rb +13 -3
  34. data/lib/webauthn/public_key_credential/creation_options.rb +2 -2
  35. data/lib/webauthn/u2f_migrator.rb +5 -4
  36. data/lib/webauthn/version.rb +1 -1
  37. data/script/ci/install-openssl +7 -0
  38. data/script/ci/install-ruby +13 -0
  39. data/webauthn.gemspec +14 -9
  40. metadata +70 -42
  41. data/lib/android_safetynet/attestation_response.rb +0 -84
  42. data/lib/cose/algorithm.rb +0 -38
  43. data/lib/tpm/constants.rb +0 -22
  44. data/lib/tpm/s_attest.rb +0 -26
  45. data/lib/tpm/s_attest/s_certify_info.rb +0 -14
  46. data/lib/tpm/sized_buffer.rb +0 -13
  47. data/lib/tpm/t_public.rb +0 -32
  48. data/lib/tpm/t_public/s_ecc_parms.rb +0 -17
  49. data/lib/tpm/t_public/s_rsa_parms.rb +0 -17
  50. data/lib/webauthn/attestation_statement/android_key/authorization_list.rb +0 -39
  51. data/lib/webauthn/attestation_statement/android_key/key_description.rb +0 -37
  52. data/lib/webauthn/attestation_statement/tpm/cert_info.rb +0 -44
  53. data/lib/webauthn/attestation_statement/tpm/pub_area.rb +0 -85
  54. 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
- # FIXME: Remove once writer in cose
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
- # FIXME: Remove once writer in cose
129
- key.instance_variable_set(:@alg, alg[key.crv])
127
+ key.alg = alg[key.crv]
130
128
 
131
129
  end
132
130
 
@@ -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.new(CBOR.decode(attestation_object)["authData"]).credential.id
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, rp_id: nil, user_present: true, user_verified: false, sign_count: nil)
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
- response&.authenticator_data&.sign_count
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 ||= begin
32
- hash = authenticator_data.send(:credential)
33
- WebAuthn::AuthenticatorData::AttestedCredentialData::Credential.new(hash[:id], hash[:public_key].serialize)
34
- end
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module WebAuthn
4
- VERSION = "2.0.0.beta1"
4
+ VERSION = "2.3.0"
5
5
  end
@@ -0,0 +1,7 @@
1
+ #!/bin/bash
2
+
3
+ set -e
4
+
5
+ if [[ "$LIBSSL" == "1.0" ]]; then
6
+ sudo apt-get install libssl1.0-dev
7
+ fi
@@ -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; }
@@ -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 = `git ls-files -z`.split("\x0").reject do |f|
26
- f.match(%r{^(test|spec|features|assets)/})
27
- end
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.3"
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", "~> 0.8.0"
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.2.0"
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", "~> 12.3"
49
+ spec.add_development_dependency "rake", "~> 13.0"
46
50
  spec.add_development_dependency "rspec", "~> 3.8"
47
- spec.add_development_dependency "rubocop", "0.73.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.0.0.beta1
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: 2019-09-16 00:00:00.000000000 Z
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: 0.8.0
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: 0.8.0
83
+ version: '1.0'
70
84
  - !ruby/object:Gem::Dependency
71
- name: jwt
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: '3.0'
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: '3.0'
97
+ version: '2.0'
90
98
  - !ruby/object:Gem::Dependency
91
- name: openssl
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: '2.0'
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: '2.0'
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.2.0
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.2.0
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: '12.3'
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: '12.3'
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.73.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.73.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/android_safetynet/attestation_response.rb
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.3'
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: 1.3.1
342
+ version: '0'
315
343
  requirements: []
316
- rubygems_version: 3.0.6
344
+ rubygems_version: 3.1.4
317
345
  signing_key:
318
346
  specification_version: 4
319
347
  summary: WebAuthn ruby server library