WPT
wpt / WebCryptoAPI / generateKey / failures_ML-DSA.tentative.https.any.worker.html
Spec: Web Cryptography ↗
Runs: Chrome 155.0.8043.0 (wpt@d6328700c, 2026-09-05) | Firefox 157.0a1 (wpt@9b965429d, 2026-09-05) | Safari 251 preview (wpt@c29bd2aee, 2026-09-05) | Ladybird 1.0-4912a (wpt@9b965429d, 2026-09-05) | Servo Servo 0.6 (wpt@2c385f65e, 2026-09-04) | Blitz a50cb8971 (wpt@a95401e4e, 2026-09-03)
View on the Blitz WPT dashboard | Open test on wpt.live | wpt.fyi
| Chrome | Firefox | Safari | Ladybird | Servo | Blitz | |
|---|---|---|---|---|---|---|
| Total | 0/252 | 96/252 | 0/252 | 252/252 | 252/252 | NOT RUN |
| Subtest | Chrome | Firefox | Safari | Ladybird | Servo | Blitz |
|---|---|---|---|---|---|---|
| Bad usages: generateKey(ML-DSA-44, true, [encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [verify, sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, verify, sign, sign, verify, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [verify, sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, verify, sign, sign, verify, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [verify, sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, verify, sign, sign, verify, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [verify, sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, verify, sign, sign, verify, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [verify, sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, verify, sign, sign, verify, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [verify, sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, verify, sign, sign, verify, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [verify, sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, verify, sign, sign, verify, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [verify, sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, verify, sign, sign, verify, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [verify, sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, verify, sign, sign, verify, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [verify, sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-44, true, [sign, verify, sign, sign, verify, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [verify, sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, verify, sign, sign, verify, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [verify, sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, verify, sign, sign, verify, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [verify, sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, verify, sign, sign, verify, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [verify, sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, verify, sign, sign, verify, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [verify, sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, verify, sign, sign, verify, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [verify, sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, verify, sign, sign, verify, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [verify, sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, verify, sign, sign, verify, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [verify, sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, verify, sign, sign, verify, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [verify, sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, verify, sign, sign, verify, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [verify, sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-44}, true, [sign, verify, sign, sign, verify, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [verify, sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, verify, sign, sign, verify, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [verify, sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, verify, sign, sign, verify, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [verify, sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, verify, sign, sign, verify, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [verify, sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, verify, sign, sign, verify, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [verify, sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, verify, sign, sign, verify, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [verify, sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, verify, sign, sign, verify, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [verify, sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, verify, sign, sign, verify, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [verify, sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, verify, sign, sign, verify, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [verify, sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, verify, sign, sign, verify, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [verify, sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-65, true, [sign, verify, sign, sign, verify, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [verify, sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, verify, sign, sign, verify, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [verify, sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, verify, sign, sign, verify, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [verify, sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, verify, sign, sign, verify, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [verify, sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, verify, sign, sign, verify, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [verify, sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, verify, sign, sign, verify, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [verify, sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, verify, sign, sign, verify, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [verify, sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, verify, sign, sign, verify, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [verify, sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, verify, sign, sign, verify, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [verify, sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, verify, sign, sign, verify, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [verify, sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-65}, true, [sign, verify, sign, sign, verify, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [verify, sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, verify, sign, sign, verify, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [verify, sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, verify, sign, sign, verify, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [verify, sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, verify, sign, sign, verify, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [verify, sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, verify, sign, sign, verify, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [verify, sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, verify, sign, sign, verify, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [verify, sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, verify, sign, sign, verify, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [verify, sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, verify, sign, sign, verify, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [verify, sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, verify, sign, sign, verify, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [verify, sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, verify, sign, sign, verify, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [verify, sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey(ML-DSA-87, true, [sign, verify, sign, sign, verify, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [verify, sign, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, verify, sign, sign, verify, encrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [verify, sign, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, verify, sign, sign, verify, decrypt]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [verify, sign, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, verify, sign, sign, verify, wrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [verify, sign, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, verify, sign, sign, verify, unwrapKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [verify, sign, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, verify, sign, sign, verify, deriveKey]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [verify, sign, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, verify, sign, sign, verify, deriveBits]) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [verify, sign, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, verify, sign, sign, verify, encapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [verify, sign, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, verify, sign, sign, verify, encapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [verify, sign, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, verify, sign, sign, verify, decapsulateKey]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [verify, sign, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Bad usages: generateKey({name: ML-DSA-87}, true, [sign, verify, sign, sign, verify, decapsulateBits]) | FAIL | PASS | FAIL | PASS | PASS | — |
| Empty usages: generateKey(ML-DSA-44, false, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey(ML-DSA-44, true, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey({name: ML-DSA-44}, false, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey({name: ML-DSA-44}, true, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey(ML-DSA-65, false, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey(ML-DSA-65, true, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey({name: ML-DSA-65}, false, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey({name: ML-DSA-65}, true, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey(ML-DSA-87, false, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey(ML-DSA-87, true, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey({name: ML-DSA-87}, false, []) | FAIL | FAIL | FAIL | PASS | PASS | — |
| Empty usages: generateKey({name: ML-DSA-87}, true, []) | FAIL | FAIL | FAIL | PASS | PASS | — |