webauthn 3.0.0.alpha1 → 3.0.0.alpha2
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/.github/workflows/build.yml +31 -0
 - data/.github/workflows/git.yml +21 -0
 - data/.rubocop.yml +57 -1
 - data/CHANGELOG.md +63 -1
 - data/README.md +5 -2
 - data/SECURITY.md +6 -3
 - data/docs/advanced_configuration.md +174 -0
 - data/docs/u2f_migration.md +3 -2
 - data/lib/cose/rsapkcs1_algorithm.rb +7 -0
 - data/lib/webauthn/attestation_statement/android_key.rb +0 -4
 - data/lib/webauthn/attestation_statement/android_safetynet.rb +1 -5
 - data/lib/webauthn/attestation_statement/apple.rb +65 -0
 - data/lib/webauthn/attestation_statement/base.rb +11 -22
 - data/lib/webauthn/attestation_statement/none.rb +7 -1
 - data/lib/webauthn/attestation_statement/packed.rb +1 -1
 - data/lib/webauthn/attestation_statement/tpm.rb +2 -2
 - data/lib/webauthn/attestation_statement.rb +4 -1
 - data/lib/webauthn/authenticator_data/attested_credential_data.rb +2 -3
 - data/lib/webauthn/authenticator_response.rb +1 -2
 - data/lib/webauthn/credential_creation_options.rb +2 -0
 - data/lib/webauthn/credential_request_options.rb +2 -0
 - data/lib/webauthn/fake_authenticator/authenticator_data.rb +1 -1
 - data/lib/webauthn/fake_authenticator.rb +11 -3
 - data/lib/webauthn/fake_client.rb +10 -3
 - data/lib/webauthn/public_key_credential/entity.rb +3 -4
 - data/lib/webauthn/relying_party.rb +2 -2
 - data/lib/webauthn/u2f_migrator.rb +4 -1
 - data/lib/webauthn/version.rb +1 -1
 - data/webauthn.gemspec +7 -8
 - metadata +45 -59
 - data/.travis.yml +0 -39
 - data/Appraisals +0 -21
 - data/gemfiles/cose_head.gemfile +0 -7
 - data/gemfiles/openssl_2_0.gemfile +0 -7
 - data/gemfiles/openssl_2_1.gemfile +0 -7
 - data/gemfiles/openssl_2_2.gemfile +0 -7
 - data/gemfiles/openssl_head.gemfile +0 -7
 - data/lib/webauthn/security_utils.rb +0 -20
 - data/script/ci/install-openssl +0 -7
 - data/script/ci/install-ruby +0 -13
 
| 
         @@ -6,12 +6,18 @@ module WebAuthn 
     | 
|
| 
       6 
6 
     | 
    
         
             
              module AttestationStatement
         
     | 
| 
       7 
7 
     | 
    
         
             
                class None < Base
         
     | 
| 
       8 
8 
     | 
    
         
             
                  def valid?(*_args)
         
     | 
| 
       9 
     | 
    
         
            -
                    if statement == {}
         
     | 
| 
      
 9 
     | 
    
         
            +
                    if statement == {} && trustworthy?
         
     | 
| 
       10 
10 
     | 
    
         
             
                      [WebAuthn::AttestationStatement::ATTESTATION_TYPE_NONE, nil]
         
     | 
| 
       11 
11 
     | 
    
         
             
                    else
         
     | 
| 
       12 
12 
     | 
    
         
             
                      false
         
     | 
| 
       13 
13 
     | 
    
         
             
                    end
         
     | 
| 
       14 
14 
     | 
    
         
             
                  end
         
     | 
| 
      
 15 
     | 
    
         
            +
             
     | 
| 
      
 16 
     | 
    
         
            +
                  private
         
     | 
| 
      
 17 
     | 
    
         
            +
             
     | 
| 
      
 18 
     | 
    
         
            +
                  def attestation_type
         
     | 
| 
      
 19 
     | 
    
         
            +
                    WebAuthn::AttestationStatement::ATTESTATION_TYPE_NONE
         
     | 
| 
      
 20 
     | 
    
         
            +
                  end
         
     | 
| 
       15 
21 
     | 
    
         
             
                end
         
     | 
| 
       16 
22 
     | 
    
         
             
              end
         
     | 
| 
       17 
23 
     | 
    
         
             
            end
         
     | 
| 
         @@ -46,7 +46,7 @@ module WebAuthn 
     | 
|
| 
       46 
46 
     | 
    
         | 
| 
       47 
47 
     | 
    
         
             
                      attestation_certificate.version == 2 &&
         
     | 
| 
       48 
48 
     | 
    
         
             
                        subject.assoc('OU')&.at(1) == "Authenticator Attestation" &&
         
     | 
| 
       49 
     | 
    
         
            -
                        attestation_certificate. 
     | 
| 
      
 49 
     | 
    
         
            +
                        attestation_certificate.find_extension('basicConstraints')&.value == 'CA:FALSE'
         
     | 
| 
       50 
50 
     | 
    
         
             
                    else
         
     | 
| 
       51 
51 
     | 
    
         
             
                      true
         
     | 
| 
       52 
52 
     | 
    
         
             
                    end
         
     | 
| 
         @@ -42,7 +42,7 @@ module WebAuthn 
     | 
|
| 
       42 
42 
     | 
    
         
             
                        OpenSSL::Digest.digest(cose_algorithm.hash_function, certified_extra_data),
         
     | 
| 
       43 
43 
     | 
    
         
             
                        signature_algorithm: tpm_algorithm[:signature],
         
     | 
| 
       44 
44 
     | 
    
         
             
                        hash_algorithm: tpm_algorithm[:hash],
         
     | 
| 
       45 
     | 
    
         
            -
                         
     | 
| 
      
 45 
     | 
    
         
            +
                        trusted_certificates: root_certificates(aaguid: aaguid)
         
     | 
| 
       46 
46 
     | 
    
         
             
                      )
         
     | 
| 
       47 
47 
     | 
    
         | 
| 
       48 
48 
     | 
    
         
             
                    key_attestation.valid? && key_attestation.key && key_attestation.key.to_pem == key.to_pem
         
     | 
| 
         @@ -54,7 +54,7 @@ module WebAuthn 
     | 
|
| 
       54 
54 
     | 
    
         
             
                  end
         
     | 
| 
       55 
55 
     | 
    
         | 
| 
       56 
56 
     | 
    
         
             
                  def default_root_certificates
         
     | 
| 
       57 
     | 
    
         
            -
                    ::TPM::KeyAttestation:: 
     | 
| 
      
 57 
     | 
    
         
            +
                    ::TPM::KeyAttestation::TRUSTED_CERTIFICATES
         
     | 
| 
       58 
58 
     | 
    
         
             
                  end
         
     | 
| 
       59 
59 
     | 
    
         | 
| 
       60 
60 
     | 
    
         
             
                  def tpm_algorithm
         
     | 
| 
         @@ -2,6 +2,7 @@ 
     | 
|
| 
       2 
2 
     | 
    
         | 
| 
       3 
3 
     | 
    
         
             
            require "webauthn/attestation_statement/android_key"
         
     | 
| 
       4 
4 
     | 
    
         
             
            require "webauthn/attestation_statement/android_safetynet"
         
     | 
| 
      
 5 
     | 
    
         
            +
            require "webauthn/attestation_statement/apple"
         
     | 
| 
       5 
6 
     | 
    
         
             
            require "webauthn/attestation_statement/fido_u2f"
         
     | 
| 
       6 
7 
     | 
    
         
             
            require "webauthn/attestation_statement/none"
         
     | 
| 
       7 
8 
     | 
    
         
             
            require "webauthn/attestation_statement/packed"
         
     | 
| 
         @@ -18,6 +19,7 @@ module WebAuthn 
     | 
|
| 
       18 
19 
     | 
    
         
             
                ATTESTATION_FORMAT_ANDROID_SAFETYNET = "android-safetynet"
         
     | 
| 
       19 
20 
     | 
    
         
             
                ATTESTATION_FORMAT_ANDROID_KEY = "android-key"
         
     | 
| 
       20 
21 
     | 
    
         
             
                ATTESTATION_FORMAT_TPM = "tpm"
         
     | 
| 
      
 22 
     | 
    
         
            +
                ATTESTATION_FORMAT_APPLE = "apple"
         
     | 
| 
       21 
23 
     | 
    
         | 
| 
       22 
24 
     | 
    
         
             
                FORMAT_TO_CLASS = {
         
     | 
| 
       23 
25 
     | 
    
         
             
                  ATTESTATION_FORMAT_NONE => WebAuthn::AttestationStatement::None,
         
     | 
| 
         @@ -25,7 +27,8 @@ module WebAuthn 
     | 
|
| 
       25 
27 
     | 
    
         
             
                  ATTESTATION_FORMAT_PACKED => WebAuthn::AttestationStatement::Packed,
         
     | 
| 
       26 
28 
     | 
    
         
             
                  ATTESTATION_FORMAT_ANDROID_SAFETYNET => WebAuthn::AttestationStatement::AndroidSafetynet,
         
     | 
| 
       27 
29 
     | 
    
         
             
                  ATTESTATION_FORMAT_ANDROID_KEY => WebAuthn::AttestationStatement::AndroidKey,
         
     | 
| 
       28 
     | 
    
         
            -
                  ATTESTATION_FORMAT_TPM => WebAuthn::AttestationStatement::TPM
         
     | 
| 
      
 30 
     | 
    
         
            +
                  ATTESTATION_FORMAT_TPM => WebAuthn::AttestationStatement::TPM,
         
     | 
| 
      
 31 
     | 
    
         
            +
                  ATTESTATION_FORMAT_APPLE => WebAuthn::AttestationStatement::Apple
         
     | 
| 
       29 
32 
     | 
    
         
             
                }.freeze
         
     | 
| 
       30 
33 
     | 
    
         | 
| 
       31 
34 
     | 
    
         
             
                def self.from(format, statement, relying_party: WebAuthn.configuration.relying_party)
         
     | 
| 
         @@ -22,9 +22,8 @@ module WebAuthn 
     | 
|
| 
       22 
22 
     | 
    
         
             
                  count_bytes_remaining :trailing_bytes_length
         
     | 
| 
       23 
23 
     | 
    
         
             
                  string :trailing_bytes, length: :trailing_bytes_length
         
     | 
| 
       24 
24 
     | 
    
         | 
| 
       25 
     | 
    
         
            -
                  # TODO: use keyword_init when we dropped Ruby 2.4 support
         
     | 
| 
       26 
25 
     | 
    
         
             
                  Credential =
         
     | 
| 
       27 
     | 
    
         
            -
                    Struct.new(:id, :public_key, :algorithm) do
         
     | 
| 
      
 26 
     | 
    
         
            +
                    Struct.new(:id, :public_key, :algorithm, keyword_init: true) do
         
     | 
| 
       28 
27 
     | 
    
         
             
                      def public_key_object
         
     | 
| 
       29 
28 
     | 
    
         
             
                        COSE::Key.deserialize(public_key).to_pkey
         
     | 
| 
       30 
29 
     | 
    
         
             
                      end
         
     | 
| 
         @@ -47,7 +46,7 @@ module WebAuthn 
     | 
|
| 
       47 
46 
     | 
    
         
             
                  def credential
         
     | 
| 
       48 
47 
     | 
    
         
             
                    @credential ||=
         
     | 
| 
       49 
48 
     | 
    
         
             
                      if valid?
         
     | 
| 
       50 
     | 
    
         
            -
                        Credential.new(id, public_key, algorithm)
         
     | 
| 
      
 49 
     | 
    
         
            +
                        Credential.new(id: id, public_key: public_key, algorithm: algorithm)
         
     | 
| 
       51 
50 
     | 
    
         
             
                      end
         
     | 
| 
       52 
51 
     | 
    
         
             
                  end
         
     | 
| 
       53 
52 
     | 
    
         | 
| 
         @@ -3,7 +3,6 @@ 
     | 
|
| 
       3 
3 
     | 
    
         
             
            require "webauthn/authenticator_data"
         
     | 
| 
       4 
4 
     | 
    
         
             
            require "webauthn/client_data"
         
     | 
| 
       5 
5 
     | 
    
         
             
            require "webauthn/error"
         
     | 
| 
       6 
     | 
    
         
            -
            require "webauthn/security_utils"
         
     | 
| 
       7 
6 
     | 
    
         | 
| 
       8 
7 
     | 
    
         
             
            module WebAuthn
         
     | 
| 
       9 
8 
     | 
    
         
             
              TYPES = { create: "webauthn.create", get: "webauthn.get" }.freeze
         
     | 
| 
         @@ -80,7 +79,7 @@ module WebAuthn 
     | 
|
| 
       80 
79 
     | 
    
         
             
                end
         
     | 
| 
       81 
80 
     | 
    
         | 
| 
       82 
81 
     | 
    
         
             
                def valid_challenge?(expected_challenge)
         
     | 
| 
       83 
     | 
    
         
            -
                   
     | 
| 
      
 82 
     | 
    
         
            +
                  OpenSSL.secure_compare(client_data.challenge, expected_challenge)
         
     | 
| 
       84 
83 
     | 
    
         
             
                end
         
     | 
| 
       85 
84 
     | 
    
         | 
| 
       86 
85 
     | 
    
         
             
                def valid_origin?(expected_origin)
         
     | 
| 
         @@ -16,6 +16,8 @@ module WebAuthn 
     | 
|
| 
       16 
16 
     | 
    
         
             
                attr_accessor :allow_credentials, :extensions, :user_verification
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                def initialize(allow_credentials: [], extensions: nil, user_verification: nil)
         
     | 
| 
      
 19 
     | 
    
         
            +
                  super()
         
     | 
| 
      
 20 
     | 
    
         
            +
             
     | 
| 
       19 
21 
     | 
    
         
             
                  @allow_credentials = allow_credentials
         
     | 
| 
       20 
22 
     | 
    
         
             
                  @extensions = extensions
         
     | 
| 
       21 
23 
     | 
    
         
             
                  @user_verification = user_verification
         
     | 
| 
         @@ -15,7 +15,7 @@ module WebAuthn 
     | 
|
| 
       15 
15 
     | 
    
         
             
                    rp_id_hash:,
         
     | 
| 
       16 
16 
     | 
    
         
             
                    credential: {
         
     | 
| 
       17 
17 
     | 
    
         
             
                      id: SecureRandom.random_bytes(16),
         
     | 
| 
       18 
     | 
    
         
            -
                      public_key: OpenSSL::PKey::EC. 
     | 
| 
      
 18 
     | 
    
         
            +
                      public_key: OpenSSL::PKey::EC.generate("prime256v1").public_key
         
     | 
| 
       19 
19 
     | 
    
         
             
                    },
         
     | 
| 
       20 
20 
     | 
    
         
             
                    sign_count: 0,
         
     | 
| 
       21 
21 
     | 
    
         
             
                    user_present: true,
         
     | 
| 
         @@ -50,12 +50,20 @@ module WebAuthn 
     | 
|
| 
       50 
50 
     | 
    
         
             
                  user_verified: false,
         
     | 
| 
       51 
51 
     | 
    
         
             
                  aaguid: AuthenticatorData::AAGUID,
         
     | 
| 
       52 
52 
     | 
    
         
             
                  sign_count: nil,
         
     | 
| 
       53 
     | 
    
         
            -
                  extensions: nil
         
     | 
| 
      
 53 
     | 
    
         
            +
                  extensions: nil,
         
     | 
| 
      
 54 
     | 
    
         
            +
                  allow_credentials: nil
         
     | 
| 
       54 
55 
     | 
    
         
             
                )
         
     | 
| 
       55 
56 
     | 
    
         
             
                  credential_options = credentials[rp_id]
         
     | 
| 
       56 
57 
     | 
    
         | 
| 
       57 
58 
     | 
    
         
             
                  if credential_options
         
     | 
| 
       58 
     | 
    
         
            -
                     
     | 
| 
      
 59 
     | 
    
         
            +
                    allow_credentials ||= credential_options.keys
         
     | 
| 
      
 60 
     | 
    
         
            +
                    credential_id = (credential_options.keys & allow_credentials).first
         
     | 
| 
      
 61 
     | 
    
         
            +
                    unless credential_id
         
     | 
| 
      
 62 
     | 
    
         
            +
                      raise "No matching credentials (allowed=#{allow_credentials}) " \
         
     | 
| 
      
 63 
     | 
    
         
            +
                            "found for RP #{rp_id} among credentials=#{credential_options}"
         
     | 
| 
      
 64 
     | 
    
         
            +
                    end
         
     | 
| 
      
 65 
     | 
    
         
            +
             
     | 
| 
      
 66 
     | 
    
         
            +
                    credential = credential_options[credential_id]
         
     | 
| 
       59 
67 
     | 
    
         
             
                    credential_key = credential[:credential_key]
         
     | 
| 
       60 
68 
     | 
    
         
             
                    credential_sign_count = credential[:sign_count]
         
     | 
| 
       61 
69 
     | 
    
         | 
| 
         @@ -87,7 +95,7 @@ module WebAuthn 
     | 
|
| 
       87 
95 
     | 
    
         
             
                attr_reader :credentials
         
     | 
| 
       88 
96 
     | 
    
         | 
| 
       89 
97 
     | 
    
         
             
                def new_credential
         
     | 
| 
       90 
     | 
    
         
            -
                  [SecureRandom.random_bytes(16), OpenSSL::PKey::EC. 
     | 
| 
      
 98 
     | 
    
         
            +
                  [SecureRandom.random_bytes(16), OpenSSL::PKey::EC.generate("prime256v1"), 0]
         
     | 
| 
       91 
99 
     | 
    
         
             
                end
         
     | 
| 
       92 
100 
     | 
    
         | 
| 
       93 
101 
     | 
    
         
             
                def hashed(target)
         
     | 
    
        data/lib/webauthn/fake_client.rb
    CHANGED
    
    | 
         @@ -73,19 +73,26 @@ module WebAuthn 
     | 
|
| 
       73 
73 
     | 
    
         
             
                        user_present: true,
         
     | 
| 
       74 
74 
     | 
    
         
             
                        user_verified: false,
         
     | 
| 
       75 
75 
     | 
    
         
             
                        sign_count: nil,
         
     | 
| 
       76 
     | 
    
         
            -
                        extensions: nil 
     | 
| 
      
 76 
     | 
    
         
            +
                        extensions: nil,
         
     | 
| 
      
 77 
     | 
    
         
            +
                        user_handle: nil,
         
     | 
| 
      
 78 
     | 
    
         
            +
                        allow_credentials: nil)
         
     | 
| 
       77 
79 
     | 
    
         
             
                  rp_id ||= URI.parse(origin).host
         
     | 
| 
       78 
80 
     | 
    
         | 
| 
       79 
81 
     | 
    
         
             
                  client_data_json = data_json_for(:get, encoder.decode(challenge))
         
     | 
| 
       80 
82 
     | 
    
         
             
                  client_data_hash = hashed(client_data_json)
         
     | 
| 
       81 
83 
     | 
    
         | 
| 
      
 84 
     | 
    
         
            +
                  if allow_credentials
         
     | 
| 
      
 85 
     | 
    
         
            +
                    allow_credentials = allow_credentials.map { |credential| encoder.decode(credential) }
         
     | 
| 
      
 86 
     | 
    
         
            +
                  end
         
     | 
| 
      
 87 
     | 
    
         
            +
             
     | 
| 
       82 
88 
     | 
    
         
             
                  assertion = authenticator.get_assertion(
         
     | 
| 
       83 
89 
     | 
    
         
             
                    rp_id: rp_id,
         
     | 
| 
       84 
90 
     | 
    
         
             
                    client_data_hash: client_data_hash,
         
     | 
| 
       85 
91 
     | 
    
         
             
                    user_present: user_present,
         
     | 
| 
       86 
92 
     | 
    
         
             
                    user_verified: user_verified,
         
     | 
| 
       87 
93 
     | 
    
         
             
                    sign_count: sign_count,
         
     | 
| 
       88 
     | 
    
         
            -
                    extensions: extensions
         
     | 
| 
      
 94 
     | 
    
         
            +
                    extensions: extensions,
         
     | 
| 
      
 95 
     | 
    
         
            +
                    allow_credentials: allow_credentials
         
     | 
| 
       89 
96 
     | 
    
         
             
                  )
         
     | 
| 
       90 
97 
     | 
    
         | 
| 
       91 
98 
     | 
    
         
             
                  {
         
     | 
| 
         @@ -97,7 +104,7 @@ module WebAuthn 
     | 
|
| 
       97 
104 
     | 
    
         
             
                      "clientDataJSON" => encoder.encode(client_data_json),
         
     | 
| 
       98 
105 
     | 
    
         
             
                      "authenticatorData" => encoder.encode(assertion[:authenticator_data]),
         
     | 
| 
       99 
106 
     | 
    
         
             
                      "signature" => encoder.encode(assertion[:signature]),
         
     | 
| 
       100 
     | 
    
         
            -
                      "userHandle" => nil
         
     | 
| 
      
 107 
     | 
    
         
            +
                      "userHandle" => user_handle ? encoder.encode(user_handle) : nil
         
     | 
| 
       101 
108 
     | 
    
         
             
                    }
         
     | 
| 
       102 
109 
     | 
    
         
             
                  }
         
     | 
| 
       103 
110 
     | 
    
         
             
                end
         
     | 
| 
         @@ -5,11 +5,10 @@ require "awrence" 
     | 
|
| 
       5 
5 
     | 
    
         
             
            module WebAuthn
         
     | 
| 
       6 
6 
     | 
    
         
             
              class PublicKeyCredential
         
     | 
| 
       7 
7 
     | 
    
         
             
                class Entity
         
     | 
| 
       8 
     | 
    
         
            -
                  attr_reader :name 
     | 
| 
      
 8 
     | 
    
         
            +
                  attr_reader :name
         
     | 
| 
       9 
9 
     | 
    
         | 
| 
       10 
     | 
    
         
            -
                  def initialize(name 
     | 
| 
      
 10 
     | 
    
         
            +
                  def initialize(name:)
         
     | 
| 
       11 
11 
     | 
    
         
             
                    @name = name
         
     | 
| 
       12 
     | 
    
         
            -
                    @icon = icon
         
     | 
| 
       13 
12 
     | 
    
         
             
                  end
         
     | 
| 
       14 
13 
     | 
    
         | 
| 
       15 
14 
     | 
    
         
             
                  def as_json
         
     | 
| 
         @@ -37,7 +36,7 @@ module WebAuthn 
     | 
|
| 
       37 
36 
     | 
    
         
             
                  end
         
     | 
| 
       38 
37 
     | 
    
         | 
| 
       39 
38 
     | 
    
         
             
                  def attributes
         
     | 
| 
       40 
     | 
    
         
            -
                    [:name 
     | 
| 
      
 39 
     | 
    
         
            +
                    [:name]
         
     | 
| 
       41 
40 
     | 
    
         
             
                  end
         
     | 
| 
       42 
41 
     | 
    
         
             
                end
         
     | 
| 
       43 
42 
     | 
    
         
             
              end
         
     | 
| 
         @@ -13,7 +13,7 @@ module WebAuthn 
     | 
|
| 
       13 
13 
     | 
    
         
             
                  OpenSSL::PKey::RSA.instance_methods.include?(:verify_pss) ? algorithm : nil
         
     | 
| 
       14 
14 
     | 
    
         
             
                end
         
     | 
| 
       15 
15 
     | 
    
         | 
| 
       16 
     | 
    
         
            -
                DEFAULT_ALGORITHMS = ["ES256",  
     | 
| 
      
 16 
     | 
    
         
            +
                DEFAULT_ALGORITHMS = ["ES256", "PS256", "RS256"].compact.freeze
         
     | 
| 
       17 
17 
     | 
    
         | 
| 
       18 
18 
     | 
    
         
             
                def initialize(
         
     | 
| 
       19 
19 
     | 
    
         
             
                  algorithms: DEFAULT_ALGORITHMS.dup,
         
     | 
| 
         @@ -24,7 +24,7 @@ module WebAuthn 
     | 
|
| 
       24 
24 
     | 
    
         
             
                  verify_attestation_statement: true,
         
     | 
| 
       25 
25 
     | 
    
         
             
                  credential_options_timeout: 120000,
         
     | 
| 
       26 
26 
     | 
    
         
             
                  silent_authentication: false,
         
     | 
| 
       27 
     | 
    
         
            -
                  acceptable_attestation_types: ['None', 'Self', 'Basic', 'AttCA', 'Basic_or_AttCA'],
         
     | 
| 
      
 27 
     | 
    
         
            +
                  acceptable_attestation_types: ['None', 'Self', 'Basic', 'AttCA', 'Basic_or_AttCA', 'AnonCA'],
         
     | 
| 
       28 
28 
     | 
    
         
             
                  attestation_root_certificates_finders: []
         
     | 
| 
       29 
29 
     | 
    
         
             
                )
         
     | 
| 
       30 
30 
     | 
    
         
             
                  @algorithms = algorithms
         
     | 
| 
         @@ -31,7 +31,10 @@ module WebAuthn 
     | 
|
| 
       31 
31 
     | 
    
         
             
                  @credential ||=
         
     | 
| 
       32 
32 
     | 
    
         
             
                    begin
         
     | 
| 
       33 
33 
     | 
    
         
             
                      hash = authenticator_data.send(:credential)
         
     | 
| 
       34 
     | 
    
         
            -
                      WebAuthn::AuthenticatorData::AttestedCredentialData::Credential.new( 
     | 
| 
      
 34 
     | 
    
         
            +
                      WebAuthn::AuthenticatorData::AttestedCredentialData::Credential.new(
         
     | 
| 
      
 35 
     | 
    
         
            +
                        id: hash[:id],
         
     | 
| 
      
 36 
     | 
    
         
            +
                        public_key: hash[:public_key].serialize
         
     | 
| 
      
 37 
     | 
    
         
            +
                      )
         
     | 
| 
       35 
38 
     | 
    
         
             
                    end
         
     | 
| 
       36 
39 
     | 
    
         
             
                end
         
     | 
| 
       37 
40 
     | 
    
         | 
    
        data/lib/webauthn/version.rb
    CHANGED
    
    
    
        data/webauthn.gemspec
    CHANGED
    
    | 
         @@ -31,23 +31,22 @@ Gem::Specification.new do |spec| 
     | 
|
| 
       31 
31 
     | 
    
         
             
              spec.executables   = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
         
     | 
| 
       32 
32 
     | 
    
         
             
              spec.require_paths = ["lib"]
         
     | 
| 
       33 
33 
     | 
    
         | 
| 
       34 
     | 
    
         
            -
              spec.required_ruby_version = ">= 2. 
     | 
| 
      
 34 
     | 
    
         
            +
              spec.required_ruby_version = ">= 2.5"
         
     | 
| 
       35 
35 
     | 
    
         | 
| 
       36 
36 
     | 
    
         
             
              spec.add_dependency "android_key_attestation", "~> 0.3.0"
         
     | 
| 
       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", "~> 1. 
     | 
| 
       41 
     | 
    
         
            -
              spec.add_dependency "openssl", " 
     | 
| 
      
 40 
     | 
    
         
            +
              spec.add_dependency "cose", "~> 1.1"
         
     | 
| 
      
 41 
     | 
    
         
            +
              spec.add_dependency "openssl", ">= 2.2", "< 3.1"
         
     | 
| 
       42 
42 
     | 
    
         
             
              spec.add_dependency "safety_net_attestation", "~> 0.4.0"
         
     | 
| 
       43 
     | 
    
         
            -
              spec.add_dependency " 
     | 
| 
       44 
     | 
    
         
            -
              spec.add_dependency "tpm-key_attestation", "~> 0.9.0"
         
     | 
| 
      
 43 
     | 
    
         
            +
              spec.add_dependency "tpm-key_attestation", "~> 0.11.0"
         
     | 
| 
       45 
44 
     | 
    
         | 
| 
       46 
     | 
    
         
            -
              spec.add_development_dependency "appraisal", "~> 2.3.0"
         
     | 
| 
       47 
45 
     | 
    
         
             
              spec.add_development_dependency "bundler", ">= 1.17", "< 3.0"
         
     | 
| 
       48 
46 
     | 
    
         
             
              spec.add_development_dependency "byebug", "~> 11.0"
         
     | 
| 
       49 
47 
     | 
    
         
             
              spec.add_development_dependency "rake", "~> 13.0"
         
     | 
| 
       50 
48 
     | 
    
         
             
              spec.add_development_dependency "rspec", "~> 3.8"
         
     | 
| 
       51 
     | 
    
         
            -
              spec.add_development_dependency "rubocop", " 
     | 
| 
       52 
     | 
    
         
            -
              spec.add_development_dependency "rubocop- 
     | 
| 
      
 49 
     | 
    
         
            +
              spec.add_development_dependency "rubocop", "~> 1.9.1"
         
     | 
| 
      
 50 
     | 
    
         
            +
              spec.add_development_dependency "rubocop-rake", "~> 0.5.1"
         
     | 
| 
      
 51 
     | 
    
         
            +
              spec.add_development_dependency "rubocop-rspec", "~> 2.2.0"
         
     | 
| 
       53 
52 
     | 
    
         
             
            end
         
     | 
    
        metadata
    CHANGED
    
    | 
         @@ -1,15 +1,15 @@ 
     | 
|
| 
       1 
1 
     | 
    
         
             
            --- !ruby/object:Gem::Specification
         
     | 
| 
       2 
2 
     | 
    
         
             
            name: webauthn
         
     | 
| 
       3 
3 
     | 
    
         
             
            version: !ruby/object:Gem::Version
         
     | 
| 
       4 
     | 
    
         
            -
              version: 3.0.0. 
     | 
| 
      
 4 
     | 
    
         
            +
              version: 3.0.0.alpha2
         
     | 
| 
       5 
5 
     | 
    
         
             
            platform: ruby
         
     | 
| 
       6 
6 
     | 
    
         
             
            authors:
         
     | 
| 
       7 
7 
     | 
    
         
             
            - Gonzalo Rodriguez
         
     | 
| 
       8 
8 
     | 
    
         
             
            - Braulio Martinez
         
     | 
| 
       9 
     | 
    
         
            -
            autorequire: 
     | 
| 
      
 9 
     | 
    
         
            +
            autorequire:
         
     | 
| 
       10 
10 
     | 
    
         
             
            bindir: exe
         
     | 
| 
       11 
11 
     | 
    
         
             
            cert_chain: []
         
     | 
| 
       12 
     | 
    
         
            -
            date:  
     | 
| 
      
 12 
     | 
    
         
            +
            date: 2022-09-15 00:00:00.000000000 Z
         
     | 
| 
       13 
13 
     | 
    
         
             
            dependencies:
         
     | 
| 
       14 
14 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       15 
15 
     | 
    
         
             
              name: android_key_attestation
         
     | 
| 
         @@ -73,28 +73,34 @@ dependencies: 
     | 
|
| 
       73 
73 
     | 
    
         
             
                requirements:
         
     | 
| 
       74 
74 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       75 
75 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       76 
     | 
    
         
            -
                    version: '1. 
     | 
| 
      
 76 
     | 
    
         
            +
                    version: '1.1'
         
     | 
| 
       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: '1. 
     | 
| 
      
 83 
     | 
    
         
            +
                    version: '1.1'
         
     | 
| 
       84 
84 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       85 
85 
     | 
    
         
             
              name: openssl
         
     | 
| 
       86 
86 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       87 
87 
     | 
    
         
             
                requirements:
         
     | 
| 
       88 
     | 
    
         
            -
                - - " 
     | 
| 
      
 88 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 89 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 90 
     | 
    
         
            +
                    version: '2.2'
         
     | 
| 
      
 91 
     | 
    
         
            +
                - - "<"
         
     | 
| 
       89 
92 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       90 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 93 
     | 
    
         
            +
                    version: '3.1'
         
     | 
| 
       91 
94 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       92 
95 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       93 
96 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       94 
97 
     | 
    
         
             
                requirements:
         
     | 
| 
       95 
     | 
    
         
            -
                - - " 
     | 
| 
      
 98 
     | 
    
         
            +
                - - ">="
         
     | 
| 
      
 99 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 100 
     | 
    
         
            +
                    version: '2.2'
         
     | 
| 
      
 101 
     | 
    
         
            +
                - - "<"
         
     | 
| 
       96 
102 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       97 
     | 
    
         
            -
                    version: ' 
     | 
| 
      
 103 
     | 
    
         
            +
                    version: '3.1'
         
     | 
| 
       98 
104 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       99 
105 
     | 
    
         
             
              name: safety_net_attestation
         
     | 
| 
       100 
106 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -109,48 +115,20 @@ dependencies: 
     | 
|
| 
       109 
115 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       110 
116 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       111 
117 
     | 
    
         
             
                    version: 0.4.0
         
     | 
| 
       112 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency
         
     | 
| 
       113 
     | 
    
         
            -
              name: securecompare
         
     | 
| 
       114 
     | 
    
         
            -
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       115 
     | 
    
         
            -
                requirements:
         
     | 
| 
       116 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       117 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       118 
     | 
    
         
            -
                    version: '1.0'
         
     | 
| 
       119 
     | 
    
         
            -
              type: :runtime
         
     | 
| 
       120 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       121 
     | 
    
         
            -
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       122 
     | 
    
         
            -
                requirements:
         
     | 
| 
       123 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       124 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       125 
     | 
    
         
            -
                    version: '1.0'
         
     | 
| 
       126 
118 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       127 
119 
     | 
    
         
             
              name: tpm-key_attestation
         
     | 
| 
       128 
120 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       129 
121 
     | 
    
         
             
                requirements:
         
     | 
| 
       130 
122 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       131 
123 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       132 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 124 
     | 
    
         
            +
                    version: 0.11.0
         
     | 
| 
       133 
125 
     | 
    
         
             
              type: :runtime
         
     | 
| 
       134 
126 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       135 
127 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       136 
128 
     | 
    
         
             
                requirements:
         
     | 
| 
       137 
129 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       138 
130 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       139 
     | 
    
         
            -
                    version: 0. 
     | 
| 
       140 
     | 
    
         
            -
            - !ruby/object:Gem::Dependency
         
     | 
| 
       141 
     | 
    
         
            -
              name: appraisal
         
     | 
| 
       142 
     | 
    
         
            -
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       143 
     | 
    
         
            -
                requirements:
         
     | 
| 
       144 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       145 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       146 
     | 
    
         
            -
                    version: 2.3.0
         
     | 
| 
       147 
     | 
    
         
            -
              type: :development
         
     | 
| 
       148 
     | 
    
         
            -
              prerelease: false
         
     | 
| 
       149 
     | 
    
         
            -
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       150 
     | 
    
         
            -
                requirements:
         
     | 
| 
       151 
     | 
    
         
            -
                - - "~>"
         
     | 
| 
       152 
     | 
    
         
            -
                  - !ruby/object:Gem::Version
         
     | 
| 
       153 
     | 
    
         
            -
                    version: 2.3.0
         
     | 
| 
      
 131 
     | 
    
         
            +
                    version: 0.11.0
         
     | 
| 
       154 
132 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       155 
133 
     | 
    
         
             
              name: bundler
         
     | 
| 
       156 
134 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
         @@ -217,30 +195,44 @@ dependencies: 
     | 
|
| 
       217 
195 
     | 
    
         
             
              name: rubocop
         
     | 
| 
       218 
196 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       219 
197 
     | 
    
         
             
                requirements:
         
     | 
| 
       220 
     | 
    
         
            -
                - -  
     | 
| 
      
 198 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 199 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 200 
     | 
    
         
            +
                    version: 1.9.1
         
     | 
| 
      
 201 
     | 
    
         
            +
              type: :development
         
     | 
| 
      
 202 
     | 
    
         
            +
              prerelease: false
         
     | 
| 
      
 203 
     | 
    
         
            +
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
      
 204 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 205 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
      
 206 
     | 
    
         
            +
                  - !ruby/object:Gem::Version
         
     | 
| 
      
 207 
     | 
    
         
            +
                    version: 1.9.1
         
     | 
| 
      
 208 
     | 
    
         
            +
            - !ruby/object:Gem::Dependency
         
     | 
| 
      
 209 
     | 
    
         
            +
              name: rubocop-rake
         
     | 
| 
      
 210 
     | 
    
         
            +
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
      
 211 
     | 
    
         
            +
                requirements:
         
     | 
| 
      
 212 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       221 
213 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       222 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 214 
     | 
    
         
            +
                    version: 0.5.1
         
     | 
| 
       223 
215 
     | 
    
         
             
              type: :development
         
     | 
| 
       224 
216 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       225 
217 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       226 
218 
     | 
    
         
             
                requirements:
         
     | 
| 
       227 
     | 
    
         
            -
                - -  
     | 
| 
      
 219 
     | 
    
         
            +
                - - "~>"
         
     | 
| 
       228 
220 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       229 
     | 
    
         
            -
                    version: 0. 
     | 
| 
      
 221 
     | 
    
         
            +
                    version: 0.5.1
         
     | 
| 
       230 
222 
     | 
    
         
             
            - !ruby/object:Gem::Dependency
         
     | 
| 
       231 
223 
     | 
    
         
             
              name: rubocop-rspec
         
     | 
| 
       232 
224 
     | 
    
         
             
              requirement: !ruby/object:Gem::Requirement
         
     | 
| 
       233 
225 
     | 
    
         
             
                requirements:
         
     | 
| 
       234 
226 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       235 
227 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       236 
     | 
    
         
            -
                    version:  
     | 
| 
      
 228 
     | 
    
         
            +
                    version: 2.2.0
         
     | 
| 
       237 
229 
     | 
    
         
             
              type: :development
         
     | 
| 
       238 
230 
     | 
    
         
             
              prerelease: false
         
     | 
| 
       239 
231 
     | 
    
         
             
              version_requirements: !ruby/object:Gem::Requirement
         
     | 
| 
       240 
232 
     | 
    
         
             
                requirements:
         
     | 
| 
       241 
233 
     | 
    
         
             
                - - "~>"
         
     | 
| 
       242 
234 
     | 
    
         
             
                  - !ruby/object:Gem::Version
         
     | 
| 
       243 
     | 
    
         
            -
                    version:  
     | 
| 
      
 235 
     | 
    
         
            +
                    version: 2.2.0
         
     | 
| 
       244 
236 
     | 
    
         
             
            description: |-
         
     | 
| 
       245 
237 
     | 
    
         
             
              WebAuthn ruby server library ― Make your application a W3C Web Authentication conformant
         
     | 
| 
       246 
238 
     | 
    
         
             
                  Relying Party and allow your users to authenticate with U2F and FIDO2 authenticators.
         
     | 
| 
         @@ -251,11 +243,11 @@ executables: [] 
     | 
|
| 
       251 
243 
     | 
    
         
             
            extensions: []
         
     | 
| 
       252 
244 
     | 
    
         
             
            extra_rdoc_files: []
         
     | 
| 
       253 
245 
     | 
    
         
             
            files:
         
     | 
| 
      
 246 
     | 
    
         
            +
            - ".github/workflows/build.yml"
         
     | 
| 
      
 247 
     | 
    
         
            +
            - ".github/workflows/git.yml"
         
     | 
| 
       254 
248 
     | 
    
         
             
            - ".gitignore"
         
     | 
| 
       255 
249 
     | 
    
         
             
            - ".rspec"
         
     | 
| 
       256 
250 
     | 
    
         
             
            - ".rubocop.yml"
         
     | 
| 
       257 
     | 
    
         
            -
            - ".travis.yml"
         
     | 
| 
       258 
     | 
    
         
            -
            - Appraisals
         
     | 
| 
       259 
251 
     | 
    
         
             
            - CHANGELOG.md
         
     | 
| 
       260 
252 
     | 
    
         
             
            - CONTRIBUTING.md
         
     | 
| 
       261 
253 
     | 
    
         
             
            - Gemfile
         
     | 
| 
         @@ -265,18 +257,15 @@ files: 
     | 
|
| 
       265 
257 
     | 
    
         
             
            - SECURITY.md
         
     | 
| 
       266 
258 
     | 
    
         
             
            - bin/console
         
     | 
| 
       267 
259 
     | 
    
         
             
            - bin/setup
         
     | 
| 
      
 260 
     | 
    
         
            +
            - docs/advanced_configuration.md
         
     | 
| 
       268 
261 
     | 
    
         
             
            - docs/u2f_migration.md
         
     | 
| 
       269 
     | 
    
         
            -
            - gemfiles/cose_head.gemfile
         
     | 
| 
       270 
     | 
    
         
            -
            - gemfiles/openssl_2_0.gemfile
         
     | 
| 
       271 
     | 
    
         
            -
            - gemfiles/openssl_2_1.gemfile
         
     | 
| 
       272 
     | 
    
         
            -
            - gemfiles/openssl_2_2.gemfile
         
     | 
| 
       273 
     | 
    
         
            -
            - gemfiles/openssl_head.gemfile
         
     | 
| 
       274 
262 
     | 
    
         
             
            - lib/cose/rsapkcs1_algorithm.rb
         
     | 
| 
       275 
263 
     | 
    
         
             
            - lib/webauthn.rb
         
     | 
| 
       276 
264 
     | 
    
         
             
            - lib/webauthn/attestation_object.rb
         
     | 
| 
       277 
265 
     | 
    
         
             
            - lib/webauthn/attestation_statement.rb
         
     | 
| 
       278 
266 
     | 
    
         
             
            - lib/webauthn/attestation_statement/android_key.rb
         
     | 
| 
       279 
267 
     | 
    
         
             
            - lib/webauthn/attestation_statement/android_safetynet.rb
         
     | 
| 
      
 268 
     | 
    
         
            +
            - lib/webauthn/attestation_statement/apple.rb
         
     | 
| 
       280 
269 
     | 
    
         
             
            - lib/webauthn/attestation_statement/base.rb
         
     | 
| 
       281 
270 
     | 
    
         
             
            - lib/webauthn/attestation_statement/fido_u2f.rb
         
     | 
| 
       282 
271 
     | 
    
         
             
            - lib/webauthn/attestation_statement/fido_u2f/public_key.rb
         
     | 
| 
         @@ -314,11 +303,8 @@ files: 
     | 
|
| 
       314 
303 
     | 
    
         
             
            - lib/webauthn/public_key_credential_with_assertion.rb
         
     | 
| 
       315 
304 
     | 
    
         
             
            - lib/webauthn/public_key_credential_with_attestation.rb
         
     | 
| 
       316 
305 
     | 
    
         
             
            - lib/webauthn/relying_party.rb
         
     | 
| 
       317 
     | 
    
         
            -
            - lib/webauthn/security_utils.rb
         
     | 
| 
       318 
306 
     | 
    
         
             
            - lib/webauthn/u2f_migrator.rb
         
     | 
| 
       319 
307 
     | 
    
         
             
            - lib/webauthn/version.rb
         
     | 
| 
       320 
     | 
    
         
            -
            - script/ci/install-openssl
         
     | 
| 
       321 
     | 
    
         
            -
            - script/ci/install-ruby
         
     | 
| 
       322 
308 
     | 
    
         
             
            - webauthn.gemspec
         
     | 
| 
       323 
309 
     | 
    
         
             
            homepage: https://github.com/cedarcode/webauthn-ruby
         
     | 
| 
       324 
310 
     | 
    
         
             
            licenses:
         
     | 
| 
         @@ -327,7 +313,7 @@ metadata: 
     | 
|
| 
       327 
313 
     | 
    
         
             
              bug_tracker_uri: https://github.com/cedarcode/webauthn-ruby/issues
         
     | 
| 
       328 
314 
     | 
    
         
             
              changelog_uri: https://github.com/cedarcode/webauthn-ruby/blob/master/CHANGELOG.md
         
     | 
| 
       329 
315 
     | 
    
         
             
              source_code_uri: https://github.com/cedarcode/webauthn-ruby
         
     | 
| 
       330 
     | 
    
         
            -
            post_install_message: 
     | 
| 
      
 316 
     | 
    
         
            +
            post_install_message:
         
     | 
| 
       331 
317 
     | 
    
         
             
            rdoc_options: []
         
     | 
| 
       332 
318 
     | 
    
         
             
            require_paths:
         
     | 
| 
       333 
319 
     | 
    
         
             
            - lib
         
     | 
| 
         @@ -335,15 +321,15 @@ required_ruby_version: !ruby/object:Gem::Requirement 
     | 
|
| 
       335 
321 
     | 
    
         
             
              requirements:
         
     | 
| 
       336 
322 
     | 
    
         
             
              - - ">="
         
     | 
| 
       337 
323 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       338 
     | 
    
         
            -
                  version: '2. 
     | 
| 
      
 324 
     | 
    
         
            +
                  version: '2.5'
         
     | 
| 
       339 
325 
     | 
    
         
             
            required_rubygems_version: !ruby/object:Gem::Requirement
         
     | 
| 
       340 
326 
     | 
    
         
             
              requirements:
         
     | 
| 
       341 
327 
     | 
    
         
             
              - - ">"
         
     | 
| 
       342 
328 
     | 
    
         
             
                - !ruby/object:Gem::Version
         
     | 
| 
       343 
329 
     | 
    
         
             
                  version: 1.3.1
         
     | 
| 
       344 
330 
     | 
    
         
             
            requirements: []
         
     | 
| 
       345 
     | 
    
         
            -
            rubygems_version: 3. 
     | 
| 
       346 
     | 
    
         
            -
            signing_key: 
     | 
| 
      
 331 
     | 
    
         
            +
            rubygems_version: 3.2.32
         
     | 
| 
      
 332 
     | 
    
         
            +
            signing_key:
         
     | 
| 
       347 
333 
     | 
    
         
             
            specification_version: 4
         
     | 
| 
       348 
334 
     | 
    
         
             
            summary: WebAuthn ruby server library
         
     | 
| 
       349 
335 
     | 
    
         
             
            test_files: []
         
     | 
    
        data/.travis.yml
    DELETED
    
    | 
         @@ -1,39 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            dist: bionic
         
     | 
| 
       2 
     | 
    
         
            -
            language: ruby
         
     | 
| 
       3 
     | 
    
         
            -
             
     | 
| 
       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
         
     | 
| 
       20 
     | 
    
         
            -
             
     | 
| 
       21 
     | 
    
         
            -
            gemfile:
         
     | 
| 
       22 
     | 
    
         
            -
              - gemfiles/cose_head.gemfile
         
     | 
| 
       23 
     | 
    
         
            -
              - gemfiles/openssl_head.gemfile
         
     | 
| 
       24 
     | 
    
         
            -
              - gemfiles/openssl_2_2.gemfile
         
     | 
| 
       25 
     | 
    
         
            -
              - gemfiles/openssl_2_1.gemfile
         
     | 
| 
       26 
     | 
    
         
            -
              - gemfiles/openssl_2_0.gemfile
         
     | 
| 
       27 
     | 
    
         
            -
             
     | 
| 
       28 
     | 
    
         
            -
            matrix:
         
     | 
| 
       29 
     | 
    
         
            -
              fast_finish: true
         
     | 
| 
       30 
     | 
    
         
            -
              allow_failures:
         
     | 
| 
       31 
     | 
    
         
            -
                - env: LIBSSL=1.1 RB=ruby-head
         
     | 
| 
       32 
     | 
    
         
            -
                - env: LIBSSL=1.0 RB=ruby-head
         
     | 
| 
       33 
     | 
    
         
            -
                - gemfile: gemfiles/cose_head.gemfile
         
     | 
| 
       34 
     | 
    
         
            -
                - gemfile: gemfiles/openssl_head.gemfile
         
     | 
| 
       35 
     | 
    
         
            -
             
     | 
| 
       36 
     | 
    
         
            -
            before_install:
         
     | 
| 
       37 
     | 
    
         
            -
              - ./script/ci/install-openssl
         
     | 
| 
       38 
     | 
    
         
            -
              - ./script/ci/install-ruby
         
     | 
| 
       39 
     | 
    
         
            -
              - gem install bundler -v "~> 2.0"
         
     | 
    
        data/Appraisals
    DELETED
    
    | 
         @@ -1,21 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            appraise "cose_head" do
         
     | 
| 
       4 
     | 
    
         
            -
              gem "cose", git: "https://github.com/cedarcode/cose-ruby"
         
     | 
| 
       5 
     | 
    
         
            -
            end
         
     | 
| 
       6 
     | 
    
         
            -
             
     | 
| 
       7 
     | 
    
         
            -
            appraise "openssl_head" do
         
     | 
| 
       8 
     | 
    
         
            -
              gem "openssl", git: "https://github.com/ruby/openssl"
         
     | 
| 
       9 
     | 
    
         
            -
            end
         
     | 
| 
       10 
     | 
    
         
            -
             
     | 
| 
       11 
     | 
    
         
            -
            appraise "openssl_2_2" do
         
     | 
| 
       12 
     | 
    
         
            -
              gem "openssl", "~> 2.2.0"
         
     | 
| 
       13 
     | 
    
         
            -
            end
         
     | 
| 
       14 
     | 
    
         
            -
             
     | 
| 
       15 
     | 
    
         
            -
            appraise "openssl_2_1" do
         
     | 
| 
       16 
     | 
    
         
            -
              gem "openssl", "~> 2.1.0"
         
     | 
| 
       17 
     | 
    
         
            -
            end
         
     | 
| 
       18 
     | 
    
         
            -
             
     | 
| 
       19 
     | 
    
         
            -
            appraise "openssl_2_0" do
         
     | 
| 
       20 
     | 
    
         
            -
              gem "openssl", "~> 2.0.0"
         
     | 
| 
       21 
     | 
    
         
            -
            end
         
     | 
    
        data/gemfiles/cose_head.gemfile
    DELETED
    
    
| 
         @@ -1,20 +0,0 @@ 
     | 
|
| 
       1 
     | 
    
         
            -
            # frozen_string_literal: true
         
     | 
| 
       2 
     | 
    
         
            -
             
     | 
| 
       3 
     | 
    
         
            -
            require "securecompare"
         
     | 
| 
       4 
     | 
    
         
            -
             
     | 
| 
       5 
     | 
    
         
            -
            module WebAuthn
         
     | 
| 
       6 
     | 
    
         
            -
              module SecurityUtils
         
     | 
| 
       7 
     | 
    
         
            -
                # Constant time string comparison, for variable length strings.
         
     | 
| 
       8 
     | 
    
         
            -
                # This code was adapted from Rails ActiveSupport::SecurityUtils
         
     | 
| 
       9 
     | 
    
         
            -
                #
         
     | 
| 
       10 
     | 
    
         
            -
                # The values are first processed by SHA256, so that we don't leak length info
         
     | 
| 
       11 
     | 
    
         
            -
                # via timing attacks.
         
     | 
| 
       12 
     | 
    
         
            -
                def secure_compare(first_string, second_string)
         
     | 
| 
       13 
     | 
    
         
            -
                  first_string_sha256 = ::Digest::SHA256.digest(first_string)
         
     | 
| 
       14 
     | 
    
         
            -
                  second_string_sha256 = ::Digest::SHA256.digest(second_string)
         
     | 
| 
       15 
     | 
    
         
            -
             
     | 
| 
       16 
     | 
    
         
            -
                  SecureCompare.compare(first_string_sha256, second_string_sha256) && first_string == second_string
         
     | 
| 
       17 
     | 
    
         
            -
                end
         
     | 
| 
       18 
     | 
    
         
            -
                module_function :secure_compare
         
     | 
| 
       19 
     | 
    
         
            -
              end
         
     | 
| 
       20 
     | 
    
         
            -
            end
         
     |