webauthn-slim 3.4.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.
Files changed (70) hide show
  1. checksums.yaml +7 -0
  2. data/.github/FUNDING.yml +1 -0
  3. data/.github/actions/install-openssl/action.yml +35 -0
  4. data/.github/actions/install-ruby/action.yml +76 -0
  5. data/.github/dependabot.yml +6 -0
  6. data/.github/workflows/build.yml +49 -0
  7. data/.github/workflows/git.yml +21 -0
  8. data/.github/workflows/release.yml +28 -0
  9. data/.gitignore +16 -0
  10. data/.rspec +2 -0
  11. data/.rubocop.yml +306 -0
  12. data/CHANGELOG.md +462 -0
  13. data/CONTRIBUTING.md +39 -0
  14. data/Gemfile +8 -0
  15. data/LICENSE.txt +21 -0
  16. data/README.md +479 -0
  17. data/Rakefile +10 -0
  18. data/SECURITY.md +21 -0
  19. data/bin/console +15 -0
  20. data/bin/setup +8 -0
  21. data/docs/advanced_configuration.md +173 -0
  22. data/docs/u2f_migration.md +90 -0
  23. data/lib/webauthn/attestation_object.rb +47 -0
  24. data/lib/webauthn/attestation_statement/apple.rb +65 -0
  25. data/lib/webauthn/attestation_statement/base.rb +175 -0
  26. data/lib/webauthn/attestation_statement/fido_u2f/public_key.rb +44 -0
  27. data/lib/webauthn/attestation_statement/fido_u2f.rb +71 -0
  28. data/lib/webauthn/attestation_statement/none.rb +23 -0
  29. data/lib/webauthn/attestation_statement/packed.rb +72 -0
  30. data/lib/webauthn/attestation_statement.rb +35 -0
  31. data/lib/webauthn/authenticator_assertion_response.rb +87 -0
  32. data/lib/webauthn/authenticator_attestation_response.rb +84 -0
  33. data/lib/webauthn/authenticator_data/attested_credential_data.rb +94 -0
  34. data/lib/webauthn/authenticator_data.rb +130 -0
  35. data/lib/webauthn/authenticator_response.rb +137 -0
  36. data/lib/webauthn/cbor.rb +189 -0
  37. data/lib/webauthn/client_data.rb +67 -0
  38. data/lib/webauthn/configuration.rb +68 -0
  39. data/lib/webauthn/cose.rb +237 -0
  40. data/lib/webauthn/credential.rb +26 -0
  41. data/lib/webauthn/credential_creation_options.rb +97 -0
  42. data/lib/webauthn/credential_entity.rb +11 -0
  43. data/lib/webauthn/credential_options.rb +17 -0
  44. data/lib/webauthn/credential_request_options.rb +44 -0
  45. data/lib/webauthn/credential_rp_entity.rb +8 -0
  46. data/lib/webauthn/credential_user_entity.rb +16 -0
  47. data/lib/webauthn/encoder.rb +18 -0
  48. data/lib/webauthn/encoders.rb +62 -0
  49. data/lib/webauthn/error.rb +5 -0
  50. data/lib/webauthn/fake_authenticator/attestation_object.rb +90 -0
  51. data/lib/webauthn/fake_authenticator/authenticator_data.rb +156 -0
  52. data/lib/webauthn/fake_authenticator.rb +134 -0
  53. data/lib/webauthn/fake_client.rb +179 -0
  54. data/lib/webauthn/json_serializer.rb +45 -0
  55. data/lib/webauthn/public_key.rb +65 -0
  56. data/lib/webauthn/public_key_credential/creation_options.rb +93 -0
  57. data/lib/webauthn/public_key_credential/entity.rb +21 -0
  58. data/lib/webauthn/public_key_credential/options.rb +51 -0
  59. data/lib/webauthn/public_key_credential/request_options.rb +46 -0
  60. data/lib/webauthn/public_key_credential/rp_entity.rb +23 -0
  61. data/lib/webauthn/public_key_credential/user_entity.rb +24 -0
  62. data/lib/webauthn/public_key_credential.rb +94 -0
  63. data/lib/webauthn/public_key_credential_with_assertion.rb +49 -0
  64. data/lib/webauthn/public_key_credential_with_attestation.rb +30 -0
  65. data/lib/webauthn/relying_party.rb +150 -0
  66. data/lib/webauthn/u2f_migrator.rb +76 -0
  67. data/lib/webauthn/version.rb +5 -0
  68. data/lib/webauthn.rb +19 -0
  69. data/webauthn.gemspec +43 -0
  70. metadata +218 -0
@@ -0,0 +1,30 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "webauthn/authenticator_attestation_response"
4
+ require "webauthn/public_key_credential"
5
+
6
+ module WebAuthn
7
+ class PublicKeyCredentialWithAttestation < PublicKeyCredential
8
+ def self.response_class
9
+ WebAuthn::AuthenticatorAttestationResponse
10
+ end
11
+
12
+ def verify(challenge, user_presence: nil, user_verification: nil)
13
+ super
14
+
15
+ response.verify(encoder.decode(challenge), user_presence: user_presence, user_verification: user_verification)
16
+
17
+ true
18
+ end
19
+
20
+ def public_key
21
+ if raw_public_key
22
+ encoder.encode(raw_public_key)
23
+ end
24
+ end
25
+
26
+ def raw_public_key
27
+ response&.authenticator_data&.credential&.public_key
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,150 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "openssl"
4
+ require "webauthn/credential"
5
+ require "webauthn/encoder"
6
+ require "webauthn/error"
7
+
8
+ module WebAuthn
9
+ class RootCertificateFinderNotSupportedError < Error; end
10
+
11
+ class RelyingParty
12
+ DEFAULT_ALGORITHMS = ["ES256", "PS256", "RS256"].freeze
13
+
14
+ def initialize(
15
+ algorithms: DEFAULT_ALGORITHMS.dup,
16
+ encoding: WebAuthn::Encoder::STANDARD_ENCODING,
17
+ allowed_origins: nil,
18
+ allowed_top_origins: nil,
19
+ origin: nil,
20
+ id: nil,
21
+ name: nil,
22
+ verify_attestation_statement: true,
23
+ verify_cross_origin: false,
24
+ credential_options_timeout: 120000,
25
+ silent_authentication: false,
26
+ acceptable_attestation_types: ['None', 'Self', 'Basic', 'AttCA', 'Basic_or_AttCA', 'AnonCA'],
27
+ attestation_root_certificates_finders: [],
28
+ legacy_u2f_appid: nil
29
+ )
30
+ @algorithms = algorithms
31
+ @encoding = encoding
32
+ @allowed_origins = allowed_origins
33
+ @allowed_top_origins = allowed_top_origins
34
+ @id = id
35
+ @name = name
36
+ @verify_attestation_statement = verify_attestation_statement
37
+ @verify_cross_origin = verify_cross_origin
38
+ @credential_options_timeout = credential_options_timeout
39
+ @silent_authentication = silent_authentication
40
+ @acceptable_attestation_types = acceptable_attestation_types
41
+ @legacy_u2f_appid = legacy_u2f_appid
42
+ self.origin = origin
43
+ self.attestation_root_certificates_finders = attestation_root_certificates_finders
44
+ end
45
+
46
+ attr_accessor :algorithms,
47
+ :encoding,
48
+ :allowed_origins,
49
+ :allowed_top_origins,
50
+ :id,
51
+ :name,
52
+ :verify_attestation_statement,
53
+ :verify_cross_origin,
54
+ :credential_options_timeout,
55
+ :silent_authentication,
56
+ :acceptable_attestation_types,
57
+ :legacy_u2f_appid
58
+
59
+ attr_reader :attestation_root_certificates_finders
60
+
61
+ # This is the user-data encoder.
62
+ # Used to decode user input and to encode data provided to the user.
63
+ def encoder
64
+ @encoder ||= WebAuthn::Encoder.new(encoding)
65
+ end
66
+
67
+ def attestation_root_certificates_finders=(finders)
68
+ if !finders.respond_to?(:each)
69
+ finders = [finders]
70
+ end
71
+
72
+ finders.each do |finder|
73
+ unless finder.respond_to?(:find)
74
+ raise RootCertificateFinderNotSupportedError, "Finder must implement `find` method"
75
+ end
76
+ end
77
+
78
+ @attestation_root_certificates_finders = finders
79
+ end
80
+
81
+ def options_for_registration(**keyword_arguments)
82
+ WebAuthn::Credential.options_for_create(
83
+ **keyword_arguments,
84
+ relying_party: self
85
+ )
86
+ end
87
+
88
+ def verify_registration(raw_credential, challenge, user_presence: nil, user_verification: nil)
89
+ webauthn_credential = WebAuthn::Credential.from_create(raw_credential, relying_party: self)
90
+
91
+ if webauthn_credential.verify(challenge, user_presence: user_presence, user_verification: user_verification)
92
+ webauthn_credential
93
+ end
94
+ end
95
+
96
+ def options_for_authentication(**keyword_arguments)
97
+ WebAuthn::Credential.options_for_get(
98
+ **keyword_arguments,
99
+ relying_party: self
100
+ )
101
+ end
102
+
103
+ def verify_authentication(
104
+ raw_credential,
105
+ challenge,
106
+ user_presence: nil,
107
+ user_verification: nil,
108
+ public_key: nil,
109
+ sign_count: nil
110
+ )
111
+ webauthn_credential = WebAuthn::Credential.from_get(raw_credential, relying_party: self)
112
+
113
+ stored_credential = yield(webauthn_credential) if block_given?
114
+
115
+ if webauthn_credential.verify(
116
+ challenge,
117
+ public_key: public_key || stored_credential.public_key,
118
+ sign_count: sign_count || stored_credential.sign_count,
119
+ user_presence: user_presence,
120
+ user_verification: user_verification
121
+ )
122
+ block_given? ? [webauthn_credential, stored_credential] : webauthn_credential
123
+ end
124
+ end
125
+
126
+ # DEPRECATED: This method will be removed in future.
127
+ def origin
128
+ warn(
129
+ "DEPRECATION WARNING: `WebAuthn.origin` is deprecated and returns `nil` " \
130
+ "when `WebAuthn.allowed_origins` contains more than one origin. " \
131
+ "It will be removed in future. Please use `WebAuthn.allowed_origins` instead."
132
+ )
133
+
134
+ allowed_origins.first if allowed_origins&.size == 1
135
+ end
136
+
137
+ # DEPRECATED: This method will be removed in future.
138
+ def origin=(new_origin)
139
+ return if new_origin.nil?
140
+
141
+ warn(
142
+ "DEPRECATION WARNING: `WebAuthn.origin=` is deprecated and will be removed in future. "\
143
+ "Please use `WebAuthn.allowed_origins=` instead "\
144
+ "that also allows configuring multiple origins per Relying Party"
145
+ )
146
+
147
+ @allowed_origins ||= Array(new_origin) # rubocop:disable Naming/MemoizedInstanceVariableName
148
+ end
149
+ end
150
+ end
@@ -0,0 +1,76 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'webauthn/fake_client'
4
+ require 'webauthn/attestation_statement/fido_u2f'
5
+
6
+ module WebAuthn
7
+ class U2fMigrator
8
+ def initialize(app_id:, certificate:, key_handle:, public_key:, counter:)
9
+ @app_id = app_id
10
+ @certificate = certificate
11
+ @key_handle = key_handle
12
+ @public_key = public_key
13
+ @counter = counter
14
+ end
15
+
16
+ def authenticator_data
17
+ @authenticator_data ||= WebAuthn::FakeAuthenticator::AuthenticatorData.new(
18
+ rp_id_hash: OpenSSL::Digest::SHA256.digest(@app_id.to_s),
19
+ credential: {
20
+ id: credential_id,
21
+ public_key: credential_cose_key
22
+ },
23
+ sign_count: @counter,
24
+ user_present: true,
25
+ user_verified: false,
26
+ aaguid: WebAuthn::AuthenticatorData::AttestedCredentialData::ZEROED_AAGUID
27
+ )
28
+ end
29
+
30
+ def credential
31
+ @credential ||=
32
+ begin
33
+ hash = authenticator_data.send(:credential)
34
+ WebAuthn::AuthenticatorData::AttestedCredentialData::Credential.new(
35
+ id: hash[:id],
36
+ public_key: hash[:public_key].serialize
37
+ )
38
+ end
39
+ end
40
+
41
+ def attestation_type
42
+ WebAuthn::AttestationStatement::ATTESTATION_TYPE_BASIC_OR_ATTCA
43
+ end
44
+
45
+ def attestation_trust_path
46
+ @attestation_trust_path ||= [
47
+ OpenSSL::X509::Certificate.new(WebAuthn::Encoders::Base64Encoder.decode(@certificate))
48
+ ]
49
+ end
50
+
51
+ private
52
+
53
+ # https://fidoalliance.org/specs/fido-v2.0-rd-20180702/fido-client-to-authenticator-protocol-v2.0-rd-20180702.html#u2f-authenticatorMakeCredential-interoperability
54
+ # Let credentialId be a credentialIdLength byte array initialized with CTAP1/U2F response key handle bytes.
55
+ def credential_id
56
+ WebAuthn::Encoders::Base64UrlEncoder.decode(@key_handle)
57
+ end
58
+
59
+ # Let x9encodedUserPublicKey be the user public key returned in the U2F registration response message [U2FRawMsgs].
60
+ # Let coseEncodedCredentialPublicKey be the result of converting x9encodedUserPublicKey’s value from ANS X9.62 /
61
+ # Sec-1 v2 uncompressed curve point representation [SEC1V2] to COSE_Key representation ([RFC8152] Section 7).
62
+ def credential_cose_key
63
+ decoded_public_key = WebAuthn::Encoders::Base64Encoder.decode(@public_key)
64
+ if WebAuthn::AttestationStatement::FidoU2f::PublicKey.uncompressed_point?(decoded_public_key)
65
+ COSE::Key::EC2.new(
66
+ alg: COSE::Algorithm.by_name("ES256").id,
67
+ crv: 1,
68
+ x: decoded_public_key[1..32],
69
+ y: decoded_public_key[33..-1]
70
+ )
71
+ else
72
+ raise "expected U2F public key to be in uncompressed point format"
73
+ end
74
+ end
75
+ end
76
+ end
@@ -0,0 +1,5 @@
1
+ # frozen_string_literal: true
2
+
3
+ module WebAuthn
4
+ VERSION = "3.4.3"
5
+ end
data/lib/webauthn.rb ADDED
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "webauthn/json_serializer"
4
+ require "webauthn/configuration"
5
+ require "webauthn/credential"
6
+ require "webauthn/credential_creation_options"
7
+ require "webauthn/credential_request_options"
8
+ require "webauthn/version"
9
+
10
+ module WebAuthn
11
+ TYPE_PUBLIC_KEY = "public-key"
12
+
13
+ class << self
14
+ def generate_user_id
15
+ configuration.encoder.encode(SecureRandom.random_bytes(64))
16
+ end
17
+ alias_method :generate_user_handle, :generate_user_id
18
+ end
19
+ end
data/webauthn.gemspec ADDED
@@ -0,0 +1,43 @@
1
+ # frozen_string_literal: true
2
+
3
+ lib = File.expand_path('lib', __dir__)
4
+ $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
5
+ require "webauthn/version"
6
+
7
+ Gem::Specification.new do |spec|
8
+ spec.name = "webauthn-slim"
9
+ spec.version = WebAuthn::VERSION
10
+ spec.authors = ["Gonzalo Rodriguez", "Braulio Martinez"]
11
+ spec.email = ["gonzalo@cedarcode.com", "braulio@cedarcode.com"]
12
+
13
+ spec.summary = "WebAuthn ruby server library"
14
+ spec.description = 'WebAuthn ruby server library ― Make your application a W3C Web Authentication conformant'
15
+ spec.homepage = "https://github.com/npezza93/webauthn-slim"
16
+ spec.license = "MIT"
17
+
18
+ spec.metadata = {
19
+ "bug_tracker_uri" => "https://github.com/npezza93/webauthn-slim/issues",
20
+ "changelog_uri" => "https://github.com/npezza93/webauthn-slim/blob/master/CHANGELOG.md",
21
+ "source_code_uri" => "https://github.com/npezza93/webauthn-slim"
22
+ }
23
+
24
+ spec.files =
25
+ `git ls-files -z`.split("\x0").reject do |f|
26
+ f.match(%r{^(test|spec|features|assets)/})
27
+ end
28
+
29
+ spec.bindir = "exe"
30
+ spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
31
+ spec.require_paths = ["lib"]
32
+
33
+ spec.required_ruby_version = ">= 4.0"
34
+
35
+ spec.add_dependency "openssl", ">= 2.2"
36
+
37
+ spec.add_development_dependency "bundler", "~> 4.0"
38
+ spec.add_development_dependency "rake", "~> 13.0"
39
+ spec.add_development_dependency "rspec", "~> 3.8"
40
+ spec.add_development_dependency "rubocop", "~> 1"
41
+ spec.add_development_dependency "rubocop-rake", "~> 0.5"
42
+ spec.add_development_dependency "rubocop-rspec", ">= 2.2", "< 4.0"
43
+ end
metadata ADDED
@@ -0,0 +1,218 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: webauthn-slim
3
+ version: !ruby/object:Gem::Version
4
+ version: 3.4.3
5
+ platform: ruby
6
+ authors:
7
+ - Gonzalo Rodriguez
8
+ - Braulio Martinez
9
+ bindir: exe
10
+ cert_chain: []
11
+ date: 1980-01-02 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: openssl
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '2.2'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '2.2'
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: '4.0'
34
+ type: :development
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: '4.0'
41
+ - !ruby/object:Gem::Dependency
42
+ name: rake
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: '13.0'
48
+ type: :development
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: '13.0'
55
+ - !ruby/object:Gem::Dependency
56
+ name: rspec
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '3.8'
62
+ type: :development
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '3.8'
69
+ - !ruby/object:Gem::Dependency
70
+ name: rubocop
71
+ requirement: !ruby/object:Gem::Requirement
72
+ requirements:
73
+ - - "~>"
74
+ - !ruby/object:Gem::Version
75
+ version: '1'
76
+ type: :development
77
+ prerelease: false
78
+ version_requirements: !ruby/object:Gem::Requirement
79
+ requirements:
80
+ - - "~>"
81
+ - !ruby/object:Gem::Version
82
+ version: '1'
83
+ - !ruby/object:Gem::Dependency
84
+ name: rubocop-rake
85
+ requirement: !ruby/object:Gem::Requirement
86
+ requirements:
87
+ - - "~>"
88
+ - !ruby/object:Gem::Version
89
+ version: '0.5'
90
+ type: :development
91
+ prerelease: false
92
+ version_requirements: !ruby/object:Gem::Requirement
93
+ requirements:
94
+ - - "~>"
95
+ - !ruby/object:Gem::Version
96
+ version: '0.5'
97
+ - !ruby/object:Gem::Dependency
98
+ name: rubocop-rspec
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ">="
102
+ - !ruby/object:Gem::Version
103
+ version: '2.2'
104
+ - - "<"
105
+ - !ruby/object:Gem::Version
106
+ version: '4.0'
107
+ type: :development
108
+ prerelease: false
109
+ version_requirements: !ruby/object:Gem::Requirement
110
+ requirements:
111
+ - - ">="
112
+ - !ruby/object:Gem::Version
113
+ version: '2.2'
114
+ - - "<"
115
+ - !ruby/object:Gem::Version
116
+ version: '4.0'
117
+ description: WebAuthn ruby server library ― Make your application a W3C Web Authentication
118
+ conformant
119
+ email:
120
+ - gonzalo@cedarcode.com
121
+ - braulio@cedarcode.com
122
+ executables: []
123
+ extensions: []
124
+ extra_rdoc_files: []
125
+ files:
126
+ - ".github/FUNDING.yml"
127
+ - ".github/actions/install-openssl/action.yml"
128
+ - ".github/actions/install-ruby/action.yml"
129
+ - ".github/dependabot.yml"
130
+ - ".github/workflows/build.yml"
131
+ - ".github/workflows/git.yml"
132
+ - ".github/workflows/release.yml"
133
+ - ".gitignore"
134
+ - ".rspec"
135
+ - ".rubocop.yml"
136
+ - CHANGELOG.md
137
+ - CONTRIBUTING.md
138
+ - Gemfile
139
+ - LICENSE.txt
140
+ - README.md
141
+ - Rakefile
142
+ - SECURITY.md
143
+ - bin/console
144
+ - bin/setup
145
+ - docs/advanced_configuration.md
146
+ - docs/u2f_migration.md
147
+ - lib/webauthn.rb
148
+ - lib/webauthn/attestation_object.rb
149
+ - lib/webauthn/attestation_statement.rb
150
+ - lib/webauthn/attestation_statement/apple.rb
151
+ - lib/webauthn/attestation_statement/base.rb
152
+ - lib/webauthn/attestation_statement/fido_u2f.rb
153
+ - lib/webauthn/attestation_statement/fido_u2f/public_key.rb
154
+ - lib/webauthn/attestation_statement/none.rb
155
+ - lib/webauthn/attestation_statement/packed.rb
156
+ - lib/webauthn/authenticator_assertion_response.rb
157
+ - lib/webauthn/authenticator_attestation_response.rb
158
+ - lib/webauthn/authenticator_data.rb
159
+ - lib/webauthn/authenticator_data/attested_credential_data.rb
160
+ - lib/webauthn/authenticator_response.rb
161
+ - lib/webauthn/cbor.rb
162
+ - lib/webauthn/client_data.rb
163
+ - lib/webauthn/configuration.rb
164
+ - lib/webauthn/cose.rb
165
+ - lib/webauthn/credential.rb
166
+ - lib/webauthn/credential_creation_options.rb
167
+ - lib/webauthn/credential_entity.rb
168
+ - lib/webauthn/credential_options.rb
169
+ - lib/webauthn/credential_request_options.rb
170
+ - lib/webauthn/credential_rp_entity.rb
171
+ - lib/webauthn/credential_user_entity.rb
172
+ - lib/webauthn/encoder.rb
173
+ - lib/webauthn/encoders.rb
174
+ - lib/webauthn/error.rb
175
+ - lib/webauthn/fake_authenticator.rb
176
+ - lib/webauthn/fake_authenticator/attestation_object.rb
177
+ - lib/webauthn/fake_authenticator/authenticator_data.rb
178
+ - lib/webauthn/fake_client.rb
179
+ - lib/webauthn/json_serializer.rb
180
+ - lib/webauthn/public_key.rb
181
+ - lib/webauthn/public_key_credential.rb
182
+ - lib/webauthn/public_key_credential/creation_options.rb
183
+ - lib/webauthn/public_key_credential/entity.rb
184
+ - lib/webauthn/public_key_credential/options.rb
185
+ - lib/webauthn/public_key_credential/request_options.rb
186
+ - lib/webauthn/public_key_credential/rp_entity.rb
187
+ - lib/webauthn/public_key_credential/user_entity.rb
188
+ - lib/webauthn/public_key_credential_with_assertion.rb
189
+ - lib/webauthn/public_key_credential_with_attestation.rb
190
+ - lib/webauthn/relying_party.rb
191
+ - lib/webauthn/u2f_migrator.rb
192
+ - lib/webauthn/version.rb
193
+ - webauthn.gemspec
194
+ homepage: https://github.com/npezza93/webauthn-slim
195
+ licenses:
196
+ - MIT
197
+ metadata:
198
+ bug_tracker_uri: https://github.com/npezza93/webauthn-slim/issues
199
+ changelog_uri: https://github.com/npezza93/webauthn-slim/blob/master/CHANGELOG.md
200
+ source_code_uri: https://github.com/npezza93/webauthn-slim
201
+ rdoc_options: []
202
+ require_paths:
203
+ - lib
204
+ required_ruby_version: !ruby/object:Gem::Requirement
205
+ requirements:
206
+ - - ">="
207
+ - !ruby/object:Gem::Version
208
+ version: '4.0'
209
+ required_rubygems_version: !ruby/object:Gem::Requirement
210
+ requirements:
211
+ - - ">="
212
+ - !ruby/object:Gem::Version
213
+ version: '0'
214
+ requirements: []
215
+ rubygems_version: 4.0.20
216
+ specification_version: 4
217
+ summary: WebAuthn ruby server library
218
+ test_files: []