Bug 240134

Summary: Error occurs on second call of button onClick callback when crypto.subtle.digest() is called before navigator.credentials.get() using security key
Product: WebKit Reporter: tommy <tommy>
Component: WebKit Misc.Assignee: Nobody <webkit-unassigned>
Status: RESOLVED CONFIGURATION CHANGED    
Severity: Major CC: ap, bfulgham, cdumez, pascoe, webkit-bug-importer
Priority: P2 Keywords: InRadar
Version: Safari 15   
Hardware: iPhone / iPad   
OS: iOS 15   
See Also: https://bugs.webkit.org/show_bug.cgi?id=241126

Description tommy 2022-05-05 12:35:22 PDT
When window.crypto.subtle.digest() is called before window.navigator.credentials.get(), the first time will not error but calling it a second time will.

The code below shows how to reproduce.


const getBtn = document.getElementById("get");
getBtn.addEventListener("click", async () => {
  try {
    /*
      remove the call to crypto.suble.digest and it will work without error
    */
    const digest = await window.crypto.subtle.digest(
      "SHA-512",
      CHALLENGE_BUFFER,
    )
    let credential = (await window.navigator.credentials.get({
      publicKey: {
        challenge: CHALLENGE_BUFFER,
        timeout: 30000,
        userVerification: "discouraged",
        allowCredentials: [
          {
            transports: ["nfc", "usb"],
            id: credentialId,
            type: "public-key",
          },
        ],
      },
    }))
    console.log({credential})
  } catch (e) {
    alert(`error ${e.message}`)
  }
})
Comment 1 Radar WebKit Bug Importer 2022-05-05 15:06:44 PDT
<rdar://problem/92822521>
Comment 2 Brent Fulgham 2022-06-23 16:52:11 PDT
Does not reproduce on Trunk.