webauthn 2.0.0.beta1 → 2.3.0

Sign up to get free protection for your applications and to get access to all the features.
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