SubtleCrypto-generateKey.html 2.3 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768
  1. <script src="../include.js"></script>
  2. <script>
  3. function bufferToHex(buffer) {
  4. return [...new Uint8Array(buffer)].map(b => b.toString(16).padStart(2, "0")).join("");
  5. }
  6. asyncTest(async done => {
  7. // FIXME: Generate a key with module lengths longer than 256, when they don't take an eternity to generate.
  8. // This is #23561
  9. let algorithm = {
  10. name: "RSA-OAEP",
  11. modulusLength: 256,
  12. publicExponent: new Uint8Array([1, 0, 1]),
  13. hash: "SHA-256",
  14. };
  15. println("generateKey with RSA-OAEP algorithm");
  16. var key = undefined;
  17. try {
  18. key = await window.crypto.subtle.generateKey(algorithm, true, [
  19. "encrypt",
  20. "decrypt",
  21. "wrapKey",
  22. "unwrapKey",
  23. ]);
  24. } catch (e) {
  25. println(`FAIL: ${e}`);
  26. }
  27. // FIXME: Report bugs to Chrome/Firefox about the order of properties on algorithm not matching us/Safari
  28. println(`publicKey: ${key.publicKey}`);
  29. println(`publicKey algorithm: ${JSON.stringify(key.publicKey.algorithm)}`);
  30. println(`publicKey type: ${key.publicKey.type}`);
  31. println(`publicKey extractable: ${key.publicKey.extractable}`);
  32. println(`publicKey usages: ${key.publicKey.usages}`);
  33. println(`privateKey: ${key.privateKey}`);
  34. println(`privateKey algorithm: ${JSON.stringify(key.privateKey.algorithm)}`);
  35. println(`privateKey type: ${key.privateKey.type}`);
  36. println(`privateKey extractable: ${key.privateKey.extractable}`);
  37. println(`privateKey usages: ${key.privateKey.usages}`);
  38. println("invalid usages throw");
  39. try {
  40. const key2 = await window.crypto.subtle.generateKey(algorithm, true, [
  41. "encrypt",
  42. "decrypt",
  43. "wrapKey",
  44. "unwrapKey",
  45. "sign",
  46. ]);
  47. } catch (e) {
  48. println(`Error: ${e}`);
  49. }
  50. println("no usages for private key throws");
  51. try {
  52. const key3 = await window.crypto.subtle.generateKey(algorithm, true, [
  53. "encrypt",
  54. "wrapKey",
  55. ]);
  56. } catch (e) {
  57. println(`Error: ${e}`);
  58. }
  59. done();
  60. });
  61. </script>