소스 검색

Tests: Import WPT tests for X448 curves

Andreas Kling 8 달 전
부모
커밋
a7652d5073
17개의 변경된 파일1182개의 추가작업 그리고 0개의 파일을 삭제
  1. 29 0
      Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits_curve448.https.any.txt
  2. 403 0
      Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/generateKey/failures_X448.https.any.txt
  3. 26 0
      Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/generateKey/successes_X448.https.any.txt
  4. 64 0
      Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/import_export/okp_importKey_X448.https.any.txt
  5. 235 0
      Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.txt
  6. 260 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.js
  7. 16 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits_curve448.https.any.html
  8. 10 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits_curve448.https.any.js
  9. 40 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits_fixtures.js
  10. 17 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/generateKey/failures_X448.https.any.html
  11. 5 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/generateKey/failures_X448.https.any.js
  12. 18 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/generateKey/successes_X448.https.any.html
  13. 6 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/generateKey/successes_X448.https.any.js
  14. 18 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/import_export/okp_importKey_X448.https.any.html
  15. 9 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/import_export/okp_importKey_X448.https.any.js
  16. 18 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.html
  17. 8 0
      Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js

+ 29 - 0
Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits_curve448.https.any.txt

@@ -0,0 +1,29 @@
+Summary
+
+Harness status: Error
+
+Rerun
+
+Found 18 tests
+
+1 Pass
+17 Fail
+Details
+Result	Test Name	MessagePass	setup - define tests	
+Fail	X448 key derivation checks for all-zero value result with a key of order 0	
+Fail	X448 key derivation checks for all-zero value result with a key of order 1	
+Fail	X448 key derivation checks for all-zero value result with a key of order p-1 (order 2)	
+Fail	X448 key derivation checks for all-zero value result with a key of order p (=0, order 4)	
+Fail	X448 key derivation checks for all-zero value result with a key of order p+1 (=1, order 1)	
+Fail	X448 good parameters	
+Fail	X448 mixed case parameters	
+Fail	X448 short result	
+Fail	X448 non-multiple of 8 bits	
+Fail	X448 missing public property	
+Fail	X448 public property of algorithm is not a CryptoKey	
+Fail	X448 mismatched algorithms	
+Fail	X448 no deriveBits usage for base key	
+Fail	X448 base key is not a private key	
+Fail	X448 public property value is a private key	
+Fail	X448 public property value is a secret key	
+Fail	X448 asking for too many bits	

+ 403 - 0
Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/generateKey/failures_X448.https.any.txt

@@ -0,0 +1,403 @@
+Summary
+
+Harness status: OK
+
+Rerun
+
+Found 392 tests
+
+332 Pass
+60 Fail
+Details
+Result	Test Name	MessagePass	Bad algorithm: generateKey(AES, false, [decrypt])	
+Pass	Bad algorithm: generateKey(AES, true, [decrypt])	
+Pass	Bad algorithm: generateKey(AES, RED, [decrypt])	
+Pass	Bad algorithm: generateKey(AES, 7, [decrypt])	
+Pass	Bad algorithm: generateKey(AES, false, [sign, decrypt])	
+Pass	Bad algorithm: generateKey(AES, true, [sign, decrypt])	
+Pass	Bad algorithm: generateKey(AES, RED, [sign, decrypt])	
+Pass	Bad algorithm: generateKey(AES, 7, [sign, decrypt])	
+Pass	Bad algorithm: generateKey(AES, false, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey(AES, true, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey(AES, RED, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey(AES, 7, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey(AES, false, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey(AES, true, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey(AES, RED, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey(AES, 7, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey(AES, false, [sign])	
+Pass	Bad algorithm: generateKey(AES, true, [sign])	
+Pass	Bad algorithm: generateKey(AES, RED, [sign])	
+Pass	Bad algorithm: generateKey(AES, 7, [sign])	
+Pass	Bad algorithm: generateKey(AES, false, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey(AES, true, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey(AES, RED, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey(AES, 7, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey(AES, false, [deriveBits])	
+Pass	Bad algorithm: generateKey(AES, true, [deriveBits])	
+Pass	Bad algorithm: generateKey(AES, RED, [deriveBits])	
+Pass	Bad algorithm: generateKey(AES, 7, [deriveBits])	
+Pass	Bad algorithm: generateKey(AES, false, [])	
+Pass	Bad algorithm: generateKey(AES, true, [])	
+Pass	Bad algorithm: generateKey(AES, RED, [])	
+Pass	Bad algorithm: generateKey(AES, 7, [])	
+Pass	Bad algorithm: generateKey(AES, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey(AES, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey(AES, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey(AES, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({name: AES}, false, [decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, true, [decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, RED, [decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, 7, [decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, false, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, true, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, RED, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, 7, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, false, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, true, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, RED, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, 7, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({name: AES}, false, [sign])	
+Pass	Bad algorithm: generateKey({name: AES}, true, [sign])	
+Pass	Bad algorithm: generateKey({name: AES}, RED, [sign])	
+Pass	Bad algorithm: generateKey({name: AES}, 7, [sign])	
+Pass	Bad algorithm: generateKey({name: AES}, false, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({name: AES}, true, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({name: AES}, RED, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({name: AES}, 7, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({name: AES}, false, [deriveBits])	
+Pass	Bad algorithm: generateKey({name: AES}, true, [deriveBits])	
+Pass	Bad algorithm: generateKey({name: AES}, RED, [deriveBits])	
+Pass	Bad algorithm: generateKey({name: AES}, 7, [deriveBits])	
+Pass	Bad algorithm: generateKey({name: AES}, false, [])	
+Pass	Bad algorithm: generateKey({name: AES}, true, [])	
+Pass	Bad algorithm: generateKey({name: AES}, RED, [])	
+Pass	Bad algorithm: generateKey({name: AES}, 7, [])	
+Pass	Bad algorithm: generateKey({name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, false, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, true, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, false, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, true, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, RED, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, 7, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, false, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, true, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, RED, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, 7, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, false, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, true, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, RED, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, 7, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({length: 128, name: AES-CFB}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, decrypt])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [sign])	
+Pass	Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [sign])	
+Pass	Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [sign])	
+Pass	Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [sign])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits, sign])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits, sign])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits, sign])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits, sign])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [deriveBits])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [deriveBits])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [deriveBits])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [deriveBits])	
+Pass	Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [])	
+Pass	Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [])	
+Pass	Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [])	
+Pass	Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Fail	Bad algorithm: generateKey({hash: MD5, name: HMAC}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA-256, modulusLength: 2048, name: RSA, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [sign])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [sign])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [sign])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [sign])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({hash: SHA, modulusLength: 2048, name: RSA-PSS, publicExponent: {0: 1, 1: 0, 2: 1}}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, decrypt])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [sign])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [sign])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [sign])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [sign])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits, sign])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [deriveBits])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [deriveBits])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [deriveBits])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [deriveBits])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Bad algorithm: generateKey({name: EC, namedCurve: P521}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Empty algorithm: generateKey({}, false, [decrypt])	
+Pass	Empty algorithm: generateKey({}, true, [decrypt])	
+Pass	Empty algorithm: generateKey({}, RED, [decrypt])	
+Pass	Empty algorithm: generateKey({}, 7, [decrypt])	
+Pass	Empty algorithm: generateKey({}, false, [sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, true, [sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, RED, [sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, 7, [sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, false, [deriveBits, sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, true, [deriveBits, sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, RED, [deriveBits, sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, 7, [deriveBits, sign, decrypt])	
+Pass	Empty algorithm: generateKey({}, false, [deriveBits, decrypt])	
+Pass	Empty algorithm: generateKey({}, true, [deriveBits, decrypt])	
+Pass	Empty algorithm: generateKey({}, RED, [deriveBits, decrypt])	
+Pass	Empty algorithm: generateKey({}, 7, [deriveBits, decrypt])	
+Pass	Empty algorithm: generateKey({}, false, [sign])	
+Pass	Empty algorithm: generateKey({}, true, [sign])	
+Pass	Empty algorithm: generateKey({}, RED, [sign])	
+Pass	Empty algorithm: generateKey({}, 7, [sign])	
+Pass	Empty algorithm: generateKey({}, false, [deriveBits, sign])	
+Pass	Empty algorithm: generateKey({}, true, [deriveBits, sign])	
+Pass	Empty algorithm: generateKey({}, RED, [deriveBits, sign])	
+Pass	Empty algorithm: generateKey({}, 7, [deriveBits, sign])	
+Pass	Empty algorithm: generateKey({}, false, [deriveBits])	
+Pass	Empty algorithm: generateKey({}, true, [deriveBits])	
+Pass	Empty algorithm: generateKey({}, RED, [deriveBits])	
+Pass	Empty algorithm: generateKey({}, 7, [deriveBits])	
+Pass	Empty algorithm: generateKey({}, false, [])	
+Pass	Empty algorithm: generateKey({}, true, [])	
+Pass	Empty algorithm: generateKey({}, RED, [])	
+Pass	Empty algorithm: generateKey({}, 7, [])	
+Pass	Empty algorithm: generateKey({}, false, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Empty algorithm: generateKey({}, true, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Empty algorithm: generateKey({}, RED, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Pass	Empty algorithm: generateKey({}, 7, [decrypt, sign, deriveBits, decrypt, sign, deriveBits])	
+Fail	Bad usages: generateKey({name: X448}, true, [encrypt])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, encrypt])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, deriveKey, encrypt])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, encrypt])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, encrypt])	
+Fail	Bad usages: generateKey({name: X448}, true, [decrypt])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, decrypt])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, deriveKey, decrypt])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, decrypt])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, decrypt])	
+Fail	Bad usages: generateKey({name: X448}, true, [sign])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, sign])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, deriveKey, sign])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, sign])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, sign])	
+Fail	Bad usages: generateKey({name: X448}, true, [verify])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, verify])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, deriveKey, verify])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, verify])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, verify])	
+Fail	Bad usages: generateKey({name: X448}, true, [wrapKey])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, wrapKey])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, deriveKey, wrapKey])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, wrapKey])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, wrapKey])	
+Fail	Bad usages: generateKey({name: X448}, true, [unwrapKey])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, unwrapKey])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, deriveKey, unwrapKey])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveBits, unwrapKey])	
+Fail	Bad usages: generateKey({name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey])	
+Fail	Empty usages: generateKey({name: X448}, false, [])	
+Fail	Empty usages: generateKey({name: X448}, true, [])	

+ 26 - 0
Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/generateKey/successes_X448.https.any.txt

@@ -0,0 +1,26 @@
+Summary
+
+Harness status: OK
+
+Rerun
+
+Found 16 tests
+
+16 Fail
+Details
+Result	Test Name	MessageFail	Success: generateKey({name: X448}, false, [deriveKey])	
+Fail	Success: generateKey({name: X448}, true, [deriveKey])	
+Fail	Success: generateKey({name: X448}, false, [deriveBits, deriveKey])	
+Fail	Success: generateKey({name: X448}, true, [deriveBits, deriveKey])	
+Fail	Success: generateKey({name: X448}, false, [deriveBits])	
+Fail	Success: generateKey({name: X448}, true, [deriveBits])	
+Fail	Success: generateKey({name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Success: generateKey({name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Success: generateKey({name: x448}, false, [deriveKey])	
+Fail	Success: generateKey({name: x448}, true, [deriveKey])	
+Fail	Success: generateKey({name: x448}, false, [deriveBits, deriveKey])	
+Fail	Success: generateKey({name: x448}, true, [deriveBits, deriveKey])	
+Fail	Success: generateKey({name: x448}, false, [deriveBits])	
+Fail	Success: generateKey({name: x448}, true, [deriveBits])	
+Fail	Success: generateKey({name: x448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Success: generateKey({name: x448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, deriveKey, deriveBits])	

+ 64 - 0
Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/import_export/okp_importKey_X448.https.any.txt

@@ -0,0 +1,64 @@
+Summary
+
+Harness status: OK
+
+Rerun
+
+Found 54 tests
+
+54 Fail
+Details
+Result	Test Name	MessageFail	Good parameters: X448 bits (spki, buffer(68), {name: X448}, true, [])	
+Fail	Good parameters: X448 bits (spki, buffer(68), X448, true, [])	
+Fail	Good parameters: X448 bits (jwk, object(kty, crv, x), {name: X448}, true, [])	
+Fail	Good parameters: X448 bits (jwk, object(kty, crv, x), X448, true, [])	
+Fail	Good parameters with ignored JWK alg: X448 (jwk, object(kty, crv, x), {name: X448}, true, [])	
+Fail	Good parameters with ignored JWK alg: X448 (jwk, object(kty, crv, x), X448, true, [])	
+Fail	Good parameters: X448 bits (raw, buffer(56), {name: X448}, true, [])	
+Fail	Good parameters: X448 bits (raw, buffer(56), X448, true, [])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), {name: X448}, true, [deriveKey])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), X448, true, [deriveKey])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), X448, true, [deriveKey])	
+Fail	Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey])	
+Fail	Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), X448, true, [deriveKey])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), {name: X448}, true, [deriveBits, deriveKey])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), X448, true, [deriveBits, deriveKey])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits, deriveKey])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), X448, true, [deriveBits, deriveKey])	
+Fail	Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits, deriveKey])	
+Fail	Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), X448, true, [deriveBits, deriveKey])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), {name: X448}, true, [deriveBits])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), X448, true, [deriveBits])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), X448, true, [deriveBits])	
+Fail	Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveBits])	
+Fail	Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), X448, true, [deriveBits])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), X448, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), X448, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Good parameters with ignored JWK alg: X448 (jwk, object(crv, d, x, kty), X448, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Good parameters: X448 bits (spki, buffer(68), {name: X448}, false, [])	
+Fail	Good parameters: X448 bits (spki, buffer(68), X448, false, [])	
+Fail	Good parameters: X448 bits (jwk, object(kty, crv, x), {name: X448}, false, [])	
+Fail	Good parameters: X448 bits (jwk, object(kty, crv, x), X448, false, [])	
+Fail	Good parameters: X448 bits (raw, buffer(56), {name: X448}, false, [])	
+Fail	Good parameters: X448 bits (raw, buffer(56), X448, false, [])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), {name: X448}, false, [deriveKey])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), X448, false, [deriveKey])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, false, [deriveKey])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), X448, false, [deriveKey])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), {name: X448}, false, [deriveBits, deriveKey])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), X448, false, [deriveBits, deriveKey])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, false, [deriveBits, deriveKey])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), X448, false, [deriveBits, deriveKey])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), {name: X448}, false, [deriveBits])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), X448, false, [deriveBits])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, false, [deriveBits])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), X448, false, [deriveBits])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Good parameters: X448 bits (pkcs8, buffer(72), X448, false, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Good parameters: X448 bits (jwk, object(crv, d, x, kty), X448, false, [deriveKey, deriveBits, deriveKey, deriveBits])	

+ 235 - 0
Tests/LibWeb/Text/expected/wpt-import/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.txt

@@ -0,0 +1,235 @@
+Summary
+
+Harness status: OK
+
+Rerun
+
+Found 224 tests
+
+8 Pass
+216 Fail
+Details
+Result	Test Name	MessageFail	Bad usages: importKey(spki, {name: X448}, true, [encrypt])	
+Fail	Bad usages: importKey(spki, {name: X448}, false, [encrypt])	
+Fail	Bad usages: importKey(spki, {name: X448}, true, [decrypt])	
+Fail	Bad usages: importKey(spki, {name: X448}, false, [decrypt])	
+Fail	Bad usages: importKey(spki, {name: X448}, true, [sign])	
+Fail	Bad usages: importKey(spki, {name: X448}, false, [sign])	
+Fail	Bad usages: importKey(spki, {name: X448}, true, [verify])	
+Fail	Bad usages: importKey(spki, {name: X448}, false, [verify])	
+Fail	Bad usages: importKey(spki, {name: X448}, true, [wrapKey])	
+Fail	Bad usages: importKey(spki, {name: X448}, false, [wrapKey])	
+Fail	Bad usages: importKey(spki, {name: X448}, true, [unwrapKey])	
+Fail	Bad usages: importKey(spki, {name: X448}, false, [unwrapKey])	
+Fail	Bad usages: importKey(spki, {name: X448}, true, [deriveKey])	
+Fail	Bad usages: importKey(spki, {name: X448}, false, [deriveKey])	
+Fail	Bad usages: importKey(spki, {name: X448}, true, [deriveBits])	
+Fail	Bad usages: importKey(spki, {name: X448}, false, [deriveBits])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [encrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [encrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, encrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, encrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, encrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, encrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, encrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, encrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [decrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [decrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, decrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, decrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, decrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, decrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, decrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, decrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [sign])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [sign])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, sign])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, sign])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, sign])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, sign])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, sign])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, sign])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [verify])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [verify])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, verify])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, verify])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, verify])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, verify])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, verify])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, verify])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [wrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [wrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, wrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, wrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, wrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, wrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, wrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, wrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [unwrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [unwrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, unwrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, unwrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey, unwrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey, unwrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveBits, unwrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveBits, unwrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey])	
+Fail	Bad usages: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey])	
+Fail	Bad usages: importKey(raw, {name: X448}, true, [encrypt])	
+Fail	Bad usages: importKey(raw, {name: X448}, false, [encrypt])	
+Fail	Bad usages: importKey(raw, {name: X448}, true, [decrypt])	
+Fail	Bad usages: importKey(raw, {name: X448}, false, [decrypt])	
+Fail	Bad usages: importKey(raw, {name: X448}, true, [sign])	
+Fail	Bad usages: importKey(raw, {name: X448}, false, [sign])	
+Fail	Bad usages: importKey(raw, {name: X448}, true, [verify])	
+Fail	Bad usages: importKey(raw, {name: X448}, false, [verify])	
+Fail	Bad usages: importKey(raw, {name: X448}, true, [wrapKey])	
+Fail	Bad usages: importKey(raw, {name: X448}, false, [wrapKey])	
+Fail	Bad usages: importKey(raw, {name: X448}, true, [unwrapKey])	
+Fail	Bad usages: importKey(raw, {name: X448}, false, [unwrapKey])	
+Fail	Bad usages: importKey(raw, {name: X448}, true, [deriveKey])	
+Fail	Bad usages: importKey(raw, {name: X448}, false, [deriveKey])	
+Fail	Bad usages: importKey(raw, {name: X448}, true, [deriveBits])	
+Fail	Bad usages: importKey(raw, {name: X448}, false, [deriveBits])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [encrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [encrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, encrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, encrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, encrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, encrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, encrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, encrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, encrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [decrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [decrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, decrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, decrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, decrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, decrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, decrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, decrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, decrypt])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [sign])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [sign])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, sign])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, sign])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, sign])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, sign])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, sign])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, sign])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, sign])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, sign])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [verify])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [verify])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, verify])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, verify])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, verify])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, verify])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, verify])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, verify])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, verify])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, verify])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [wrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [wrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, wrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, wrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, wrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, wrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, wrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, wrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, wrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [unwrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [unwrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, unwrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, unwrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey, unwrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey, unwrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveBits, unwrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveBits, unwrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey])	
+Fail	Bad usages: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits, unwrapKey])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, true, [encrypt])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, false, [encrypt])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, true, [decrypt])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, false, [decrypt])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, true, [sign])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, false, [sign])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, true, [verify])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, false, [verify])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, true, [wrapKey])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, false, [wrapKey])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, true, [unwrapKey])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, false, [unwrapKey])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, true, [deriveKey])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, false, [deriveKey])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, true, [deriveBits])	
+Fail	Bad usages: importKey(jwk (public) , {name: X448}, false, [deriveBits])	
+Fail	Empty usages: importKey(pkcs8, {name: X448}, true, [])	
+Fail	Empty usages: importKey(pkcs8, {name: X448}, false, [])	
+Fail	Empty usages: importKey(jwk(private), {name: X448}, true, [])	
+Fail	Empty usages: importKey(jwk(private), {name: X448}, false, [])	
+Fail	Bad key length: importKey(spki, {name: X448}, true, [])	
+Fail	Bad key length: importKey(spki, {name: X448}, false, [])	
+Fail	Bad key length: importKey(pkcs8, {name: X448}, true, [deriveKey])	
+Fail	Bad key length: importKey(pkcs8, {name: X448}, false, [deriveKey])	
+Fail	Bad key length: importKey(pkcs8, {name: X448}, true, [deriveBits, deriveKey])	
+Fail	Bad key length: importKey(pkcs8, {name: X448}, false, [deriveBits, deriveKey])	
+Fail	Bad key length: importKey(pkcs8, {name: X448}, true, [deriveBits])	
+Fail	Bad key length: importKey(pkcs8, {name: X448}, false, [deriveBits])	
+Fail	Bad key length: importKey(pkcs8, {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Bad key length: importKey(pkcs8, {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Bad key length: importKey(raw, {name: X448}, true, [])	
+Fail	Bad key length: importKey(raw, {name: X448}, false, [])	
+Fail	Bad key length: importKey(jwk(private), {name: X448}, true, [deriveKey])	
+Fail	Bad key length: importKey(jwk(private), {name: X448}, false, [deriveKey])	
+Fail	Bad key length: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey])	
+Fail	Bad key length: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey])	
+Fail	Bad key length: importKey(jwk(private), {name: X448}, true, [deriveBits])	
+Fail	Bad key length: importKey(jwk(private), {name: X448}, false, [deriveBits])	
+Fail	Bad key length: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Bad key length: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Bad key length: importKey(jwk (public) , {name: X448}, true, [])	
+Fail	Bad key length: importKey(jwk (public) , {name: X448}, false, [])	
+Fail	Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey])	
+Fail	Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey])	
+Fail	Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey])	
+Fail	Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey])	
+Fail	Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits])	
+Fail	Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits])	
+Fail	Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Missing JWK 'x' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey])	
+Fail	Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey])	
+Fail	Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey])	
+Fail	Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits, deriveKey])	
+Fail	Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveBits])	
+Fail	Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveBits])	
+Fail	Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Missing JWK 'kty' parameter: importKey(jwk(private), {name: X448}, false, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Fail	Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X448}, true, [])	
+Fail	Missing JWK 'crv' parameter: importKey(jwk (public) , {name: X448}, false, [])	
+Fail	Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveKey])	
+Fail	Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveBits, deriveKey])	
+Fail	Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveBits])	
+Fail	Invalid key pair: importKey(jwk(private), {name: X448}, true, [deriveKey, deriveBits, deriveKey, deriveBits])	
+Pass	Missing algorithm name: importKey(pkcs8, {}, true, deriveKey)	
+Pass	Missing algorithm name: importKey(pkcs8, {}, false, deriveKey)	
+Pass	Missing algorithm name: importKey(pkcs8, {}, true, deriveBits)	
+Pass	Missing algorithm name: importKey(pkcs8, {}, false, deriveBits)	
+Pass	Missing algorithm name: importKey(jwk(private), {}, true, deriveKey)	
+Pass	Missing algorithm name: importKey(jwk(private), {}, false, deriveKey)	
+Pass	Missing algorithm name: importKey(jwk(private), {}, true, deriveBits)	
+Pass	Missing algorithm name: importKey(jwk(private), {}, false, deriveBits)	

+ 260 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits.js

@@ -0,0 +1,260 @@
+function define_tests_25519() {
+    return define_tests("X25519");
+}
+
+function define_tests_448() {
+    return define_tests("X448");
+}
+
+function define_tests(algorithmName) {
+  // May want to test prefixed implementations.
+  var subtle = self.crypto.subtle;
+
+  // Verify the derive functions perform checks against the all-zero value results,
+  // ensuring small-order points are rejected.
+  // https://www.rfc-editor.org/rfc/rfc7748#section-6.1
+  {
+      kSmallOrderPoint[algorithmName].forEach(function(test) {
+          promise_test(async() => {
+              let derived;
+              let privateKey;
+              let publicKey;
+              try {
+                  privateKey = await subtle.importKey("pkcs8", pkcs8[algorithmName],
+                                                  {name: algorithmName},
+                                                  false, ["deriveBits", "deriveKey"]);
+                  publicKey = await subtle.importKey("spki", test.vector,
+                                                 {name: algorithmName},
+                                                 false, [])
+                  derived = await subtle.deriveBits({name: algorithmName, public: publicKey}, privateKey, 8 * sizes[algorithmName]);
+              } catch (err) {
+                  assert_true(privateKey !== undefined, "Private key should be valid.");
+                  assert_true(publicKey !== undefined, "Public key should be valid.");
+                  assert_equals(err.name, "OperationError", "Should throw correct error, not " + err.name + ": " + err.message + ".");
+              }
+              assert_equals(derived, undefined, "Operation succeeded, but should not have.");
+          }, algorithmName + " key derivation checks for all-zero value result with a key of order " + test.order);
+      });
+  }
+
+  return importKeys(pkcs8, spki, sizes)
+  .then(function(results) {
+      publicKeys = results.publicKeys;
+      privateKeys = results.privateKeys;
+      noDeriveBitsKeys = results.noDeriveBitsKeys;
+      ecdhKeys = results.ecdhKeys;
+
+      {
+          // Basic success case
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName])
+              .then(function(derivation) {
+                  assert_true(equalBuffers(derivation, derivations[algorithmName]), "Derived correct bits");
+              }, function(err) {
+                  assert_unreached("deriveBits failed with error " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " good parameters");
+
+          // Case insensitivity check
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName.toLowerCase(), public: publicKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName])
+              .then(function(derivation) {
+                  assert_true(equalBuffers(derivation, derivations[algorithmName]), "Derived correct bits");
+              }, function(err) {
+                  assert_unreached("deriveBits failed with error " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " mixed case parameters");
+
+          // Shorter than entire derivation per algorithm
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName] - 32)
+              .then(function(derivation) {
+                  assert_true(equalBuffers(derivation, derivations[algorithmName], 8 * sizes[algorithmName] - 32), "Derived correct bits");
+              }, function(err) {
+                  assert_unreached("deriveBits failed with error " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " short result");
+
+          // Non-multiple of 8
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName] - 11)
+              .then(function(derivation) {
+                  assert_true(equalBuffers(derivation, derivations[algorithmName], 8 * sizes[algorithmName] - 11), "Derived correct bits");
+              }, function(err) {
+                  assert_unreached("deriveBits failed with error " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " non-multiple of 8 bits");
+
+          // Errors to test:
+
+          // - missing public property TypeError
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName}, privateKeys[algorithmName], 8 * sizes[algorithmName])
+              .then(function(derivation) {
+                  assert_unreached("deriveBits succeeded but should have failed with TypeError");
+              }, function(err) {
+                  assert_equals(err.name, "TypeError", "Should throw correct error, not " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " missing public property");
+
+          // - Non CryptoKey public property TypeError
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName, public: {message: "Not a CryptoKey"}}, privateKeys[algorithmName], 8 * sizes[algorithmName])
+              .then(function(derivation) {
+                  assert_unreached("deriveBits succeeded but should have failed with TypeError");
+              }, function(err) {
+                  assert_equals(err.name, "TypeError", "Should throw correct error, not " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " public property of algorithm is not a CryptoKey");
+
+          // - wrong algorithm
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName, public: ecdhKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName])
+              .then(function(derivation) {
+                  assert_unreached("deriveBits succeeded but should have failed with InvalidAccessError");
+              }, function(err) {
+                  assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " mismatched algorithms");
+
+          // - No deriveBits usage in baseKey InvalidAccessError
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, noDeriveBitsKeys[algorithmName], 8 * sizes[algorithmName])
+              .then(function(derivation) {
+                  assert_unreached("deriveBits succeeded but should have failed with InvalidAccessError");
+              }, function(err) {
+                  assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " no deriveBits usage for base key");
+
+          // - Use public key for baseKey InvalidAccessError
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, publicKeys[algorithmName], 8 * sizes[algorithmName])
+              .then(function(derivation) {
+                  assert_unreached("deriveBits succeeded but should have failed with InvalidAccessError");
+              }, function(err) {
+                  assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " base key is not a private key");
+
+          // - Use private key for public property InvalidAccessError
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName, public: privateKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName])
+              .then(function(derivation) {
+                  assert_unreached("deriveBits succeeded but should have failed with InvalidAccessError");
+              }, function(err) {
+                  assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " public property value is a private key");
+
+          // - Use secret key for public property InvalidAccessError
+          promise_test(function(test) {
+              return subtle.generateKey({name: "AES-CBC", length: 128}, true, ["encrypt", "decrypt"])
+              .then(function(secretKey) {
+                  return subtle.deriveBits({name: algorithmName, public: secretKey}, privateKeys[algorithmName], 8 * sizes[algorithmName])
+                  .then(function(derivation) {
+                      assert_unreached("deriveBits succeeded but should have failed with InvalidAccessError");
+                  }, function(err) {
+                      assert_equals(err.name, "InvalidAccessError", "Should throw correct error, not " + err.name + ": " + err.message);
+                  });
+              });
+          }, algorithmName + " public property value is a secret key");
+
+          // - Length greater than possible for particular curves OperationError
+          promise_test(function(test) {
+              return subtle.deriveBits({name: algorithmName, public: publicKeys[algorithmName]}, privateKeys[algorithmName], 8 * sizes[algorithmName] + 8)
+              .then(function(derivation) {
+                  assert_unreached("deriveBits succeeded but should have failed with OperationError");
+              }, function(err) {
+                  assert_equals(err.name, "OperationError", "Should throw correct error, not " + err.name + ": " + err.message);
+              });
+          }, algorithmName + " asking for too many bits");
+      }
+  });
+
+  function importKeys(pkcs8, spki, sizes) {
+      var privateKeys = {};
+      var publicKeys = {};
+      var noDeriveBitsKeys = {};
+      var ecdhPublicKeys = {};
+
+      var promises = [];
+      {
+          var operation = subtle.importKey("pkcs8", pkcs8[algorithmName],
+                                          {name: algorithmName},
+                                          false, ["deriveBits", "deriveKey"])
+                          .then(function(key) {
+                              privateKeys[algorithmName] = key;
+                            }, function (err) {
+                              privateKeys[algorithmName] = null;
+                          });
+          promises.push(operation);
+      }
+      {
+          var operation = subtle.importKey("pkcs8", pkcs8[algorithmName],
+                                          {name: algorithmName},
+                                          false, ["deriveKey"])
+                          .then(function(key) {
+                              noDeriveBitsKeys[algorithmName] = key;
+                            }, function (err) {
+                              noDeriveBitsKeys[algorithmName] = null;
+                          });
+          promises.push(operation);
+      }
+      {
+          var operation = subtle.importKey("spki", spki[algorithmName],
+                                          {name: algorithmName},
+                                          false, [])
+                          .then(function(key) {
+                              publicKeys[algorithmName] = key;
+                            }, function (err) {
+                              publicKeys[algorithmName] = null;
+                          });
+          promises.push(operation);
+      }
+      {
+          var operation = subtle.importKey("spki", ecSPKI,
+                                           {name: "ECDH", namedCurve: "P-256"},
+                                           false, [])
+                          .then(function(key) {
+                              ecdhPublicKeys[algorithmName] = key;
+                          });
+      }
+      return Promise.all(promises)
+             .then(function(results) {return {privateKeys: privateKeys, publicKeys: publicKeys, noDeriveBitsKeys: noDeriveBitsKeys, ecdhKeys: ecdhPublicKeys}});
+  }
+
+  // Compares two ArrayBuffer or ArrayBufferView objects. If bitCount is
+  // omitted, the two values must be the same length and have the same contents
+  // in every byte. If bitCount is included, only that leading number of bits
+  // have to match.
+  function equalBuffers(a, b, bitCount) {
+      var remainder;
+
+      if (typeof bitCount === "undefined" && a.byteLength !== b.byteLength) {
+          return false;
+      }
+
+      var aBytes = new Uint8Array(a);
+      var bBytes = new Uint8Array(b);
+
+      var length = a.byteLength;
+      if (typeof bitCount !== "undefined") {
+          length = Math.floor(bitCount / 8);
+      }
+
+      for (var i=0; i<length; i++) {
+          if (aBytes[i] !== bBytes[i]) {
+              return false;
+          }
+      }
+
+      if (typeof bitCount !== "undefined") {
+          remainder = bitCount % 8;
+          return aBytes[length] >> (8 - remainder) === bBytes[length] >> (8 - remainder);
+      }
+
+      return true;
+  }
+
+}

+ 16 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits_curve448.https.any.html

@@ -0,0 +1,16 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>WebCryptoAPI: deriveKey() Using ECDH with CFRG Elliptic Curves</title>
+<script>
+self.GLOBAL = {
+  isWindow: function() { return true; },
+  isWorker: function() { return false; },
+  isShadowRealm: function() { return false; },
+};
+</script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="cfrg_curves_bits_fixtures.js"></script>
+<script src="cfrg_curves_bits.js"></script>
+<div id=log></div>
+<script src="../../WebCryptoAPI/derive_bits_keys/cfrg_curves_bits_curve448.https.any.js"></script>

+ 10 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits_curve448.https.any.js

@@ -0,0 +1,10 @@
+// META: title=WebCryptoAPI: deriveKey() Using ECDH with CFRG Elliptic Curves
+// META: script=cfrg_curves_bits_fixtures.js
+// META: script=cfrg_curves_bits.js
+
+// Define subtests from a `promise_test` to ensure the harness does not
+// complete before the subtests are available. `explicit_done` cannot be used
+// for this purpose because the global `done` function is automatically invoked
+// by the WPT infrastructure in dedicated worker tests defined using the
+// "multi-global" pattern.
+promise_test(define_tests_448, 'setup - define tests');

+ 40 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/derive_bits_keys/cfrg_curves_bits_fixtures.js

@@ -0,0 +1,40 @@
+var pkcs8 = {
+    "X25519": new Uint8Array([48, 46, 2, 1, 0, 48, 5, 6, 3, 43, 101, 110, 4, 34, 4, 32, 200, 131, 142, 118, 208, 87, 223, 183, 216, 201, 90, 105, 225, 56, 22, 10, 221, 99, 115, 253, 113, 164, 210, 118, 187, 86, 227, 168, 27, 100, 255, 97]),
+    "X448": new Uint8Array([48, 70, 2, 1, 0, 48, 5, 6, 3, 43, 101, 111, 4, 58, 4, 56, 88, 199, 210, 154, 62, 181, 25, 178, 157, 0, 207, 177, 145, 187, 100, 252, 109, 138, 66, 216, 241, 113, 118, 39, 43, 137, 242, 39, 45, 24, 25, 41, 92, 101, 37, 192, 130, 150, 113, 176, 82, 239, 7, 39, 83, 15, 24, 142, 49, 208, 204, 83, 191, 38, 146, 158])
+};
+
+var spki = {
+    "X25519": new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 28, 242, 177, 230, 2, 46, 197, 55, 55, 30, 215, 245, 62, 84, 250, 17, 84, 216, 62, 152, 235, 100, 234, 81, 250, 229, 179, 48, 124, 254, 151, 6]),
+    "X448": new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 182, 4, 161, 209, 165, 205, 29, 148, 38, 213, 97, 239, 99, 10, 158, 177, 108, 190, 105, 213, 185, 202, 97, 94, 220, 83, 99, 62, 251, 82, 234, 49, 230, 230, 160, 161, 219, 172, 198, 231, 108, 188, 230, 72, 45, 126, 75, 163, 213, 93, 158, 128, 39, 101, 206, 111])
+};
+
+var sizes = {
+    "X25519": 32,
+    "X448": 56
+};
+
+var derivations = {
+    "X25519": new Uint8Array([39, 104, 64, 157, 250, 185, 158, 194, 59, 140, 137, 185, 63, 245, 136, 2, 149, 247, 97, 118, 8, 143, 137, 228, 61, 254, 190, 126, 161, 149, 0, 8]),
+    "X448": new Uint8Array([240, 246, 197, 241, 127, 148, 244, 41, 30, 171, 113, 120, 134, 109, 55, 236, 137, 6, 221, 108, 81, 65, 67, 220, 133, 190, 124, 242, 141, 239, 243, 155, 114, 110, 15, 109, 207, 129, 14, 181, 148, 220, 169, 123, 72, 130, 189, 68, 196, 62, 167, 220, 103, 244, 154, 78])
+};
+
+var kSmallOrderPoint = {
+    "X25519": [
+        { order: "0",                vector : new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) },
+        { order: "1",                vector : new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) },
+        { order: "8",                vector : new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 224, 235, 122, 124, 59, 65, 184, 174, 22, 86, 227, 250, 241, 159, 196, 106, 218, 9, 141, 235, 156, 50, 177, 253, 134, 98, 5, 22, 95, 73, 184, 0]) },
+        { order: "p-1 (order 2)",    vector : new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 236, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127]) },
+        { order: "p (=0, order 4)",  vector : new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 237, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127]) },
+        { order: "p+1 (=1, order 1)", vector : new Uint8Array([48, 42, 48, 5, 6, 3, 43, 101, 110, 3, 33, 0, 238, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 127]) },
+    ],
+    "X448": [
+        { order: "0",                 vector : new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) },
+        { order: "1",                 vector : new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 1, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0]) },
+        { order: "p-1 (order 2)",     vector : new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]) },
+        { order: "p (=0, order 4)",   vector : new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 254, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]) },
+        { order: "p+1 (=1, order 1)", vector : new Uint8Array([48, 66, 48, 5, 6, 3, 43, 101, 111, 3, 57, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 0, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255, 255]) },
+    ]
+};
+
+// "P-256":
+var ecSPKI = new Uint8Array([48, 89, 48, 19, 6, 7, 42, 134, 72, 206, 61, 2, 1, 6, 8, 42, 134, 72, 206, 61, 3, 1, 7, 3, 66, 0, 4, 154, 116, 32, 120, 126, 95, 77, 105, 211, 232, 34, 114, 115, 1, 109, 56, 224, 71, 129, 133, 223, 127, 238, 156, 142, 103, 60, 202, 211, 79, 126, 128, 254, 49, 141, 182, 221, 107, 119, 218, 99, 32, 165, 246, 151, 89, 9, 68, 23, 177, 52, 239, 138, 139, 116, 193, 101, 4, 57, 198, 115, 0, 90, 61]);

+ 17 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/generateKey/failures_X448.https.any.html

@@ -0,0 +1,17 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>WebCryptoAPI: generateKey() for Failures</title>
+<meta name="timeout" content="long">
+<script>
+self.GLOBAL = {
+  isWindow: function() { return true; },
+  isWorker: function() { return false; },
+  isShadowRealm: function() { return false; },
+};
+</script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../util/helpers.js"></script>
+<script src="failures.js"></script>
+<div id=log></div>
+<script src="../../WebCryptoAPI/generateKey/failures_X448.https.any.js"></script>

+ 5 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/generateKey/failures_X448.https.any.js

@@ -0,0 +1,5 @@
+// META: title=WebCryptoAPI: generateKey() for Failures
+// META: timeout=long
+// META: script=../util/helpers.js
+// META: script=failures.js
+run_test(["X448"]);

+ 18 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/generateKey/successes_X448.https.any.html

@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>WebCryptoAPI: generateKey() Successful Calls</title>
+<meta name="timeout" content="long">
+<script>
+self.GLOBAL = {
+  isWindow: function() { return true; },
+  isWorker: function() { return false; },
+  isShadowRealm: function() { return false; },
+};
+</script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../util/helpers.js"></script>
+<script src="../../common/subset-tests.js"></script>
+<script src="successes.js"></script>
+<div id=log></div>
+<script src="../../WebCryptoAPI/generateKey/successes_X448.https.any.js"></script>

+ 6 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/generateKey/successes_X448.https.any.js

@@ -0,0 +1,6 @@
+// META: title=WebCryptoAPI: generateKey() Successful Calls
+// META: timeout=long
+// META: script=../util/helpers.js
+// META: script=/common/subset-tests.js
+// META: script=successes.js
+run_test(["X448"]);

+ 18 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/import_export/okp_importKey_X448.https.any.html

@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>WebCryptoAPI: importKey() for OKP keys</title>
+<meta name="timeout" content="long">
+<script>
+self.GLOBAL = {
+  isWindow: function() { return true; },
+  isWorker: function() { return false; },
+  isShadowRealm: function() { return false; },
+};
+</script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../util/helpers.js"></script>
+<script src="okp_importKey_fixtures.js"></script>
+<script src="okp_importKey.js"></script>
+<div id=log></div>
+<script src="../../WebCryptoAPI/import_export/okp_importKey_X448.https.any.js"></script>

+ 9 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/import_export/okp_importKey_X448.https.any.js

@@ -0,0 +1,9 @@
+// META: title=WebCryptoAPI: importKey() for OKP keys
+// META: timeout=long
+// META: script=../util/helpers.js
+// META: script=okp_importKey_fixtures.js
+// META: script=okp_importKey.js
+
+
+// Test importKey and exportKey for OKP algorithms.
+runTests("X448");

+ 18 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.html

@@ -0,0 +1,18 @@
+<!doctype html>
+<meta charset=utf-8>
+<title>WebCryptoAPI: importKey() for Failures</title>
+<meta name="timeout" content="long">
+<script>
+self.GLOBAL = {
+  isWindow: function() { return true; },
+  isWorker: function() { return false; },
+  isShadowRealm: function() { return false; },
+};
+</script>
+<script src="../../resources/testharness.js"></script>
+<script src="../../resources/testharnessreport.js"></script>
+<script src="../util/helpers.js"></script>
+<script src="okp_importKey_failures_fixtures.js"></script>
+<script src="importKey_failures.js"></script>
+<div id=log></div>
+<script src="../../WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js"></script>

+ 8 - 0
Tests/LibWeb/Text/input/wpt-import/WebCryptoAPI/import_export/okp_importKey_failures_X448.https.any.js

@@ -0,0 +1,8 @@
+// META: title=WebCryptoAPI: importKey() for Failures
+// META: timeout=long
+// META: script=../util/helpers.js
+// META: script=okp_importKey_failures_fixtures.js
+// META: script=importKey_failures.js
+
+
+run_test(["X448"]);