1<!DOCTYPE html> 2<html lang="en"> 3<head> 4 <meta charset="utf-8"> 5 <meta name="viewport" content="width=device-width"> 6 <meta name="nodejs.org:node-version" content="v18.18.2"> 7 <title>Web Crypto API | Node.js v18.18.2 Documentation</title> 8 <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Lato:400,700,400italic&display=fallback"> 9 <link rel="stylesheet" href="assets/style.css"> 10 <link rel="stylesheet" href="assets/hljs.css"> 11 <link rel="canonical" href="https://nodejs.org/api/webcrypto.html"> 12 <script async defer src="assets/api.js" type="text/javascript"></script> 13 14</head> 15<body class="alt apidoc" id="api-section-webcrypto"> 16 <div id="content" class="clearfix"> 17 <div id="column2" class="interior"> 18 <div id="intro" class="interior"> 19 <a href="/" title="Go back to the home page"> 20 Node.js 21 </a> 22 </div> 23 <ul> 24<li><a href="documentation.html" class="nav-documentation">About this documentation</a></li> 25<li><a href="synopsis.html" class="nav-synopsis">Usage and example</a></li> 26</ul> 27<hr class="line"> 28<ul> 29<li><a href="assert.html" class="nav-assert">Assertion testing</a></li> 30<li><a href="async_context.html" class="nav-async_context">Asynchronous context tracking</a></li> 31<li><a href="async_hooks.html" class="nav-async_hooks">Async hooks</a></li> 32<li><a href="buffer.html" class="nav-buffer">Buffer</a></li> 33<li><a href="addons.html" class="nav-addons">C++ addons</a></li> 34<li><a href="n-api.html" class="nav-n-api">C/C++ addons with Node-API</a></li> 35<li><a href="embedding.html" class="nav-embedding">C++ embedder API</a></li> 36<li><a href="child_process.html" class="nav-child_process">Child processes</a></li> 37<li><a href="cluster.html" class="nav-cluster">Cluster</a></li> 38<li><a href="cli.html" class="nav-cli">Command-line options</a></li> 39<li><a href="console.html" class="nav-console">Console</a></li> 40<li><a href="corepack.html" class="nav-corepack">Corepack</a></li> 41<li><a href="crypto.html" class="nav-crypto">Crypto</a></li> 42<li><a href="debugger.html" class="nav-debugger">Debugger</a></li> 43<li><a href="deprecations.html" class="nav-deprecations">Deprecated APIs</a></li> 44<li><a href="diagnostics_channel.html" class="nav-diagnostics_channel">Diagnostics Channel</a></li> 45<li><a href="dns.html" class="nav-dns">DNS</a></li> 46<li><a href="domain.html" class="nav-domain">Domain</a></li> 47<li><a href="errors.html" class="nav-errors">Errors</a></li> 48<li><a href="events.html" class="nav-events">Events</a></li> 49<li><a href="fs.html" class="nav-fs">File system</a></li> 50<li><a href="globals.html" class="nav-globals">Globals</a></li> 51<li><a href="http.html" class="nav-http">HTTP</a></li> 52<li><a href="http2.html" class="nav-http2">HTTP/2</a></li> 53<li><a href="https.html" class="nav-https">HTTPS</a></li> 54<li><a href="inspector.html" class="nav-inspector">Inspector</a></li> 55<li><a href="intl.html" class="nav-intl">Internationalization</a></li> 56<li><a href="modules.html" class="nav-modules">Modules: CommonJS modules</a></li> 57<li><a href="esm.html" class="nav-esm">Modules: ECMAScript modules</a></li> 58<li><a href="module.html" class="nav-module">Modules: <code>node:module</code> API</a></li> 59<li><a href="packages.html" class="nav-packages">Modules: Packages</a></li> 60<li><a href="net.html" class="nav-net">Net</a></li> 61<li><a href="os.html" class="nav-os">OS</a></li> 62<li><a href="path.html" class="nav-path">Path</a></li> 63<li><a href="perf_hooks.html" class="nav-perf_hooks">Performance hooks</a></li> 64<li><a href="permissions.html" class="nav-permissions">Permissions</a></li> 65<li><a href="process.html" class="nav-process">Process</a></li> 66<li><a href="punycode.html" class="nav-punycode">Punycode</a></li> 67<li><a href="querystring.html" class="nav-querystring">Query strings</a></li> 68<li><a href="readline.html" class="nav-readline">Readline</a></li> 69<li><a href="repl.html" class="nav-repl">REPL</a></li> 70<li><a href="report.html" class="nav-report">Report</a></li> 71<li><a href="single-executable-applications.html" class="nav-single-executable-applications">Single executable applications</a></li> 72<li><a href="stream.html" class="nav-stream">Stream</a></li> 73<li><a href="string_decoder.html" class="nav-string_decoder">String decoder</a></li> 74<li><a href="test.html" class="nav-test">Test runner</a></li> 75<li><a href="timers.html" class="nav-timers">Timers</a></li> 76<li><a href="tls.html" class="nav-tls">TLS/SSL</a></li> 77<li><a href="tracing.html" class="nav-tracing">Trace events</a></li> 78<li><a href="tty.html" class="nav-tty">TTY</a></li> 79<li><a href="dgram.html" class="nav-dgram">UDP/datagram</a></li> 80<li><a href="url.html" class="nav-url">URL</a></li> 81<li><a href="util.html" class="nav-util">Utilities</a></li> 82<li><a href="v8.html" class="nav-v8">V8</a></li> 83<li><a href="vm.html" class="nav-vm">VM</a></li> 84<li><a href="wasi.html" class="nav-wasi">WASI</a></li> 85<li><a href="webcrypto.html" class="nav-webcrypto active">Web Crypto API</a></li> 86<li><a href="webstreams.html" class="nav-webstreams">Web Streams API</a></li> 87<li><a href="worker_threads.html" class="nav-worker_threads">Worker threads</a></li> 88<li><a href="zlib.html" class="nav-zlib">Zlib</a></li> 89</ul> 90<hr class="line"> 91<ul> 92<li><a href="https://github.com/nodejs/node" class="nav-https-github-com-nodejs-node">Code repository and issue tracker</a></li> 93</ul> 94 </div> 95 96 <div id="column1" data-id="webcrypto" class="interior"> 97 <header class="header"> 98 <div class="header-container"> 99 <h1>Node.js v18.18.2 documentation</h1> 100 <button class="theme-toggle-btn" id="theme-toggle-btn" title="Toggle dark mode/light mode" aria-label="Toggle dark mode/light mode" hidden> 101 <svg xmlns="http://www.w3.org/2000/svg" class="icon dark-icon" height="24" width="24"> 102 <path fill="none" d="M0 0h24v24H0z" /> 103 <path d="M11.1 12.08c-2.33-4.51-.5-8.48.53-10.07C6.27 2.2 1.98 6.59 1.98 12c0 .14.02.28.02.42.62-.27 1.29-.42 2-.42 1.66 0 3.18.83 4.1 2.15A4.01 4.01 0 0111 18c0 1.52-.87 2.83-2.12 3.51.98.32 2.03.5 3.11.5 3.5 0 6.58-1.8 8.37-4.52-2.36.23-6.98-.97-9.26-5.41z"/> 104 <path d="M7 16h-.18C6.4 14.84 5.3 14 4 14c-1.66 0-3 1.34-3 3s1.34 3 3 3h3c1.1 0 2-.9 2-2s-.9-2-2-2z"/> 105 </svg> 106 <svg xmlns="http://www.w3.org/2000/svg" class="icon light-icon" height="24" width="24"> 107 <path d="M0 0h24v24H0z" fill="none" /> 108 <path d="M6.76 4.84l-1.8-1.79-1.41 1.41 1.79 1.79 1.42-1.41zM4 10.5H1v2h3v-2zm9-9.95h-2V3.5h2V.55zm7.45 3.91l-1.41-1.41-1.79 1.79 1.41 1.41 1.79-1.79zm-3.21 13.7l1.79 1.8 1.41-1.41-1.8-1.79-1.4 1.4zM20 10.5v2h3v-2h-3zm-8-5c-3.31 0-6 2.69-6 6s2.69 6 6 6 6-2.69 6-6-2.69-6-6-6zm-1 16.95h2V19.5h-2v2.95zm-7.45-3.91l1.41 1.41 1.79-1.8-1.41-1.41-1.79 1.8z"/> 109 </svg> 110 </button> 111 </div> 112 <div id="gtoc"> 113 <ul> 114 <li class="pinned-header">Node.js v18.18.2</li> 115 116 <li class="picker-header"> 117 <a href="#"> 118 <span class="collapsed-arrow">►</span><span class="expanded-arrow">▼</span> 119 Table of contents 120 </a> 121 122 <div class="picker"><div class="toc"><ul> 123<li><span class="stability_1"><a href="#web-crypto-api">Web Crypto API</a></span> 124<ul> 125<li><a href="#examples">Examples</a> 126<ul> 127<li><a href="#generating-keys">Generating keys</a> 128<ul> 129<li><a href="#aes-keys">AES keys</a></li> 130<li><a href="#ecdsa-key-pairs">ECDSA key pairs</a></li> 131<li><span class="stability_1"><a href="#ed25519ed448x25519x448-key-pairs">Ed25519/Ed448/X25519/X448 key pairs</a></span></li> 132<li><a href="#hmac-keys">HMAC keys</a></li> 133<li><a href="#rsa-key-pairs">RSA key pairs</a></li> 134</ul> 135</li> 136<li><a href="#encryption-and-decryption">Encryption and decryption</a></li> 137<li><a href="#exporting-and-importing-keys">Exporting and importing keys</a></li> 138<li><a href="#wrapping-and-unwrapping-keys">Wrapping and unwrapping keys</a></li> 139<li><a href="#sign-and-verify">Sign and verify</a></li> 140<li><a href="#deriving-bits-and-keys">Deriving bits and keys</a></li> 141<li><a href="#digest">Digest</a></li> 142</ul> 143</li> 144<li><a href="#algorithm-matrix">Algorithm matrix</a></li> 145<li><a href="#class-crypto">Class: <code>Crypto</code></a> 146<ul> 147<li><a href="#cryptosubtle"><code>crypto.subtle</code></a></li> 148<li><a href="#cryptogetrandomvaluestypedarray"><code>crypto.getRandomValues(typedArray)</code></a></li> 149<li><a href="#cryptorandomuuid"><code>crypto.randomUUID()</code></a></li> 150</ul> 151</li> 152<li><a href="#class-cryptokey">Class: <code>CryptoKey</code></a> 153<ul> 154<li><a href="#cryptokeyalgorithm"><code>cryptoKey.algorithm</code></a></li> 155<li><a href="#cryptokeyextractable"><code>cryptoKey.extractable</code></a></li> 156<li><a href="#cryptokeytype"><code>cryptoKey.type</code></a></li> 157<li><a href="#cryptokeyusages"><code>cryptoKey.usages</code></a></li> 158</ul> 159</li> 160<li><a href="#class-cryptokeypair">Class: <code>CryptoKeyPair</code></a> 161<ul> 162<li><a href="#cryptokeypairprivatekey"><code>cryptoKeyPair.privateKey</code></a></li> 163<li><a href="#cryptokeypairpublickey"><code>cryptoKeyPair.publicKey</code></a></li> 164</ul> 165</li> 166<li><a href="#class-subtlecrypto">Class: <code>SubtleCrypto</code></a> 167<ul> 168<li><a href="#subtledecryptalgorithm-key-data"><code>subtle.decrypt(algorithm, key, data)</code></a></li> 169<li><a href="#subtlederivebitsalgorithm-basekey-length"><code>subtle.deriveBits(algorithm, baseKey, length)</code></a></li> 170<li><a href="#subtlederivekeyalgorithm-basekey-derivedkeyalgorithm-extractable-keyusages"><code>subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)</code></a></li> 171<li><a href="#subtledigestalgorithm-data"><code>subtle.digest(algorithm, data)</code></a></li> 172<li><a href="#subtleencryptalgorithm-key-data"><code>subtle.encrypt(algorithm, key, data)</code></a></li> 173<li><a href="#subtleexportkeyformat-key"><code>subtle.exportKey(format, key)</code></a></li> 174<li><a href="#subtlegeneratekeyalgorithm-extractable-keyusages"><code>subtle.generateKey(algorithm, extractable, keyUsages)</code></a></li> 175<li><a href="#subtleimportkeyformat-keydata-algorithm-extractable-keyusages"><code>subtle.importKey(format, keyData, algorithm, extractable, keyUsages)</code></a></li> 176<li><a href="#subtlesignalgorithm-key-data"><code>subtle.sign(algorithm, key, data)</code></a></li> 177<li><a href="#subtleunwrapkeyformat-wrappedkey-unwrappingkey-unwrapalgo-unwrappedkeyalgo-extractable-keyusages"><code>subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)</code></a></li> 178<li><a href="#subtleverifyalgorithm-key-signature-data"><code>subtle.verify(algorithm, key, signature, data)</code></a></li> 179<li><a href="#subtlewrapkeyformat-key-wrappingkey-wrapalgo"><code>subtle.wrapKey(format, key, wrappingKey, wrapAlgo)</code></a></li> 180</ul> 181</li> 182<li><a href="#algorithm-parameters">Algorithm parameters</a> 183<ul> 184<li><a href="#class-algorithmidentifier">Class: <code>AlgorithmIdentifier</code></a> 185<ul> 186<li><a href="#algorithmidentifiername"><code>algorithmIdentifier.name</code></a></li> 187</ul> 188</li> 189<li><a href="#class-aescbcparams">Class: <code>AesCbcParams</code></a> 190<ul> 191<li><a href="#aescbcparamsiv"><code>aesCbcParams.iv</code></a></li> 192<li><a href="#aescbcparamsname"><code>aesCbcParams.name</code></a></li> 193</ul> 194</li> 195<li><a href="#class-aesctrparams">Class: <code>AesCtrParams</code></a> 196<ul> 197<li><a href="#aesctrparamscounter"><code>aesCtrParams.counter</code></a></li> 198<li><a href="#aesctrparamslength"><code>aesCtrParams.length</code></a></li> 199<li><a href="#aesctrparamsname"><code>aesCtrParams.name</code></a></li> 200</ul> 201</li> 202<li><a href="#class-aesgcmparams">Class: <code>AesGcmParams</code></a> 203<ul> 204<li><a href="#aesgcmparamsadditionaldata"><code>aesGcmParams.additionalData</code></a></li> 205<li><a href="#aesgcmparamsiv"><code>aesGcmParams.iv</code></a></li> 206<li><a href="#aesgcmparamsname"><code>aesGcmParams.name</code></a></li> 207<li><a href="#aesgcmparamstaglength"><code>aesGcmParams.tagLength</code></a></li> 208</ul> 209</li> 210<li><a href="#class-aeskeygenparams">Class: <code>AesKeyGenParams</code></a> 211<ul> 212<li><a href="#aeskeygenparamslength"><code>aesKeyGenParams.length</code></a></li> 213<li><a href="#aeskeygenparamsname"><code>aesKeyGenParams.name</code></a></li> 214</ul> 215</li> 216<li><a href="#class-ecdhkeyderiveparams">Class: <code>EcdhKeyDeriveParams</code></a> 217<ul> 218<li><a href="#ecdhkeyderiveparamsname"><code>ecdhKeyDeriveParams.name</code></a></li> 219<li><a href="#ecdhkeyderiveparamspublic"><code>ecdhKeyDeriveParams.public</code></a></li> 220</ul> 221</li> 222<li><a href="#class-ecdsaparams">Class: <code>EcdsaParams</code></a> 223<ul> 224<li><a href="#ecdsaparamshash"><code>ecdsaParams.hash</code></a></li> 225<li><a href="#ecdsaparamsname"><code>ecdsaParams.name</code></a></li> 226</ul> 227</li> 228<li><a href="#class-eckeygenparams">Class: <code>EcKeyGenParams</code></a> 229<ul> 230<li><a href="#eckeygenparamsname"><code>ecKeyGenParams.name</code></a></li> 231<li><a href="#eckeygenparamsnamedcurve"><code>ecKeyGenParams.namedCurve</code></a></li> 232</ul> 233</li> 234<li><a href="#class-eckeyimportparams">Class: <code>EcKeyImportParams</code></a> 235<ul> 236<li><a href="#eckeyimportparamsname"><code>ecKeyImportParams.name</code></a></li> 237<li><a href="#eckeyimportparamsnamedcurve"><code>ecKeyImportParams.namedCurve</code></a></li> 238</ul> 239</li> 240<li><a href="#class-ed448params">Class: <code>Ed448Params</code></a> 241<ul> 242<li><a href="#ed448paramsname"><code>ed448Params.name</code></a></li> 243<li><a href="#ed448paramscontext"><code>ed448Params.context</code></a></li> 244</ul> 245</li> 246<li><a href="#class-hkdfparams">Class: <code>HkdfParams</code></a> 247<ul> 248<li><a href="#hkdfparamshash"><code>hkdfParams.hash</code></a></li> 249<li><a href="#hkdfparamsinfo"><code>hkdfParams.info</code></a></li> 250<li><a href="#hkdfparamsname"><code>hkdfParams.name</code></a></li> 251<li><a href="#hkdfparamssalt"><code>hkdfParams.salt</code></a></li> 252</ul> 253</li> 254<li><a href="#class-hmacimportparams">Class: <code>HmacImportParams</code></a> 255<ul> 256<li><a href="#hmacimportparamshash"><code>hmacImportParams.hash</code></a></li> 257<li><a href="#hmacimportparamslength"><code>hmacImportParams.length</code></a></li> 258<li><a href="#hmacimportparamsname"><code>hmacImportParams.name</code></a></li> 259</ul> 260</li> 261<li><a href="#class-hmackeygenparams">Class: <code>HmacKeyGenParams</code></a> 262<ul> 263<li><a href="#hmackeygenparamshash"><code>hmacKeyGenParams.hash</code></a></li> 264<li><a href="#hmackeygenparamslength"><code>hmacKeyGenParams.length</code></a></li> 265<li><a href="#hmackeygenparamsname"><code>hmacKeyGenParams.name</code></a></li> 266</ul> 267</li> 268<li><a href="#class-pbkdf2params">Class: <code>Pbkdf2Params</code></a> 269<ul> 270<li><a href="#pbkdb2paramshash"><code>pbkdb2Params.hash</code></a></li> 271<li><a href="#pbkdf2paramsiterations"><code>pbkdf2Params.iterations</code></a></li> 272<li><a href="#pbkdf2paramsname"><code>pbkdf2Params.name</code></a></li> 273<li><a href="#pbkdf2paramssalt"><code>pbkdf2Params.salt</code></a></li> 274</ul> 275</li> 276<li><a href="#class-rsahashedimportparams">Class: <code>RsaHashedImportParams</code></a> 277<ul> 278<li><a href="#rsahashedimportparamshash"><code>rsaHashedImportParams.hash</code></a></li> 279<li><a href="#rsahashedimportparamsname"><code>rsaHashedImportParams.name</code></a></li> 280</ul> 281</li> 282<li><a href="#class-rsahashedkeygenparams">Class: <code>RsaHashedKeyGenParams</code></a> 283<ul> 284<li><a href="#rsahashedkeygenparamshash"><code>rsaHashedKeyGenParams.hash</code></a></li> 285<li><a href="#rsahashedkeygenparamsmoduluslength"><code>rsaHashedKeyGenParams.modulusLength</code></a></li> 286<li><a href="#rsahashedkeygenparamsname"><code>rsaHashedKeyGenParams.name</code></a></li> 287<li><a href="#rsahashedkeygenparamspublicexponent"><code>rsaHashedKeyGenParams.publicExponent</code></a></li> 288</ul> 289</li> 290<li><a href="#class-rsaoaepparams">Class: <code>RsaOaepParams</code></a> 291<ul> 292<li><a href="#rsaoaepparamslabel"><code>rsaOaepParams.label</code></a></li> 293<li><a href="#rsaoaepparamsname"><code>rsaOaepParams.name</code></a></li> 294</ul> 295</li> 296<li><a href="#class-rsapssparams">Class: <code>RsaPssParams</code></a> 297<ul> 298<li><a href="#rsapssparamsname"><code>rsaPssParams.name</code></a></li> 299<li><a href="#rsapssparamssaltlength"><code>rsaPssParams.saltLength</code></a></li> 300</ul> 301</li> 302</ul> 303</li> 304</ul> 305</li> 306</ul></div></div> 307 </li> 308 309 310 <li class="picker-header"> 311 <a href="#"> 312 <span class="collapsed-arrow">►</span><span class="expanded-arrow">▼</span> 313 Index 314 </a> 315 316 <div class="picker"><ul> 317<li><a href="documentation.html" class="nav-documentation">About this documentation</a></li> 318<li><a href="synopsis.html" class="nav-synopsis">Usage and example</a></li> 319 320 <li> 321 <a href="index.html">Index</a> 322 </li> 323 </ul> 324 325<hr class="line"> 326<ul> 327<li><a href="assert.html" class="nav-assert">Assertion testing</a></li> 328<li><a href="async_context.html" class="nav-async_context">Asynchronous context tracking</a></li> 329<li><a href="async_hooks.html" class="nav-async_hooks">Async hooks</a></li> 330<li><a href="buffer.html" class="nav-buffer">Buffer</a></li> 331<li><a href="addons.html" class="nav-addons">C++ addons</a></li> 332<li><a href="n-api.html" class="nav-n-api">C/C++ addons with Node-API</a></li> 333<li><a href="embedding.html" class="nav-embedding">C++ embedder API</a></li> 334<li><a href="child_process.html" class="nav-child_process">Child processes</a></li> 335<li><a href="cluster.html" class="nav-cluster">Cluster</a></li> 336<li><a href="cli.html" class="nav-cli">Command-line options</a></li> 337<li><a href="console.html" class="nav-console">Console</a></li> 338<li><a href="corepack.html" class="nav-corepack">Corepack</a></li> 339<li><a href="crypto.html" class="nav-crypto">Crypto</a></li> 340<li><a href="debugger.html" class="nav-debugger">Debugger</a></li> 341<li><a href="deprecations.html" class="nav-deprecations">Deprecated APIs</a></li> 342<li><a href="diagnostics_channel.html" class="nav-diagnostics_channel">Diagnostics Channel</a></li> 343<li><a href="dns.html" class="nav-dns">DNS</a></li> 344<li><a href="domain.html" class="nav-domain">Domain</a></li> 345<li><a href="errors.html" class="nav-errors">Errors</a></li> 346<li><a href="events.html" class="nav-events">Events</a></li> 347<li><a href="fs.html" class="nav-fs">File system</a></li> 348<li><a href="globals.html" class="nav-globals">Globals</a></li> 349<li><a href="http.html" class="nav-http">HTTP</a></li> 350<li><a href="http2.html" class="nav-http2">HTTP/2</a></li> 351<li><a href="https.html" class="nav-https">HTTPS</a></li> 352<li><a href="inspector.html" class="nav-inspector">Inspector</a></li> 353<li><a href="intl.html" class="nav-intl">Internationalization</a></li> 354<li><a href="modules.html" class="nav-modules">Modules: CommonJS modules</a></li> 355<li><a href="esm.html" class="nav-esm">Modules: ECMAScript modules</a></li> 356<li><a href="module.html" class="nav-module">Modules: <code>node:module</code> API</a></li> 357<li><a href="packages.html" class="nav-packages">Modules: Packages</a></li> 358<li><a href="net.html" class="nav-net">Net</a></li> 359<li><a href="os.html" class="nav-os">OS</a></li> 360<li><a href="path.html" class="nav-path">Path</a></li> 361<li><a href="perf_hooks.html" class="nav-perf_hooks">Performance hooks</a></li> 362<li><a href="permissions.html" class="nav-permissions">Permissions</a></li> 363<li><a href="process.html" class="nav-process">Process</a></li> 364<li><a href="punycode.html" class="nav-punycode">Punycode</a></li> 365<li><a href="querystring.html" class="nav-querystring">Query strings</a></li> 366<li><a href="readline.html" class="nav-readline">Readline</a></li> 367<li><a href="repl.html" class="nav-repl">REPL</a></li> 368<li><a href="report.html" class="nav-report">Report</a></li> 369<li><a href="single-executable-applications.html" class="nav-single-executable-applications">Single executable applications</a></li> 370<li><a href="stream.html" class="nav-stream">Stream</a></li> 371<li><a href="string_decoder.html" class="nav-string_decoder">String decoder</a></li> 372<li><a href="test.html" class="nav-test">Test runner</a></li> 373<li><a href="timers.html" class="nav-timers">Timers</a></li> 374<li><a href="tls.html" class="nav-tls">TLS/SSL</a></li> 375<li><a href="tracing.html" class="nav-tracing">Trace events</a></li> 376<li><a href="tty.html" class="nav-tty">TTY</a></li> 377<li><a href="dgram.html" class="nav-dgram">UDP/datagram</a></li> 378<li><a href="url.html" class="nav-url">URL</a></li> 379<li><a href="util.html" class="nav-util">Utilities</a></li> 380<li><a href="v8.html" class="nav-v8">V8</a></li> 381<li><a href="vm.html" class="nav-vm">VM</a></li> 382<li><a href="wasi.html" class="nav-wasi">WASI</a></li> 383<li><a href="webcrypto.html" class="nav-webcrypto active">Web Crypto API</a></li> 384<li><a href="webstreams.html" class="nav-webstreams">Web Streams API</a></li> 385<li><a href="worker_threads.html" class="nav-worker_threads">Worker threads</a></li> 386<li><a href="zlib.html" class="nav-zlib">Zlib</a></li> 387</ul> 388<hr class="line"> 389<ul> 390<li><a href="https://github.com/nodejs/node" class="nav-https-github-com-nodejs-node">Code repository and issue tracker</a></li> 391</ul></div> 392 </li> 393 394 395 <li class="picker-header"> 396 <a href="#"> 397 <span class="collapsed-arrow">►</span><span class="expanded-arrow">▼</span> 398 Other versions 399 </a> 400 <div class="picker"><ol id="alt-docs"><li><a href="https://nodejs.org/docs/latest-v20.x/api/webcrypto.html">20.x</a></li> 401<li><a href="https://nodejs.org/docs/latest-v19.x/api/webcrypto.html">19.x</a></li> 402<li><a href="https://nodejs.org/docs/latest-v18.x/api/webcrypto.html">18.x <b>LTS</b></a></li> 403<li><a href="https://nodejs.org/docs/latest-v17.x/api/webcrypto.html">17.x</a></li> 404<li><a href="https://nodejs.org/docs/latest-v16.x/api/webcrypto.html">16.x</a></li> 405<li><a href="https://nodejs.org/docs/latest-v15.x/api/webcrypto.html">15.x</a></li></ol></div> 406 </li> 407 408 <li class="picker-header"> 409 <a href="#"> 410 <span class="collapsed-arrow">►</span><span class="expanded-arrow">▼</span> 411 Options 412 </a> 413 414 <div class="picker"> 415 <ul> 416 <li> 417 <a href="all.html">View on single page</a> 418 </li> 419 <li> 420 <a href="webcrypto.json">View as JSON</a> 421 </li> 422 <li class="edit_on_github"><a href="https://github.com/nodejs/node/edit/main/doc/api/webcrypto.md">Edit on GitHub</a></li> 423 </ul> 424 </div> 425 </li> 426 </ul> 427 </div> 428 <hr> 429 </header> 430 431 <details id="toc" open><summary>Table of contents</summary><ul> 432<li><span class="stability_1"><a href="#web-crypto-api">Web Crypto API</a></span> 433<ul> 434<li><a href="#examples">Examples</a> 435<ul> 436<li><a href="#generating-keys">Generating keys</a> 437<ul> 438<li><a href="#aes-keys">AES keys</a></li> 439<li><a href="#ecdsa-key-pairs">ECDSA key pairs</a></li> 440<li><span class="stability_1"><a href="#ed25519ed448x25519x448-key-pairs">Ed25519/Ed448/X25519/X448 key pairs</a></span></li> 441<li><a href="#hmac-keys">HMAC keys</a></li> 442<li><a href="#rsa-key-pairs">RSA key pairs</a></li> 443</ul> 444</li> 445<li><a href="#encryption-and-decryption">Encryption and decryption</a></li> 446<li><a href="#exporting-and-importing-keys">Exporting and importing keys</a></li> 447<li><a href="#wrapping-and-unwrapping-keys">Wrapping and unwrapping keys</a></li> 448<li><a href="#sign-and-verify">Sign and verify</a></li> 449<li><a href="#deriving-bits-and-keys">Deriving bits and keys</a></li> 450<li><a href="#digest">Digest</a></li> 451</ul> 452</li> 453<li><a href="#algorithm-matrix">Algorithm matrix</a></li> 454<li><a href="#class-crypto">Class: <code>Crypto</code></a> 455<ul> 456<li><a href="#cryptosubtle"><code>crypto.subtle</code></a></li> 457<li><a href="#cryptogetrandomvaluestypedarray"><code>crypto.getRandomValues(typedArray)</code></a></li> 458<li><a href="#cryptorandomuuid"><code>crypto.randomUUID()</code></a></li> 459</ul> 460</li> 461<li><a href="#class-cryptokey">Class: <code>CryptoKey</code></a> 462<ul> 463<li><a href="#cryptokeyalgorithm"><code>cryptoKey.algorithm</code></a></li> 464<li><a href="#cryptokeyextractable"><code>cryptoKey.extractable</code></a></li> 465<li><a href="#cryptokeytype"><code>cryptoKey.type</code></a></li> 466<li><a href="#cryptokeyusages"><code>cryptoKey.usages</code></a></li> 467</ul> 468</li> 469<li><a href="#class-cryptokeypair">Class: <code>CryptoKeyPair</code></a> 470<ul> 471<li><a href="#cryptokeypairprivatekey"><code>cryptoKeyPair.privateKey</code></a></li> 472<li><a href="#cryptokeypairpublickey"><code>cryptoKeyPair.publicKey</code></a></li> 473</ul> 474</li> 475<li><a href="#class-subtlecrypto">Class: <code>SubtleCrypto</code></a> 476<ul> 477<li><a href="#subtledecryptalgorithm-key-data"><code>subtle.decrypt(algorithm, key, data)</code></a></li> 478<li><a href="#subtlederivebitsalgorithm-basekey-length"><code>subtle.deriveBits(algorithm, baseKey, length)</code></a></li> 479<li><a href="#subtlederivekeyalgorithm-basekey-derivedkeyalgorithm-extractable-keyusages"><code>subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)</code></a></li> 480<li><a href="#subtledigestalgorithm-data"><code>subtle.digest(algorithm, data)</code></a></li> 481<li><a href="#subtleencryptalgorithm-key-data"><code>subtle.encrypt(algorithm, key, data)</code></a></li> 482<li><a href="#subtleexportkeyformat-key"><code>subtle.exportKey(format, key)</code></a></li> 483<li><a href="#subtlegeneratekeyalgorithm-extractable-keyusages"><code>subtle.generateKey(algorithm, extractable, keyUsages)</code></a></li> 484<li><a href="#subtleimportkeyformat-keydata-algorithm-extractable-keyusages"><code>subtle.importKey(format, keyData, algorithm, extractable, keyUsages)</code></a></li> 485<li><a href="#subtlesignalgorithm-key-data"><code>subtle.sign(algorithm, key, data)</code></a></li> 486<li><a href="#subtleunwrapkeyformat-wrappedkey-unwrappingkey-unwrapalgo-unwrappedkeyalgo-extractable-keyusages"><code>subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)</code></a></li> 487<li><a href="#subtleverifyalgorithm-key-signature-data"><code>subtle.verify(algorithm, key, signature, data)</code></a></li> 488<li><a href="#subtlewrapkeyformat-key-wrappingkey-wrapalgo"><code>subtle.wrapKey(format, key, wrappingKey, wrapAlgo)</code></a></li> 489</ul> 490</li> 491<li><a href="#algorithm-parameters">Algorithm parameters</a> 492<ul> 493<li><a href="#class-algorithmidentifier">Class: <code>AlgorithmIdentifier</code></a> 494<ul> 495<li><a href="#algorithmidentifiername"><code>algorithmIdentifier.name</code></a></li> 496</ul> 497</li> 498<li><a href="#class-aescbcparams">Class: <code>AesCbcParams</code></a> 499<ul> 500<li><a href="#aescbcparamsiv"><code>aesCbcParams.iv</code></a></li> 501<li><a href="#aescbcparamsname"><code>aesCbcParams.name</code></a></li> 502</ul> 503</li> 504<li><a href="#class-aesctrparams">Class: <code>AesCtrParams</code></a> 505<ul> 506<li><a href="#aesctrparamscounter"><code>aesCtrParams.counter</code></a></li> 507<li><a href="#aesctrparamslength"><code>aesCtrParams.length</code></a></li> 508<li><a href="#aesctrparamsname"><code>aesCtrParams.name</code></a></li> 509</ul> 510</li> 511<li><a href="#class-aesgcmparams">Class: <code>AesGcmParams</code></a> 512<ul> 513<li><a href="#aesgcmparamsadditionaldata"><code>aesGcmParams.additionalData</code></a></li> 514<li><a href="#aesgcmparamsiv"><code>aesGcmParams.iv</code></a></li> 515<li><a href="#aesgcmparamsname"><code>aesGcmParams.name</code></a></li> 516<li><a href="#aesgcmparamstaglength"><code>aesGcmParams.tagLength</code></a></li> 517</ul> 518</li> 519<li><a href="#class-aeskeygenparams">Class: <code>AesKeyGenParams</code></a> 520<ul> 521<li><a href="#aeskeygenparamslength"><code>aesKeyGenParams.length</code></a></li> 522<li><a href="#aeskeygenparamsname"><code>aesKeyGenParams.name</code></a></li> 523</ul> 524</li> 525<li><a href="#class-ecdhkeyderiveparams">Class: <code>EcdhKeyDeriveParams</code></a> 526<ul> 527<li><a href="#ecdhkeyderiveparamsname"><code>ecdhKeyDeriveParams.name</code></a></li> 528<li><a href="#ecdhkeyderiveparamspublic"><code>ecdhKeyDeriveParams.public</code></a></li> 529</ul> 530</li> 531<li><a href="#class-ecdsaparams">Class: <code>EcdsaParams</code></a> 532<ul> 533<li><a href="#ecdsaparamshash"><code>ecdsaParams.hash</code></a></li> 534<li><a href="#ecdsaparamsname"><code>ecdsaParams.name</code></a></li> 535</ul> 536</li> 537<li><a href="#class-eckeygenparams">Class: <code>EcKeyGenParams</code></a> 538<ul> 539<li><a href="#eckeygenparamsname"><code>ecKeyGenParams.name</code></a></li> 540<li><a href="#eckeygenparamsnamedcurve"><code>ecKeyGenParams.namedCurve</code></a></li> 541</ul> 542</li> 543<li><a href="#class-eckeyimportparams">Class: <code>EcKeyImportParams</code></a> 544<ul> 545<li><a href="#eckeyimportparamsname"><code>ecKeyImportParams.name</code></a></li> 546<li><a href="#eckeyimportparamsnamedcurve"><code>ecKeyImportParams.namedCurve</code></a></li> 547</ul> 548</li> 549<li><a href="#class-ed448params">Class: <code>Ed448Params</code></a> 550<ul> 551<li><a href="#ed448paramsname"><code>ed448Params.name</code></a></li> 552<li><a href="#ed448paramscontext"><code>ed448Params.context</code></a></li> 553</ul> 554</li> 555<li><a href="#class-hkdfparams">Class: <code>HkdfParams</code></a> 556<ul> 557<li><a href="#hkdfparamshash"><code>hkdfParams.hash</code></a></li> 558<li><a href="#hkdfparamsinfo"><code>hkdfParams.info</code></a></li> 559<li><a href="#hkdfparamsname"><code>hkdfParams.name</code></a></li> 560<li><a href="#hkdfparamssalt"><code>hkdfParams.salt</code></a></li> 561</ul> 562</li> 563<li><a href="#class-hmacimportparams">Class: <code>HmacImportParams</code></a> 564<ul> 565<li><a href="#hmacimportparamshash"><code>hmacImportParams.hash</code></a></li> 566<li><a href="#hmacimportparamslength"><code>hmacImportParams.length</code></a></li> 567<li><a href="#hmacimportparamsname"><code>hmacImportParams.name</code></a></li> 568</ul> 569</li> 570<li><a href="#class-hmackeygenparams">Class: <code>HmacKeyGenParams</code></a> 571<ul> 572<li><a href="#hmackeygenparamshash"><code>hmacKeyGenParams.hash</code></a></li> 573<li><a href="#hmackeygenparamslength"><code>hmacKeyGenParams.length</code></a></li> 574<li><a href="#hmackeygenparamsname"><code>hmacKeyGenParams.name</code></a></li> 575</ul> 576</li> 577<li><a href="#class-pbkdf2params">Class: <code>Pbkdf2Params</code></a> 578<ul> 579<li><a href="#pbkdb2paramshash"><code>pbkdb2Params.hash</code></a></li> 580<li><a href="#pbkdf2paramsiterations"><code>pbkdf2Params.iterations</code></a></li> 581<li><a href="#pbkdf2paramsname"><code>pbkdf2Params.name</code></a></li> 582<li><a href="#pbkdf2paramssalt"><code>pbkdf2Params.salt</code></a></li> 583</ul> 584</li> 585<li><a href="#class-rsahashedimportparams">Class: <code>RsaHashedImportParams</code></a> 586<ul> 587<li><a href="#rsahashedimportparamshash"><code>rsaHashedImportParams.hash</code></a></li> 588<li><a href="#rsahashedimportparamsname"><code>rsaHashedImportParams.name</code></a></li> 589</ul> 590</li> 591<li><a href="#class-rsahashedkeygenparams">Class: <code>RsaHashedKeyGenParams</code></a> 592<ul> 593<li><a href="#rsahashedkeygenparamshash"><code>rsaHashedKeyGenParams.hash</code></a></li> 594<li><a href="#rsahashedkeygenparamsmoduluslength"><code>rsaHashedKeyGenParams.modulusLength</code></a></li> 595<li><a href="#rsahashedkeygenparamsname"><code>rsaHashedKeyGenParams.name</code></a></li> 596<li><a href="#rsahashedkeygenparamspublicexponent"><code>rsaHashedKeyGenParams.publicExponent</code></a></li> 597</ul> 598</li> 599<li><a href="#class-rsaoaepparams">Class: <code>RsaOaepParams</code></a> 600<ul> 601<li><a href="#rsaoaepparamslabel"><code>rsaOaepParams.label</code></a></li> 602<li><a href="#rsaoaepparamsname"><code>rsaOaepParams.name</code></a></li> 603</ul> 604</li> 605<li><a href="#class-rsapssparams">Class: <code>RsaPssParams</code></a> 606<ul> 607<li><a href="#rsapssparamsname"><code>rsaPssParams.name</code></a></li> 608<li><a href="#rsapssparamssaltlength"><code>rsaPssParams.saltLength</code></a></li> 609</ul> 610</li> 611</ul> 612</li> 613</ul> 614</li> 615</ul></details> 616 617 <div id="apicontent"> 618 <h2>Web Crypto API<span><a class="mark" href="#web-crypto-api" id="web-crypto-api">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_web_crypto_api"></a></h2> 619<div class="api_metadata"> 620<details class="changelog"><summary>History</summary> 621<table> 622<tbody><tr><th>Version</th><th>Changes</th></tr> 623<tr><td>v18.17.0</td> 624<td><p>Arguments are now coerced and validated as per their WebIDL definitions like in other Web Crypto API implementations.</p></td></tr> 625<tr><td>v18.4.0</td> 626<td><p>Removed proprietary <code>'node.keyObject'</code> import/export format.</p></td></tr> 627<tr><td>v18.4.0</td> 628<td><p>Removed proprietary <code>'NODE-DSA'</code>, <code>'NODE-DH'</code>, and <code>'NODE-SCRYPT'</code> algorithms.</p></td></tr> 629<tr><td>v18.4.0</td> 630<td><p>Added <code>'Ed25519'</code>, <code>'Ed448'</code>, <code>'X25519'</code>, and <code>'X448'</code> algorithms.</p></td></tr> 631<tr><td>v18.4.0</td> 632<td><p>Removed proprietary <code>'NODE-ED25519'</code> and <code>'NODE-ED448'</code> algorithms.</p></td></tr> 633<tr><td>v18.4.0</td> 634<td><p>Removed proprietary <code>'NODE-X25519'</code> and <code>'NODE-X448'</code> named curves from the <code>'ECDH'</code> algorithm.</p></td></tr> 635</tbody></table> 636</details> 637</div> 638 639<p></p><div class="api_stability api_stability_1"><a href="documentation.html#stability-index">Stability: 1</a> - Experimental</div><p></p> 640<p>Node.js provides an implementation of the standard <a href="https://www.w3.org/TR/WebCryptoAPI/">Web Crypto API</a>.</p> 641<p>Use <code>require('node:crypto').webcrypto</code> to access this module.</p> 642<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 643 644(<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span>(<span class="hljs-params"></span>) { 645 646 <span class="hljs-keyword">const</span> key = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">generateKey</span>({ 647 <span class="hljs-attr">name</span>: <span class="hljs-string">'HMAC'</span>, 648 <span class="hljs-attr">hash</span>: <span class="hljs-string">'SHA-256'</span>, 649 <span class="hljs-attr">length</span>: <span class="hljs-number">256</span>, 650 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'sign'</span>, <span class="hljs-string">'verify'</span>]); 651 652 <span class="hljs-keyword">const</span> enc = <span class="hljs-keyword">new</span> <span class="hljs-title class_">TextEncoder</span>(); 653 <span class="hljs-keyword">const</span> message = enc.<span class="hljs-title function_">encode</span>(<span class="hljs-string">'I love cupcakes'</span>); 654 655 <span class="hljs-keyword">const</span> digest = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">sign</span>({ 656 <span class="hljs-attr">name</span>: <span class="hljs-string">'HMAC'</span>, 657 }, key, message); 658 659})();</code> <button class="copy-button">copy</button></pre> 660<section><h3>Examples<span><a class="mark" href="#examples" id="examples">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_examples"></a></h3> 661<h4>Generating keys<span><a class="mark" href="#generating-keys" id="generating-keys">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_generating_keys"></a></h4> 662<p>The <a href="webcrypto.html#class-subtlecrypto" class="type"><SubtleCrypto></a> class can be used to generate symmetric (secret) keys 663or asymmetric key pairs (public key and private key).</p> 664<h5>AES keys<span><a class="mark" href="#aes-keys" id="aes-keys">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aes_keys"></a></h5> 665<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 666 667<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">generateAesKey</span>(<span class="hljs-params">length = <span class="hljs-number">256</span></span>) { 668 <span class="hljs-keyword">const</span> key = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">generateKey</span>({ 669 <span class="hljs-attr">name</span>: <span class="hljs-string">'AES-CBC'</span>, 670 length, 671 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'encrypt'</span>, <span class="hljs-string">'decrypt'</span>]); 672 673 <span class="hljs-keyword">return</span> key; 674}</code> <button class="copy-button">copy</button></pre> 675<h5>ECDSA key pairs<span><a class="mark" href="#ecdsa-key-pairs" id="ecdsa-key-pairs">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_ecdsa_key_pairs"></a></h5> 676<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 677 678<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">generateEcKey</span>(<span class="hljs-params">namedCurve = <span class="hljs-string">'P-521'</span></span>) { 679 <span class="hljs-keyword">const</span> { 680 publicKey, 681 privateKey, 682 } = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">generateKey</span>({ 683 <span class="hljs-attr">name</span>: <span class="hljs-string">'ECDSA'</span>, 684 namedCurve, 685 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'sign'</span>, <span class="hljs-string">'verify'</span>]); 686 687 <span class="hljs-keyword">return</span> { publicKey, privateKey }; 688}</code> <button class="copy-button">copy</button></pre> 689<h5>Ed25519/Ed448/X25519/X448 key pairs<span><a class="mark" href="#ed25519ed448x25519x448-key-pairs" id="ed25519ed448x25519x448-key-pairs">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_ed25519_ed448_x25519_x448_key_pairs"></a></h5> 690<p></p><div class="api_stability api_stability_1"><a href="documentation.html#stability-index">Stability: 1</a> - Experimental</div><p></p> 691<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 692 693<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">generateEd25519Key</span>(<span class="hljs-params"></span>) { 694 <span class="hljs-keyword">return</span> subtle.<span class="hljs-title function_">generateKey</span>({ 695 <span class="hljs-attr">name</span>: <span class="hljs-string">'Ed25519'</span>, 696 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'sign'</span>, <span class="hljs-string">'verify'</span>]); 697} 698 699<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">generateX25519Key</span>(<span class="hljs-params"></span>) { 700 <span class="hljs-keyword">return</span> subtle.<span class="hljs-title function_">generateKey</span>({ 701 <span class="hljs-attr">name</span>: <span class="hljs-string">'X25519'</span>, 702 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'deriveKey'</span>]); 703}</code> <button class="copy-button">copy</button></pre> 704<h5>HMAC keys<span><a class="mark" href="#hmac-keys" id="hmac-keys">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hmac_keys"></a></h5> 705<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 706 707<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">generateHmacKey</span>(<span class="hljs-params">hash = <span class="hljs-string">'SHA-256'</span></span>) { 708 <span class="hljs-keyword">const</span> key = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">generateKey</span>({ 709 <span class="hljs-attr">name</span>: <span class="hljs-string">'HMAC'</span>, 710 hash, 711 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'sign'</span>, <span class="hljs-string">'verify'</span>]); 712 713 <span class="hljs-keyword">return</span> key; 714}</code> <button class="copy-button">copy</button></pre> 715<h5>RSA key pairs<span><a class="mark" href="#rsa-key-pairs" id="rsa-key-pairs">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsa_key_pairs"></a></h5> 716<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 717<span class="hljs-keyword">const</span> publicExponent = <span class="hljs-keyword">new</span> <span class="hljs-title class_">Uint8Array</span>([<span class="hljs-number">1</span>, <span class="hljs-number">0</span>, <span class="hljs-number">1</span>]); 718 719<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">generateRsaKey</span>(<span class="hljs-params">modulusLength = <span class="hljs-number">2048</span>, hash = <span class="hljs-string">'SHA-256'</span></span>) { 720 <span class="hljs-keyword">const</span> { 721 publicKey, 722 privateKey, 723 } = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">generateKey</span>({ 724 <span class="hljs-attr">name</span>: <span class="hljs-string">'RSASSA-PKCS1-v1_5'</span>, 725 modulusLength, 726 publicExponent, 727 hash, 728 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'sign'</span>, <span class="hljs-string">'verify'</span>]); 729 730 <span class="hljs-keyword">return</span> { publicKey, privateKey }; 731}</code> <button class="copy-button">copy</button></pre> 732<h4>Encryption and decryption<span><a class="mark" href="#encryption-and-decryption" id="encryption-and-decryption">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_encryption_and_decryption"></a></h4> 733<pre><code class="language-js"><span class="hljs-keyword">const</span> crypto = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 734 735<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">aesEncrypt</span>(<span class="hljs-params">plaintext</span>) { 736 <span class="hljs-keyword">const</span> ec = <span class="hljs-keyword">new</span> <span class="hljs-title class_">TextEncoder</span>(); 737 <span class="hljs-keyword">const</span> key = <span class="hljs-keyword">await</span> <span class="hljs-title function_">generateAesKey</span>(); 738 <span class="hljs-keyword">const</span> iv = crypto.<span class="hljs-title function_">getRandomValues</span>(<span class="hljs-keyword">new</span> <span class="hljs-title class_">Uint8Array</span>(<span class="hljs-number">16</span>)); 739 740 <span class="hljs-keyword">const</span> ciphertext = <span class="hljs-keyword">await</span> crypto.<span class="hljs-property">subtle</span>.<span class="hljs-title function_">encrypt</span>({ 741 <span class="hljs-attr">name</span>: <span class="hljs-string">'AES-CBC'</span>, 742 iv, 743 }, key, ec.<span class="hljs-title function_">encode</span>(plaintext)); 744 745 <span class="hljs-keyword">return</span> { 746 key, 747 iv, 748 ciphertext, 749 }; 750} 751 752<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">aesDecrypt</span>(<span class="hljs-params">ciphertext, key, iv</span>) { 753 <span class="hljs-keyword">const</span> dec = <span class="hljs-keyword">new</span> <span class="hljs-title class_">TextDecoder</span>(); 754 <span class="hljs-keyword">const</span> plaintext = <span class="hljs-keyword">await</span> crypto.<span class="hljs-property">subtle</span>.<span class="hljs-title function_">decrypt</span>({ 755 <span class="hljs-attr">name</span>: <span class="hljs-string">'AES-CBC'</span>, 756 iv, 757 }, key, ciphertext); 758 759 <span class="hljs-keyword">return</span> dec.<span class="hljs-title function_">decode</span>(plaintext); 760}</code> <button class="copy-button">copy</button></pre> 761<h4>Exporting and importing keys<span><a class="mark" href="#exporting-and-importing-keys" id="exporting-and-importing-keys">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_exporting_and_importing_keys"></a></h4> 762<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 763 764<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">generateAndExportHmacKey</span>(<span class="hljs-params">format = <span class="hljs-string">'jwk'</span>, hash = <span class="hljs-string">'SHA-512'</span></span>) { 765 <span class="hljs-keyword">const</span> key = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">generateKey</span>({ 766 <span class="hljs-attr">name</span>: <span class="hljs-string">'HMAC'</span>, 767 hash, 768 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'sign'</span>, <span class="hljs-string">'verify'</span>]); 769 770 <span class="hljs-keyword">return</span> subtle.<span class="hljs-title function_">exportKey</span>(format, key); 771} 772 773<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">importHmacKey</span>(<span class="hljs-params">keyData, format = <span class="hljs-string">'jwk'</span>, hash = <span class="hljs-string">'SHA-512'</span></span>) { 774 <span class="hljs-keyword">const</span> key = <span class="hljs-keyword">await</span> subtle.importKey(format, keyData, { 775 <span class="hljs-attr">name</span>: <span class="hljs-string">'HMAC'</span>, 776 hash, 777 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'sign'</span>, <span class="hljs-string">'verify'</span>]); 778 779 <span class="hljs-keyword">return</span> key; 780}</code> <button class="copy-button">copy</button></pre> 781<h4>Wrapping and unwrapping keys<span><a class="mark" href="#wrapping-and-unwrapping-keys" id="wrapping-and-unwrapping-keys">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_wrapping_and_unwrapping_keys"></a></h4> 782<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 783 784<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">generateAndWrapHmacKey</span>(<span class="hljs-params">format = <span class="hljs-string">'jwk'</span>, hash = <span class="hljs-string">'SHA-512'</span></span>) { 785 <span class="hljs-keyword">const</span> [ 786 key, 787 wrappingKey, 788 ] = <span class="hljs-keyword">await</span> <span class="hljs-title class_">Promise</span>.<span class="hljs-title function_">all</span>([ 789 subtle.<span class="hljs-title function_">generateKey</span>({ 790 <span class="hljs-attr">name</span>: <span class="hljs-string">'HMAC'</span>, hash, 791 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'sign'</span>, <span class="hljs-string">'verify'</span>]), 792 subtle.<span class="hljs-title function_">generateKey</span>({ 793 <span class="hljs-attr">name</span>: <span class="hljs-string">'AES-KW'</span>, 794 <span class="hljs-attr">length</span>: <span class="hljs-number">256</span>, 795 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'wrapKey'</span>, <span class="hljs-string">'unwrapKey'</span>]), 796 ]); 797 798 <span class="hljs-keyword">const</span> wrappedKey = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">wrapKey</span>(format, key, wrappingKey, <span class="hljs-string">'AES-KW'</span>); 799 800 <span class="hljs-keyword">return</span> { wrappedKey, wrappingKey }; 801} 802 803<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">unwrapHmacKey</span>(<span class="hljs-params"> 804 wrappedKey, 805 wrappingKey, 806 format = <span class="hljs-string">'jwk'</span>, 807 hash = <span class="hljs-string">'SHA-512'</span></span>) { 808 809 <span class="hljs-keyword">const</span> key = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">unwrapKey</span>( 810 format, 811 wrappedKey, 812 wrappingKey, 813 <span class="hljs-string">'AES-KW'</span>, 814 { <span class="hljs-attr">name</span>: <span class="hljs-string">'HMAC'</span>, hash }, 815 <span class="hljs-literal">true</span>, 816 [<span class="hljs-string">'sign'</span>, <span class="hljs-string">'verify'</span>]); 817 818 <span class="hljs-keyword">return</span> key; 819}</code> <button class="copy-button">copy</button></pre> 820<h4>Sign and verify<span><a class="mark" href="#sign-and-verify" id="sign-and-verify">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_sign_and_verify"></a></h4> 821<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 822 823<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">sign</span>(<span class="hljs-params">key, data</span>) { 824 <span class="hljs-keyword">const</span> ec = <span class="hljs-keyword">new</span> <span class="hljs-title class_">TextEncoder</span>(); 825 <span class="hljs-keyword">const</span> signature = 826 <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">sign</span>(<span class="hljs-string">'RSASSA-PKCS1-v1_5'</span>, key, ec.<span class="hljs-title function_">encode</span>(data)); 827 <span class="hljs-keyword">return</span> signature; 828} 829 830<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">verify</span>(<span class="hljs-params">key, signature, data</span>) { 831 <span class="hljs-keyword">const</span> ec = <span class="hljs-keyword">new</span> <span class="hljs-title class_">TextEncoder</span>(); 832 <span class="hljs-keyword">const</span> verified = 833 <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">verify</span>( 834 <span class="hljs-string">'RSASSA-PKCS1-v1_5'</span>, 835 key, 836 signature, 837 ec.<span class="hljs-title function_">encode</span>(data)); 838 <span class="hljs-keyword">return</span> verified; 839}</code> <button class="copy-button">copy</button></pre> 840<h4>Deriving bits and keys<span><a class="mark" href="#deriving-bits-and-keys" id="deriving-bits-and-keys">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_deriving_bits_and_keys"></a></h4> 841<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 842 843<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">pbkdf2</span>(<span class="hljs-params">pass, salt, iterations = <span class="hljs-number">1000</span>, length = <span class="hljs-number">256</span></span>) { 844 <span class="hljs-keyword">const</span> ec = <span class="hljs-keyword">new</span> <span class="hljs-title class_">TextEncoder</span>(); 845 <span class="hljs-keyword">const</span> key = <span class="hljs-keyword">await</span> subtle.importKey( 846 <span class="hljs-string">'raw'</span>, 847 ec.<span class="hljs-title function_">encode</span>(pass), 848 <span class="hljs-string">'PBKDF2'</span>, 849 <span class="hljs-literal">false</span>, 850 [<span class="hljs-string">'deriveBits'</span>]); 851 <span class="hljs-keyword">const</span> bits = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">deriveBits</span>({ 852 <span class="hljs-attr">name</span>: <span class="hljs-string">'PBKDF2'</span>, 853 <span class="hljs-attr">hash</span>: <span class="hljs-string">'SHA-512'</span>, 854 <span class="hljs-attr">salt</span>: ec.<span class="hljs-title function_">encode</span>(salt), 855 iterations, 856 }, key, length); 857 <span class="hljs-keyword">return</span> bits; 858} 859 860<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">pbkdf2Key</span>(<span class="hljs-params">pass, salt, iterations = <span class="hljs-number">1000</span>, length = <span class="hljs-number">256</span></span>) { 861 <span class="hljs-keyword">const</span> ec = <span class="hljs-keyword">new</span> <span class="hljs-title class_">TextEncoder</span>(); 862 <span class="hljs-keyword">const</span> keyMaterial = <span class="hljs-keyword">await</span> subtle.importKey( 863 <span class="hljs-string">'raw'</span>, 864 ec.<span class="hljs-title function_">encode</span>(pass), 865 <span class="hljs-string">'PBKDF2'</span>, 866 <span class="hljs-literal">false</span>, 867 [<span class="hljs-string">'deriveKey'</span>]); 868 <span class="hljs-keyword">const</span> key = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">deriveKey</span>({ 869 <span class="hljs-attr">name</span>: <span class="hljs-string">'PBKDF2'</span>, 870 <span class="hljs-attr">hash</span>: <span class="hljs-string">'SHA-512'</span>, 871 <span class="hljs-attr">salt</span>: ec.<span class="hljs-title function_">encode</span>(salt), 872 iterations, 873 }, keyMaterial, { 874 <span class="hljs-attr">name</span>: <span class="hljs-string">'AES-GCM'</span>, 875 <span class="hljs-attr">length</span>: <span class="hljs-number">256</span>, 876 }, <span class="hljs-literal">true</span>, [<span class="hljs-string">'encrypt'</span>, <span class="hljs-string">'decrypt'</span>]); 877 <span class="hljs-keyword">return</span> key; 878}</code> <button class="copy-button">copy</button></pre> 879<h4>Digest<span><a class="mark" href="#digest" id="digest">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_digest"></a></h4> 880<pre><code class="language-js"><span class="hljs-keyword">const</span> { subtle } = <span class="hljs-built_in">require</span>(<span class="hljs-string">'node:crypto'</span>).<span class="hljs-property">webcrypto</span>; 881 882<span class="hljs-keyword">async</span> <span class="hljs-keyword">function</span> <span class="hljs-title function_">digest</span>(<span class="hljs-params">data, algorithm = <span class="hljs-string">'SHA-512'</span></span>) { 883 <span class="hljs-keyword">const</span> ec = <span class="hljs-keyword">new</span> <span class="hljs-title class_">TextEncoder</span>(); 884 <span class="hljs-keyword">const</span> digest = <span class="hljs-keyword">await</span> subtle.<span class="hljs-title function_">digest</span>(algorithm, ec.<span class="hljs-title function_">encode</span>(data)); 885 <span class="hljs-keyword">return</span> digest; 886}</code> <button class="copy-button">copy</button></pre> 887</section><section><h3>Algorithm matrix<span><a class="mark" href="#algorithm-matrix" id="algorithm-matrix">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_algorithm_matrix"></a></h3> 888<p>The table details the algorithms supported by the Node.js Web Crypto API 889implementation and the APIs supported for each:</p> 890 891 892 893 894 895 896 897 898 899 900 901 902 903 904 905 906 907 908 909 910 911 912 913 914 915 916 917 918 919 920 921 922 923 924 925 926 927 928 929 930 931 932 933 934 935 936 937 938 939 940 941 942 943 944 945 946 947 948 949 950 951 952 953 954 955 956 957 958 959 960 961 962 963 964 965 966 967 968 969 970 971 972 973 974 975 976 977 978 979 980 981 982 983 984 985 986 987 988 989 990 991 992 993 994 995 996 997 998 999 1000 1001 1002 1003 1004 1005 1006 1007 1008 1009 1010 1011 1012 1013 1014 1015 1016 1017 1018 1019 1020 1021 1022 1023 1024 1025 1026 1027 1028 1029 1030 1031 1032 1033 1034 1035 1036 1037 1038 1039 1040 1041 1042 1043 1044 1045 1046 1047 1048 1049 1050 1051 1052 1053 1054 1055 1056 1057 1058 1059 1060 1061 1062 1063 1064 1065 1066 1067 1068 1069 1070 1071 1072 1073 1074 1075 1076 1077 1078 1079 1080 1081 1082 1083 1084 1085 1086 1087 1088 1089 1090 1091 1092 1093 1094 1095 1096 1097 1098 1099 1100 1101 1102 1103 1104 1105 1106 1107 1108 1109 1110 1111 1112 1113 1114 1115 1116 1117 1118 1119 1120 1121 1122 1123 1124 1125 1126 1127 1128 1129 1130 1131 1132 1133 1134 1135 1136 1137 1138 1139 1140 1141 1142 1143 1144 1145 1146 1147 1148 1149 1150 1151 1152 1153 1154 1155 1156 1157 1158 1159 1160 1161 1162 1163 1164 1165 1166 1167 1168 1169 1170 1171 1172 1173 1174 1175 1176 1177 1178 1179 1180 1181 1182 1183 1184 1185 1186 1187 1188 1189 1190 1191 1192 1193 1194 1195 1196 1197 1198 1199 1200 1201 1202 1203 1204 1205 1206 1207 1208 1209 1210<table><thead><tr><th>Algorithm</th><th><code>generateKey</code></th><th><code>exportKey</code></th><th><code>importKey</code></th><th><code>encrypt</code></th><th><code>decrypt</code></th><th><code>wrapKey</code></th><th><code>unwrapKey</code></th><th><code>deriveBits</code></th><th><code>deriveKey</code></th><th><code>sign</code></th><th><code>verify</code></th><th><code>digest</code></th></tr></thead><tbody><tr><td><code>'RSASSA-PKCS1-v1_5'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td></tr><tr><td><code>'RSA-PSS'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td></tr><tr><td><code>'RSA-OAEP'</code></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td><code>'ECDSA'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td></tr><tr><td><code>'Ed25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td></tr><tr><td><code>'Ed448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-2" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td></tr><tr><td><code>'ECDH'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td></tr><tr><td><code>'X25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-3" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td></tr><tr><td><code>'X448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-4" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td></tr><tr><td><code>'AES-CTR'</code></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td><code>'AES-CBC'</code></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td><code>'AES-GCM'</code></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td><code>'AES-KW'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td></tr><tr><td><code>'HMAC'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td></tr><tr><td><code>'HKDF'</code></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td></tr><tr><td><code>'PBKDF2'</code></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td></tr><tr><td><code>'SHA-1'</code></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td></tr><tr><td><code>'SHA-256'</code></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td></tr><tr><td><code>'SHA-384'</code></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td></tr><tr><td><code>'SHA-512'</code></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td></tr></tbody></table> 1211</section><section><h3>Class: <code>Crypto</code><span><a class="mark" href="#class-crypto" id="class-crypto">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_crypto"></a></h3> 1212<div class="api_metadata"> 1213<span>Added in: v15.0.0</span> 1214</div> 1215<p>Calling <code>require('node:crypto').webcrypto</code> returns an instance of the <code>Crypto</code> 1216class. <code>Crypto</code> is a singleton that provides access to the remainder of the 1217crypto API.</p> 1218<h4><code>crypto.subtle</code><span><a class="mark" href="#cryptosubtle" id="cryptosubtle">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_crypto_subtle"></a></h4> 1219<div class="api_metadata"> 1220<span>Added in: v15.0.0</span> 1221</div> 1222<ul> 1223<li>Type: <a href="webcrypto.html#class-subtlecrypto" class="type"><SubtleCrypto></a></li> 1224</ul> 1225<p>Provides access to the <code>SubtleCrypto</code> API.</p> 1226<h4><code>crypto.getRandomValues(typedArray)</code><span><a class="mark" href="#cryptogetrandomvaluestypedarray" id="cryptogetrandomvaluestypedarray">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_crypto_getrandomvalues_typedarray"></a></h4> 1227<div class="api_metadata"> 1228<span>Added in: v15.0.0</span> 1229</div> 1230<ul> 1231<li><code>typedArray</code> <a href="buffer.html#class-buffer" class="type"><Buffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a></li> 1232<li>Returns: <a href="buffer.html#class-buffer" class="type"><Buffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a></li> 1233</ul> 1234<p>Generates cryptographically strong random values. The given <code>typedArray</code> is 1235filled with random values, and a reference to <code>typedArray</code> is returned.</p> 1236<p>The given <code>typedArray</code> must be an integer-based instance of <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a>, 1237i.e. <code>Float32Array</code> and <code>Float64Array</code> are not accepted.</p> 1238<p>An error will be thrown if the given <code>typedArray</code> is larger than 65,536 bytes.</p> 1239<h4><code>crypto.randomUUID()</code><span><a class="mark" href="#cryptorandomuuid" id="cryptorandomuuid">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_crypto_randomuuid"></a></h4> 1240<div class="api_metadata"> 1241<span>Added in: v16.7.0</span> 1242</div> 1243<ul> 1244<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a></li> 1245</ul> 1246<p>Generates a random <a href="https://www.rfc-editor.org/rfc/rfc4122.txt">RFC 4122</a> version 4 UUID. The UUID is generated using a 1247cryptographic pseudorandom number generator.</p> 1248</section><section><h3>Class: <code>CryptoKey</code><span><a class="mark" href="#class-cryptokey" id="class-cryptokey">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_cryptokey"></a></h3> 1249<div class="api_metadata"> 1250<span>Added in: v15.0.0</span> 1251</div> 1252<h4><code>cryptoKey.algorithm</code><span><a class="mark" href="#cryptokeyalgorithm" id="cryptokeyalgorithm">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_cryptokey_algorithm"></a></h4> 1253<div class="api_metadata"> 1254<span>Added in: v15.0.0</span> 1255</div> 1256<!--lint disable maximum-line-length remark-lint--> 1257<ul> 1258<li>Type: <a href="webcrypto.html#class-aeskeygenparams" class="type"><AesKeyGenParams></a> | <a href="webcrypto.html#class-rsahashedkeygenparams" class="type"><RsaHashedKeyGenParams></a> | <a href="webcrypto.html#class-eckeygenparams" class="type"><EcKeyGenParams></a> | <a href="webcrypto.html#class-hmackeygenparams" class="type"><HmacKeyGenParams></a></li> 1259</ul> 1260<!--lint enable maximum-line-length remark-lint--> 1261<p>An object detailing the algorithm for which the key can be used along with 1262additional algorithm-specific parameters.</p> 1263<p>Read-only.</p> 1264<h4><code>cryptoKey.extractable</code><span><a class="mark" href="#cryptokeyextractable" id="cryptokeyextractable">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_cryptokey_extractable"></a></h4> 1265<div class="api_metadata"> 1266<span>Added in: v15.0.0</span> 1267</div> 1268<ul> 1269<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type"><boolean></a></li> 1270</ul> 1271<p>When <code>true</code>, the <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> can be extracted using either 1272<code>subtleCrypto.exportKey()</code> or <code>subtleCrypto.wrapKey()</code>.</p> 1273<p>Read-only.</p> 1274<h4><code>cryptoKey.type</code><span><a class="mark" href="#cryptokeytype" id="cryptokeytype">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_cryptokey_type"></a></h4> 1275<div class="api_metadata"> 1276<span>Added in: v15.0.0</span> 1277</div> 1278<ul> 1279<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> One of <code>'secret'</code>, <code>'private'</code>, or <code>'public'</code>.</li> 1280</ul> 1281<p>A string identifying whether the key is a symmetric (<code>'secret'</code>) or 1282asymmetric (<code>'private'</code> or <code>'public'</code>) key.</p> 1283<h4><code>cryptoKey.usages</code><span><a class="mark" href="#cryptokeyusages" id="cryptokeyusages">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_cryptokey_usages"></a></h4> 1284<div class="api_metadata"> 1285<span>Added in: v15.0.0</span> 1286</div> 1287<ul> 1288<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string[]></a></li> 1289</ul> 1290<p>An array of strings identifying the operations for which the 1291key may be used.</p> 1292<p>The possible usages are:</p> 1293<ul> 1294<li><code>'encrypt'</code> - The key may be used to encrypt data.</li> 1295<li><code>'decrypt'</code> - The key may be used to decrypt data.</li> 1296<li><code>'sign'</code> - The key may be used to generate digital signatures.</li> 1297<li><code>'verify'</code> - The key may be used to verify digital signatures.</li> 1298<li><code>'deriveKey'</code> - The key may be used to derive a new key.</li> 1299<li><code>'deriveBits'</code> - The key may be used to derive bits.</li> 1300<li><code>'wrapKey'</code> - The key may be used to wrap another key.</li> 1301<li><code>'unwrapKey'</code> - The key may be used to unwrap another key.</li> 1302</ul> 1303<p>Valid key usages depend on the key algorithm (identified by 1304<code>cryptokey.algorithm.name</code>).</p> 1305 1306 1307 1308 1309 1310 1311 1312 1313 1314 1315 1316 1317 1318 1319 1320 1321 1322 1323 1324 1325 1326 1327 1328 1329 1330 1331 1332 1333 1334 1335 1336 1337 1338 1339 1340 1341 1342 1343 1344 1345 1346 1347 1348 1349 1350 1351 1352 1353 1354 1355 1356 1357 1358 1359 1360 1361 1362 1363 1364 1365 1366 1367 1368 1369 1370 1371 1372 1373 1374 1375 1376 1377 1378 1379 1380 1381 1382 1383 1384 1385 1386 1387 1388 1389 1390 1391 1392 1393 1394 1395 1396 1397 1398 1399 1400 1401 1402 1403 1404 1405 1406 1407 1408 1409 1410 1411 1412 1413 1414 1415 1416 1417 1418 1419 1420 1421 1422 1423 1424 1425 1426 1427 1428 1429 1430 1431 1432 1433 1434 1435 1436 1437 1438 1439 1440 1441 1442 1443 1444 1445 1446 1447 1448 1449 1450 1451 1452 1453 1454 1455 1456 1457 1458 1459 1460 1461 1462 1463 1464 1465 1466 1467 1468 1469 1470 1471 1472 1473 1474 1475 1476 1477 1478 1479 1480 1481 1482 1483 1484 1485 1486 1487 1488 1489 1490 1491 1492 1493 1494 1495 1496 1497<table><thead><tr><th>Key Type</th><th><code>'encrypt'</code></th><th><code>'decrypt'</code></th><th><code>'sign'</code></th><th><code>'verify'</code></th><th><code>'deriveKey'</code></th><th><code>'deriveBits'</code></th><th><code>'wrapKey'</code></th><th><code>'unwrapKey'</code></th></tr></thead><tbody><tr><td><code>'AES-CBC'</code></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'AES-CTR'</code></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'AES-GCM'</code></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'AES-KW'</code></td><td></td><td></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'ECDH'</code></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td></tr><tr><td><code>'X25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-5" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td></tr><tr><td><code>'X448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-6" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td></tr><tr><td><code>'ECDSA'</code></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td></tr><tr><td><code>'Ed25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-7" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td></tr><tr><td><code>'Ed448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-8" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td></tr><tr><td><code>'HDKF'</code></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td></tr><tr><td><code>'HMAC'</code></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td></tr><tr><td><code>'PBKDF2'</code></td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td></tr><tr><td><code>'RSA-OAEP'</code></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'RSA-PSS'</code></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td></tr><tr><td><code>'RSASSA-PKCS1-v1_5'</code></td><td></td><td></td><td>✔</td><td>✔</td><td></td><td></td><td></td><td></td></tr></tbody></table> 1498</section><section><h3>Class: <code>CryptoKeyPair</code><span><a class="mark" href="#class-cryptokeypair" id="class-cryptokeypair">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_cryptokeypair"></a></h3> 1499<div class="api_metadata"> 1500<span>Added in: v15.0.0</span> 1501</div> 1502<p>The <code>CryptoKeyPair</code> is a simple dictionary object with <code>publicKey</code> and 1503<code>privateKey</code> properties, representing an asymmetric key pair.</p> 1504<h4><code>cryptoKeyPair.privateKey</code><span><a class="mark" href="#cryptokeypairprivatekey" id="cryptokeypairprivatekey">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_cryptokeypair_privatekey"></a></h4> 1505<div class="api_metadata"> 1506<span>Added in: v15.0.0</span> 1507</div> 1508<ul> 1509<li>Type: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> A <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> whose <code>type</code> will be <code>'private'</code>.</li> 1510</ul> 1511<h4><code>cryptoKeyPair.publicKey</code><span><a class="mark" href="#cryptokeypairpublickey" id="cryptokeypairpublickey">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_cryptokeypair_publickey"></a></h4> 1512<div class="api_metadata"> 1513<span>Added in: v15.0.0</span> 1514</div> 1515<ul> 1516<li>Type: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> A <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> whose <code>type</code> will be <code>'public'</code>.</li> 1517</ul> 1518</section><section><h3>Class: <code>SubtleCrypto</code><span><a class="mark" href="#class-subtlecrypto" id="class-subtlecrypto">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_subtlecrypto"></a></h3> 1519<div class="api_metadata"> 1520<span>Added in: v15.0.0</span> 1521</div> 1522<h4><code>subtle.decrypt(algorithm, key, data)</code><span><a class="mark" href="#subtledecryptalgorithm-key-data" id="subtledecryptalgorithm-key-data">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_decrypt_algorithm_key_data"></a></h4> 1523<div class="api_metadata"> 1524<span>Added in: v15.0.0</span> 1525</div> 1526<ul> 1527<li><code>algorithm</code>: <a href="webcrypto.html#class-rsaoaepparams" class="type"><RsaOaepParams></a> | <a href="webcrypto.html#class-aesctrparams" class="type"><AesCtrParams></a> | <a href="webcrypto.html#class-aescbcparams" class="type"><AesCbcParams></a> | <a href="webcrypto.html#class-aesgcmparams" class="type"><AesGcmParams></a></li> 1528<li><code>key</code>: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 1529<li><code>data</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 1530<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a></li> 1531</ul> 1532<p>Using the method and parameters specified in <code>algorithm</code> and the keying 1533material provided by <code>key</code>, <code>subtle.decrypt()</code> attempts to decipher the 1534provided <code>data</code>. If successful, the returned promise will be resolved with 1535an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> containing the plaintext result.</p> 1536<p>The algorithms currently supported include:</p> 1537<ul> 1538<li><code>'RSA-OAEP'</code></li> 1539<li><code>'AES-CTR'</code></li> 1540<li><code>'AES-CBC'</code></li> 1541<li><code>'AES-GCM</code>'</li> 1542</ul> 1543<h4><code>subtle.deriveBits(algorithm, baseKey, length)</code><span><a class="mark" href="#subtlederivebitsalgorithm-basekey-length" id="subtlederivebitsalgorithm-basekey-length">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_derivebits_algorithm_basekey_length"></a></h4> 1544<div class="api_metadata"> 1545<details class="changelog"><summary>History</summary> 1546<table> 1547<tbody><tr><th>Version</th><th>Changes</th></tr> 1548<tr><td>v18.4.0</td> 1549<td><p>Added <code>'X25519'</code>, and <code>'X448'</code> algorithms.</p></td></tr> 1550<tr><td>v15.0.0</td> 1551<td><p><span>Added in: v15.0.0</span></p></td></tr> 1552</tbody></table> 1553</details> 1554</div> 1555<!--lint disable maximum-line-length remark-lint--> 1556<ul> 1557<li><code>algorithm</code>: <a href="webcrypto.html#class-algorithmidentifier" class="type"><AlgorithmIdentifier></a> | <a href="webcrypto.html#class-ecdhkeyderiveparams" class="type"><EcdhKeyDeriveParams></a> | <a href="webcrypto.html#class-hkdfparams" class="type"><HkdfParams></a> | <a href="webcrypto.html#class-pbkdf2params" class="type"><Pbkdf2Params></a></li> 1558<li><code>baseKey</code>: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 1559<li><code>length</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type"><number></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Null_type" class="type"><null></a></li> 1560<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a></li> 1561</ul> 1562<!--lint enable maximum-line-length remark-lint--> 1563<p>Using the method and parameters specified in <code>algorithm</code> and the keying 1564material provided by <code>baseKey</code>, <code>subtle.deriveBits()</code> attempts to generate 1565<code>length</code> bits.</p> 1566<p>The Node.js implementation requires that when <code>length</code> is a 1567number it must be multiple of <code>8</code>.</p> 1568<p>When <code>length</code> is <code>null</code> the maximum number of bits for a given algorithm is 1569generated. This is allowed for the <code>'ECDH'</code>, <code>'X25519'</code>, and <code>'X448'</code> 1570algorithms.</p> 1571<p>If successful, the returned promise will be resolved with an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> 1572containing the generated data.</p> 1573<p>The algorithms currently supported include:</p> 1574<ul> 1575<li><code>'ECDH'</code></li> 1576<li><code>'X25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-9" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 1577<li><code>'X448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-10" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 1578<li><code>'HKDF'</code></li> 1579<li><code>'PBKDF2'</code></li> 1580</ul> 1581<h4><code>subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)</code><span><a class="mark" href="#subtlederivekeyalgorithm-basekey-derivedkeyalgorithm-extractable-keyusages" id="subtlederivekeyalgorithm-basekey-derivedkeyalgorithm-extractable-keyusages">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_derivekey_algorithm_basekey_derivedkeyalgorithm_extractable_keyusages"></a></h4> 1582<div class="api_metadata"> 1583<details class="changelog"><summary>History</summary> 1584<table> 1585<tbody><tr><th>Version</th><th>Changes</th></tr> 1586<tr><td>v18.4.0</td> 1587<td><p>Added <code>'X25519'</code>, and <code>'X448'</code> algorithms.</p></td></tr> 1588<tr><td>v15.0.0</td> 1589<td><p><span>Added in: v15.0.0</span></p></td></tr> 1590</tbody></table> 1591</details> 1592</div> 1593<!--lint disable maximum-line-length remark-lint--> 1594<ul> 1595<li><code>algorithm</code>: <a href="webcrypto.html#class-algorithmidentifier" class="type"><AlgorithmIdentifier></a> | <a href="webcrypto.html#class-ecdhkeyderiveparams" class="type"><EcdhKeyDeriveParams></a> | <a href="webcrypto.html#class-hkdfparams" class="type"><HkdfParams></a> | <a href="webcrypto.html#class-pbkdf2params" class="type"><Pbkdf2Params></a></li> 1596<li><code>baseKey</code>: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 1597<li><code>derivedKeyAlgorithm</code>: <a href="webcrypto.html#class-hmackeygenparams" class="type"><HmacKeyGenParams></a> | <a href="webcrypto.html#class-aeskeygenparams" class="type"><AesKeyGenParams></a></li> 1598<li><code>extractable</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type"><boolean></a></li> 1599<li><code>keyUsages</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string[]></a> See <a href="#cryptokeyusages">Key usages</a>.</li> 1600<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 1601</ul> 1602<!--lint enable maximum-line-length remark-lint--> 1603<p>Using the method and parameters specified in <code>algorithm</code>, and the keying 1604material provided by <code>baseKey</code>, <code>subtle.deriveKey()</code> attempts to generate 1605a new <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> based on the method and parameters in <code>derivedKeyAlgorithm</code>.</p> 1606<p>Calling <code>subtle.deriveKey()</code> is equivalent to calling <code>subtle.deriveBits()</code> to 1607generate raw keying material, then passing the result into the 1608<code>subtle.importKey()</code> method using the <code>deriveKeyAlgorithm</code>, <code>extractable</code>, and 1609<code>keyUsages</code> parameters as input.</p> 1610<p>The algorithms currently supported include:</p> 1611<ul> 1612<li><code>'ECDH'</code></li> 1613<li><code>'X25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-11" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 1614<li><code>'X448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-12" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 1615<li><code>'HKDF'</code></li> 1616<li><code>'PBKDF2'</code></li> 1617</ul> 1618<h4><code>subtle.digest(algorithm, data)</code><span><a class="mark" href="#subtledigestalgorithm-data" id="subtledigestalgorithm-data">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_digest_algorithm_data"></a></h4> 1619<div class="api_metadata"> 1620<span>Added in: v15.0.0</span> 1621</div> 1622<ul> 1623<li><code>algorithm</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a></li> 1624<li><code>data</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 1625<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a></li> 1626</ul> 1627<p>Using the method identified by <code>algorithm</code>, <code>subtle.digest()</code> attempts to 1628generate a digest of <code>data</code>. If successful, the returned promise is resolved 1629with an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> containing the computed digest.</p> 1630<p>If <code>algorithm</code> is provided as a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a>, it must be one of:</p> 1631<ul> 1632<li><code>'SHA-1'</code></li> 1633<li><code>'SHA-256'</code></li> 1634<li><code>'SHA-384'</code></li> 1635<li><code>'SHA-512'</code></li> 1636</ul> 1637<p>If <code>algorithm</code> is provided as an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a>, it must have a <code>name</code> property 1638whose value is one of the above.</p> 1639<h4><code>subtle.encrypt(algorithm, key, data)</code><span><a class="mark" href="#subtleencryptalgorithm-key-data" id="subtleencryptalgorithm-key-data">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_encrypt_algorithm_key_data"></a></h4> 1640<div class="api_metadata"> 1641<span>Added in: v15.0.0</span> 1642</div> 1643<ul> 1644<li><code>algorithm</code>: <a href="webcrypto.html#class-rsaoaepparams" class="type"><RsaOaepParams></a> | <a href="webcrypto.html#class-aesctrparams" class="type"><AesCtrParams></a> | <a href="webcrypto.html#class-aescbcparams" class="type"><AesCbcParams></a> | <a href="webcrypto.html#class-aesgcmparams" class="type"><AesGcmParams></a></li> 1645<li><code>key</code>: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 1646<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a></li> 1647</ul> 1648<p>Using the method and parameters specified by <code>algorithm</code> and the keying 1649material provided by <code>key</code>, <code>subtle.encrypt()</code> attempts to encipher <code>data</code>. 1650If successful, the returned promise is resolved with an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> 1651containing the encrypted result.</p> 1652<p>The algorithms currently supported include:</p> 1653<ul> 1654<li><code>'RSA-OAEP'</code></li> 1655<li><code>'AES-CTR'</code></li> 1656<li><code>'AES-CBC'</code></li> 1657<li><code>'AES-GCM</code>'</li> 1658</ul> 1659<h4><code>subtle.exportKey(format, key)</code><span><a class="mark" href="#subtleexportkeyformat-key" id="subtleexportkeyformat-key">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_exportkey_format_key"></a></h4> 1660<div class="api_metadata"> 1661<details class="changelog"><summary>History</summary> 1662<table> 1663<tbody><tr><th>Version</th><th>Changes</th></tr> 1664<tr><td>v18.4.0</td> 1665<td><p>Added <code>'Ed25519'</code>, <code>'Ed448'</code>, <code>'X25519'</code>, and <code>'X448'</code> algorithms.</p></td></tr> 1666<tr><td>v15.9.0</td> 1667<td><p>Removed <code>'NODE-DSA'</code> JWK export.</p></td></tr> 1668<tr><td>v15.0.0</td> 1669<td><p><span>Added in: v15.0.0</span></p></td></tr> 1670</tbody></table> 1671</details> 1672</div> 1673<ul> 1674<li><code>format</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'raw'</code>, <code>'pkcs8'</code>, <code>'spki'</code>, or <code>'jwk'</code>.</li> 1675<li><code>key</code>: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 1676<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a>.</li> 1677</ul> 1678<p>Exports the given key into the specified format, if supported.</p> 1679<p>If the <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> is not extractable, the returned promise will reject.</p> 1680<p>When <code>format</code> is either <code>'pkcs8'</code> or <code>'spki'</code> and the export is successful, 1681the returned promise will be resolved with an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> containing the 1682exported key data.</p> 1683<p>When <code>format</code> is <code>'jwk'</code> and the export is successful, the returned promise 1684will be resolved with a JavaScript object conforming to the <a href="https://tools.ietf.org/html/rfc7517">JSON Web Key</a> 1685specification.</p> 1686 1687 1688 1689 1690 1691 1692 1693 1694 1695 1696 1697 1698 1699 1700 1701 1702 1703 1704 1705 1706 1707 1708 1709 1710 1711 1712 1713 1714 1715 1716 1717 1718 1719 1720 1721 1722 1723 1724 1725 1726 1727 1728 1729 1730 1731 1732 1733 1734 1735 1736 1737 1738 1739 1740 1741 1742 1743 1744 1745 1746 1747 1748 1749 1750 1751 1752 1753 1754 1755 1756 1757 1758 1759 1760 1761 1762 1763 1764 1765 1766 1767 1768 1769 1770 1771 1772 1773 1774 1775 1776 1777 1778 1779 1780 1781 1782 1783 1784 1785 1786 1787 1788 1789 1790 1791 1792 1793 1794 1795 1796<table><thead><tr><th>Key Type</th><th><code>'spki'</code></th><th><code>'pkcs8'</code></th><th><code>'jwk'</code></th><th><code>'raw'</code></th></tr></thead><tbody><tr><td><code>'AES-CBC'</code></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'AES-CTR'</code></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'AES-GCM'</code></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'AES-KW'</code></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'ECDH'</code></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td><code>'ECDSA'</code></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td><code>'Ed25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-13" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td><code>'Ed448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-14" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td><code>'HDKF'</code></td><td></td><td></td><td></td><td></td></tr><tr><td><code>'HMAC'</code></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'PBKDF2'</code></td><td></td><td></td><td></td><td></td></tr><tr><td><code>'RSA-OAEP'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td></tr><tr><td><code>'RSA-PSS'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td></tr><tr><td><code>'RSASSA-PKCS1-v1_5'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td></tr></tbody></table> 1797<h4><code>subtle.generateKey(algorithm, extractable, keyUsages)</code><span><a class="mark" href="#subtlegeneratekeyalgorithm-extractable-keyusages" id="subtlegeneratekeyalgorithm-extractable-keyusages">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_generatekey_algorithm_extractable_keyusages"></a></h4> 1798<div class="api_metadata"> 1799<span>Added in: v15.0.0</span> 1800</div> 1801<!--lint disable maximum-line-length remark-lint--> 1802<ul> 1803<li><code>algorithm</code>: <a href="webcrypto.html#class-algorithmidentifier" class="type"><AlgorithmIdentifier></a> | <a href="webcrypto.html#class-rsahashedkeygenparams" class="type"><RsaHashedKeyGenParams></a> | <a href="webcrypto.html#class-eckeygenparams" class="type"><EcKeyGenParams></a> | <a href="webcrypto.html#class-hmackeygenparams" class="type"><HmacKeyGenParams></a> | <a href="webcrypto.html#class-aeskeygenparams" class="type"><AesKeyGenParams></a></li> 1804</ul> 1805<!--lint enable maximum-line-length remark-lint--> 1806<ul> 1807<li><code>extractable</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type"><boolean></a></li> 1808<li><code>keyUsages</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string[]></a> See <a href="#cryptokeyusages">Key usages</a>.</li> 1809<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> | <a href="webcrypto.html#class-cryptokeypair" class="type"><CryptoKeyPair></a></li> 1810</ul> 1811<p>Using the method and parameters provided in <code>algorithm</code>, <code>subtle.generateKey()</code> 1812attempts to generate new keying material. Depending the method used, the method 1813may generate either a single <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> or a <a href="webcrypto.html#class-cryptokeypair" class="type"><CryptoKeyPair></a>.</p> 1814<p>The <a href="webcrypto.html#class-cryptokeypair" class="type"><CryptoKeyPair></a> (public and private key) generating algorithms supported 1815include:</p> 1816<ul> 1817<li><code>'RSASSA-PKCS1-v1_5'</code></li> 1818<li><code>'RSA-PSS'</code></li> 1819<li><code>'RSA-OAEP'</code></li> 1820<li><code>'ECDSA'</code></li> 1821<li><code>'Ed25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-15" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 1822<li><code>'Ed448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-16" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 1823<li><code>'ECDH'</code></li> 1824<li><code>'X25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-17" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 1825<li><code>'X448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-18" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 1826</ul> 1827<p>The <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> (secret key) generating algorithms supported include:</p> 1828<ul> 1829<li><code>'HMAC'</code></li> 1830<li><code>'AES-CTR'</code></li> 1831<li><code>'AES-CBC'</code></li> 1832<li><code>'AES-GCM'</code></li> 1833<li><code>'AES-KW'</code></li> 1834</ul> 1835<h4><code>subtle.importKey(format, keyData, algorithm, extractable, keyUsages)</code><span><a class="mark" href="#subtleimportkeyformat-keydata-algorithm-extractable-keyusages" id="subtleimportkeyformat-keydata-algorithm-extractable-keyusages">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_importkey_format_keydata_algorithm_extractable_keyusages"></a></h4> 1836<div class="api_metadata"> 1837<details class="changelog"><summary>History</summary> 1838<table> 1839<tbody><tr><th>Version</th><th>Changes</th></tr> 1840<tr><td>v18.4.0</td> 1841<td><p>Added <code>'Ed25519'</code>, <code>'Ed448'</code>, <code>'X25519'</code>, and <code>'X448'</code> algorithms.</p></td></tr> 1842<tr><td>v15.9.0</td> 1843<td><p>Removed <code>'NODE-DSA'</code> JWK import.</p></td></tr> 1844<tr><td>v15.0.0</td> 1845<td><p><span>Added in: v15.0.0</span></p></td></tr> 1846</tbody></table> 1847</details> 1848</div> 1849<ul> 1850<li><code>format</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'raw'</code>, <code>'pkcs8'</code>, <code>'spki'</code>, or <code>'jwk'</code>.</li> 1851<li><code>keyData</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a></li> 1852</ul> 1853<!--lint disable maximum-line-length remark-lint--> 1854<ul> 1855<li><code>algorithm</code>: <a href="webcrypto.html#class-algorithmidentifier" class="type"><AlgorithmIdentifier></a> | <a href="webcrypto.html#class-rsahashedimportparams" class="type"><RsaHashedImportParams></a> | <a href="webcrypto.html#class-eckeyimportparams" class="type"><EcKeyImportParams></a> | <a href="webcrypto.html#class-hmacimportparams" class="type"><HmacImportParams></a></li> 1856</ul> 1857<!--lint enable maximum-line-length remark-lint--> 1858<ul> 1859<li><code>extractable</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type"><boolean></a></li> 1860<li><code>keyUsages</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string[]></a> See <a href="#cryptokeyusages">Key usages</a>.</li> 1861<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 1862</ul> 1863<p>The <code>subtle.importKey()</code> method attempts to interpret the provided <code>keyData</code> 1864as the given <code>format</code> to create a <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> instance using the provided 1865<code>algorithm</code>, <code>extractable</code>, and <code>keyUsages</code> arguments. If the import is 1866successful, the returned promise will be resolved with the created <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a>.</p> 1867<p>If importing a <code>'PBKDF2'</code> key, <code>extractable</code> must be <code>false</code>.</p> 1868<p>The algorithms currently supported include:</p> 1869 1870 1871 1872 1873 1874 1875 1876 1877 1878 1879 1880 1881 1882 1883 1884 1885 1886 1887 1888 1889 1890 1891 1892 1893 1894 1895 1896 1897 1898 1899 1900 1901 1902 1903 1904 1905 1906 1907 1908 1909 1910 1911 1912 1913 1914 1915 1916 1917 1918 1919 1920 1921 1922 1923 1924 1925 1926 1927 1928 1929 1930 1931 1932 1933 1934 1935 1936 1937 1938 1939 1940 1941 1942 1943 1944 1945 1946 1947 1948 1949 1950 1951 1952 1953 1954 1955 1956 1957 1958 1959 1960 1961 1962 1963 1964 1965 1966 1967 1968 1969 1970 1971 1972 1973 1974 1975 1976 1977 1978 1979 1980 1981 1982 1983 1984 1985 1986 1987 1988 1989 1990 1991 1992 1993<table><thead><tr><th>Key Type</th><th><code>'spki'</code></th><th><code>'pkcs8'</code></th><th><code>'jwk'</code></th><th><code>'raw'</code></th></tr></thead><tbody><tr><td><code>'AES-CBC'</code></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'AES-CTR'</code></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'AES-GCM'</code></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'AES-KW'</code></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'ECDH'</code></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td><code>'X25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-19" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td><code>'X448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-20" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td><code>'ECDSA'</code></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td><code>'Ed25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-21" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td><code>'Ed448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-22" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></td><td>✔</td><td>✔</td><td>✔</td><td>✔</td></tr><tr><td><code>'HDKF'</code></td><td></td><td></td><td></td><td>✔</td></tr><tr><td><code>'HMAC'</code></td><td></td><td></td><td>✔</td><td>✔</td></tr><tr><td><code>'PBKDF2'</code></td><td></td><td></td><td></td><td>✔</td></tr><tr><td><code>'RSA-OAEP'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td></tr><tr><td><code>'RSA-PSS'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td></tr><tr><td><code>'RSASSA-PKCS1-v1_5'</code></td><td>✔</td><td>✔</td><td>✔</td><td></td></tr></tbody></table> 1994<h4><code>subtle.sign(algorithm, key, data)</code><span><a class="mark" href="#subtlesignalgorithm-key-data" id="subtlesignalgorithm-key-data">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_sign_algorithm_key_data"></a></h4> 1995<div class="api_metadata"> 1996<details class="changelog"><summary>History</summary> 1997<table> 1998<tbody><tr><th>Version</th><th>Changes</th></tr> 1999<tr><td>v18.4.0</td> 2000<td><p>Added <code>'Ed25519'</code>, and <code>'Ed448'</code> algorithms.</p></td></tr> 2001<tr><td>v15.0.0</td> 2002<td><p><span>Added in: v15.0.0</span></p></td></tr> 2003</tbody></table> 2004</details> 2005</div> 2006<!--lint disable maximum-line-length remark-lint--> 2007<ul> 2008<li><code>algorithm</code>: <a href="webcrypto.html#class-algorithmidentifier" class="type"><AlgorithmIdentifier></a> | <a href="webcrypto.html#class-rsapssparams" class="type"><RsaPssParams></a> | <a href="webcrypto.html#class-ecdsaparams" class="type"><EcdsaParams></a> | <a href="webcrypto.html#class-ed448params" class="type"><Ed448Params></a></li> 2009<li><code>key</code>: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 2010<li><code>data</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2011<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a></li> 2012</ul> 2013<!--lint enable maximum-line-length remark-lint--> 2014<p>Using the method and parameters given by <code>algorithm</code> and the keying material 2015provided by <code>key</code>, <code>subtle.sign()</code> attempts to generate a cryptographic 2016signature of <code>data</code>. If successful, the returned promise is resolved with 2017an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> containing the generated signature.</p> 2018<p>The algorithms currently supported include:</p> 2019<ul> 2020<li><code>'RSASSA-PKCS1-v1_5'</code></li> 2021<li><code>'RSA-PSS'</code></li> 2022<li><code>'ECDSA'</code></li> 2023<li><code>'Ed25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-23" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 2024<li><code>'Ed448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-24" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 2025<li><code>'HMAC'</code></li> 2026</ul> 2027<h4><code>subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)</code><span><a class="mark" href="#subtleunwrapkeyformat-wrappedkey-unwrappingkey-unwrapalgo-unwrappedkeyalgo-extractable-keyusages" id="subtleunwrapkeyformat-wrappedkey-unwrappingkey-unwrapalgo-unwrappedkeyalgo-extractable-keyusages">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_unwrapkey_format_wrappedkey_unwrappingkey_unwrapalgo_unwrappedkeyalgo_extractable_keyusages"></a></h4> 2028<div class="api_metadata"> 2029<span>Added in: v15.0.0</span> 2030</div> 2031<ul> 2032<li><code>format</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'raw'</code>, <code>'pkcs8'</code>, <code>'spki'</code>, or <code>'jwk'</code>.</li> 2033<li><code>wrappedKey</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2034<li><code>unwrappingKey</code>: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 2035</ul> 2036<!--lint disable maximum-line-length remark-lint--> 2037<ul> 2038<li><code>unwrapAlgo</code>: <a href="webcrypto.html#class-algorithmidentifier" class="type"><AlgorithmIdentifier></a> | <a href="webcrypto.html#class-rsaoaepparams" class="type"><RsaOaepParams></a> | <a href="webcrypto.html#class-aesctrparams" class="type"><AesCtrParams></a> | <a href="webcrypto.html#class-aescbcparams" class="type"><AesCbcParams></a> | <a href="webcrypto.html#class-aesgcmparams" class="type"><AesGcmParams></a></li> 2039<li><code>unwrappedKeyAlgo</code>: <a href="webcrypto.html#class-algorithmidentifier" class="type"><AlgorithmIdentifier></a> | <a href="webcrypto.html#class-rsahashedimportparams" class="type"><RsaHashedImportParams></a> | <a href="webcrypto.html#class-eckeyimportparams" class="type"><EcKeyImportParams></a> | <a href="webcrypto.html#class-hmacimportparams" class="type"><HmacImportParams></a></li> 2040</ul> 2041<!--lint enable maximum-line-length remark-lint--> 2042<ul> 2043<li><code>extractable</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type"><boolean></a></li> 2044<li><code>keyUsages</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string[]></a> See <a href="#cryptokeyusages">Key usages</a>.</li> 2045<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 2046</ul> 2047<p>In cryptography, "wrapping a key" refers to exporting and then encrypting the 2048keying material. The <code>subtle.unwrapKey()</code> method attempts to decrypt a wrapped 2049key and create a <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> instance. It is equivalent to calling 2050<code>subtle.decrypt()</code> first on the encrypted key data (using the <code>wrappedKey</code>, 2051<code>unwrapAlgo</code>, and <code>unwrappingKey</code> arguments as input) then passing the results 2052in to the <code>subtle.importKey()</code> method using the <code>unwrappedKeyAlgo</code>, 2053<code>extractable</code>, and <code>keyUsages</code> arguments as inputs. If successful, the returned 2054promise is resolved with a <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a> object.</p> 2055<p>The wrapping algorithms currently supported include:</p> 2056<ul> 2057<li><code>'RSA-OAEP'</code></li> 2058<li><code>'AES-CTR'</code></li> 2059<li><code>'AES-CBC'</code></li> 2060<li><code>'AES-GCM'</code></li> 2061<li><code>'AES-KW'</code></li> 2062</ul> 2063<p>The unwrapped key algorithms supported include:</p> 2064<ul> 2065<li><code>'RSASSA-PKCS1-v1_5'</code></li> 2066<li><code>'RSA-PSS'</code></li> 2067<li><code>'RSA-OAEP'</code></li> 2068<li><code>'ECDSA'</code></li> 2069<li><code>'Ed25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-25" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 2070<li><code>'Ed448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-26" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 2071<li><code>'ECDH'</code></li> 2072<li><code>'X25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-27" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 2073<li><code>'X448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-28" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 2074<li><code>'HMAC'</code></li> 2075<li><code>'AES-CTR'</code></li> 2076<li><code>'AES-CBC'</code></li> 2077<li><code>'AES-GCM'</code></li> 2078<li><code>'AES-KW'</code></li> 2079</ul> 2080<h4><code>subtle.verify(algorithm, key, signature, data)</code><span><a class="mark" href="#subtleverifyalgorithm-key-signature-data" id="subtleverifyalgorithm-key-signature-data">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_verify_algorithm_key_signature_data"></a></h4> 2081<div class="api_metadata"> 2082<details class="changelog"><summary>History</summary> 2083<table> 2084<tbody><tr><th>Version</th><th>Changes</th></tr> 2085<tr><td>v18.4.0</td> 2086<td><p>Added <code>'Ed25519'</code>, and <code>'Ed448'</code> algorithms.</p></td></tr> 2087<tr><td>v15.0.0</td> 2088<td><p><span>Added in: v15.0.0</span></p></td></tr> 2089</tbody></table> 2090</details> 2091</div> 2092<!--lint disable maximum-line-length remark-lint--> 2093<ul> 2094<li><code>algorithm</code>: <a href="webcrypto.html#class-algorithmidentifier" class="type"><AlgorithmIdentifier></a> | <a href="webcrypto.html#class-rsapssparams" class="type"><RsaPssParams></a> | <a href="webcrypto.html#class-ecdsaparams" class="type"><EcdsaParams></a> | <a href="webcrypto.html#class-ed448params" class="type"><Ed448Params></a></li> 2095<li><code>key</code>: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 2096<li><code>signature</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2097<li><code>data</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2098<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Boolean_type" class="type"><boolean></a></li> 2099</ul> 2100<!--lint enable maximum-line-length remark-lint--> 2101<p>Using the method and parameters given in <code>algorithm</code> and the keying material 2102provided by <code>key</code>, <code>subtle.verify()</code> attempts to verify that <code>signature</code> is 2103a valid cryptographic signature of <code>data</code>. The returned promise is resolved 2104with either <code>true</code> or <code>false</code>.</p> 2105<p>The algorithms currently supported include:</p> 2106<ul> 2107<li><code>'RSASSA-PKCS1-v1_5'</code></li> 2108<li><code>'RSA-PSS'</code></li> 2109<li><code>'ECDSA'</code></li> 2110<li><code>'Ed25519'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-29" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 2111<li><code>'Ed448'</code> <span class="experimental-inline"></span><sup><a href="#user-content-fn-1" id="user-content-fnref-1-30" data-footnote-ref="" aria-describedby="footnote-label">1</a></sup></li> 2112<li><code>'HMAC'</code></li> 2113</ul> 2114<h4><code>subtle.wrapKey(format, key, wrappingKey, wrapAlgo)</code><span><a class="mark" href="#subtlewrapkeyformat-key-wrappingkey-wrapalgo" id="subtlewrapkeyformat-key-wrappingkey-wrapalgo">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_subtle_wrapkey_format_key_wrappingkey_wrapalgo"></a></h4> 2115<div class="api_metadata"> 2116<span>Added in: v15.0.0</span> 2117</div> 2118<!--lint disable maximum-line-length remark-lint--> 2119<ul> 2120<li><code>format</code>: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'raw'</code>, <code>'pkcs8'</code>, <code>'spki'</code>, or <code>'jwk'</code>.</li> 2121<li><code>key</code>: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 2122<li><code>wrappingKey</code>: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 2123<li><code>wrapAlgo</code>: <a href="webcrypto.html#class-algorithmidentifier" class="type"><AlgorithmIdentifier></a> | <a href="webcrypto.html#class-rsaoaepparams" class="type"><RsaOaepParams></a> | <a href="webcrypto.html#class-aesctrparams" class="type"><AesCtrParams></a> | <a href="webcrypto.html#class-aescbcparams" class="type"><AesCbcParams></a> | <a href="webcrypto.html#class-aesgcmparams" class="type"><AesGcmParams></a></li> 2124<li>Returns: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Promise" class="type"><Promise></a> containing <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a></li> 2125</ul> 2126<!--lint enable maximum-line-length remark-lint--> 2127<p>In cryptography, "wrapping a key" refers to exporting and then encrypting the 2128keying material. The <code>subtle.wrapKey()</code> method exports the keying material into 2129the format identified by <code>format</code>, then encrypts it using the method and 2130parameters specified by <code>wrapAlgo</code> and the keying material provided by 2131<code>wrappingKey</code>. It is the equivalent to calling <code>subtle.exportKey()</code> using 2132<code>format</code> and <code>key</code> as the arguments, then passing the result to the 2133<code>subtle.encrypt()</code> method using <code>wrappingKey</code> and <code>wrapAlgo</code> as inputs. If 2134successful, the returned promise will be resolved with an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> 2135containing the encrypted key data.</p> 2136<p>The wrapping algorithms currently supported include:</p> 2137<ul> 2138<li><code>'RSA-OAEP'</code></li> 2139<li><code>'AES-CTR'</code></li> 2140<li><code>'AES-CBC'</code></li> 2141<li><code>'AES-GCM'</code></li> 2142<li><code>'AES-KW'</code></li> 2143</ul> 2144</section><section><h3>Algorithm parameters<span><a class="mark" href="#algorithm-parameters" id="algorithm-parameters">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_algorithm_parameters"></a></h3> 2145<p>The algorithm parameter objects define the methods and parameters used by 2146the various <a href="webcrypto.html#class-subtlecrypto" class="type"><SubtleCrypto></a> methods. While described here as "classes", they 2147are simple JavaScript dictionary objects.</p> 2148<h4>Class: <code>AlgorithmIdentifier</code><span><a class="mark" href="#class-algorithmidentifier" id="class-algorithmidentifier">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_algorithmidentifier"></a></h4> 2149<div class="api_metadata"> 2150<span>Added in: v18.4.0</span> 2151</div> 2152<h5><code>algorithmIdentifier.name</code><span><a class="mark" href="#algorithmidentifiername" id="algorithmidentifiername">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_algorithmidentifier_name"></a></h5> 2153<div class="api_metadata"> 2154<span>Added in: v18.4.0</span> 2155</div> 2156<ul> 2157<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a></li> 2158</ul> 2159<h4>Class: <code>AesCbcParams</code><span><a class="mark" href="#class-aescbcparams" id="class-aescbcparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_aescbcparams"></a></h4> 2160<div class="api_metadata"> 2161<span>Added in: v15.0.0</span> 2162</div> 2163<h5><code>aesCbcParams.iv</code><span><a class="mark" href="#aescbcparamsiv" id="aescbcparamsiv">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aescbcparams_iv"></a></h5> 2164<div class="api_metadata"> 2165<span>Added in: v15.0.0</span> 2166</div> 2167<ul> 2168<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2169</ul> 2170<p>Provides the initialization vector. It must be exactly 16-bytes in length 2171and should be unpredictable and cryptographically random.</p> 2172<h5><code>aesCbcParams.name</code><span><a class="mark" href="#aescbcparamsname" id="aescbcparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aescbcparams_name"></a></h5> 2173<div class="api_metadata"> 2174<span>Added in: v15.0.0</span> 2175</div> 2176<ul> 2177<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'AES-CBC'</code>.</li> 2178</ul> 2179<h4>Class: <code>AesCtrParams</code><span><a class="mark" href="#class-aesctrparams" id="class-aesctrparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_aesctrparams"></a></h4> 2180<div class="api_metadata"> 2181<span>Added in: v15.0.0</span> 2182</div> 2183<h5><code>aesCtrParams.counter</code><span><a class="mark" href="#aesctrparamscounter" id="aesctrparamscounter">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aesctrparams_counter"></a></h5> 2184<div class="api_metadata"> 2185<span>Added in: v15.0.0</span> 2186</div> 2187<ul> 2188<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2189</ul> 2190<p>The initial value of the counter block. This must be exactly 16 bytes long.</p> 2191<p>The <code>AES-CTR</code> method uses the rightmost <code>length</code> bits of the block as the 2192counter and the remaining bits as the nonce.</p> 2193<h5><code>aesCtrParams.length</code><span><a class="mark" href="#aesctrparamslength" id="aesctrparamslength">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aesctrparams_length"></a></h5> 2194<div class="api_metadata"> 2195<span>Added in: v15.0.0</span> 2196</div> 2197<ul> 2198<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type"><number></a> The number of bits in the <code>aesCtrParams.counter</code> that are 2199to be used as the counter.</li> 2200</ul> 2201<h5><code>aesCtrParams.name</code><span><a class="mark" href="#aesctrparamsname" id="aesctrparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aesctrparams_name"></a></h5> 2202<div class="api_metadata"> 2203<span>Added in: v15.0.0</span> 2204</div> 2205<ul> 2206<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'AES-CTR'</code>.</li> 2207</ul> 2208<h4>Class: <code>AesGcmParams</code><span><a class="mark" href="#class-aesgcmparams" id="class-aesgcmparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_aesgcmparams"></a></h4> 2209<div class="api_metadata"> 2210<span>Added in: v15.0.0</span> 2211</div> 2212<h5><code>aesGcmParams.additionalData</code><span><a class="mark" href="#aesgcmparamsadditionaldata" id="aesgcmparamsadditionaldata">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aesgcmparams_additionaldata"></a></h5> 2213<div class="api_metadata"> 2214<span>Added in: v15.0.0</span> 2215</div> 2216<ul> 2217<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Undefined_type" class="type"><undefined></a></li> 2218</ul> 2219<p>With the AES-GCM method, the <code>additionalData</code> is extra input that is not 2220encrypted but is included in the authentication of the data. The use of 2221<code>additionalData</code> is optional.</p> 2222<h5><code>aesGcmParams.iv</code><span><a class="mark" href="#aesgcmparamsiv" id="aesgcmparamsiv">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aesgcmparams_iv"></a></h5> 2223<div class="api_metadata"> 2224<span>Added in: v15.0.0</span> 2225</div> 2226<ul> 2227<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2228</ul> 2229<p>The initialization vector must be unique for every encryption operation using a 2230given key.</p> 2231<p>Ideally, this is a deterministic 12-byte value that is computed in such a way 2232that it is guaranteed to be unique across all invocations that use the same key. 2233Alternatively, the initialization vector may consist of at least 12 2234cryptographically random bytes. For more information on constructing 2235initialization vectors for AES-GCM, refer to Section 8 of <a href="https://nvlpubs.nist.gov/nistpubs/Legacy/SP/nistspecialpublication800-38d.pdf">NIST SP 800-38D</a>.</p> 2236<h5><code>aesGcmParams.name</code><span><a class="mark" href="#aesgcmparamsname" id="aesgcmparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aesgcmparams_name"></a></h5> 2237<div class="api_metadata"> 2238<span>Added in: v15.0.0</span> 2239</div> 2240<ul> 2241<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'AES-GCM'</code>.</li> 2242</ul> 2243<h5><code>aesGcmParams.tagLength</code><span><a class="mark" href="#aesgcmparamstaglength" id="aesgcmparamstaglength">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aesgcmparams_taglength"></a></h5> 2244<div class="api_metadata"> 2245<span>Added in: v15.0.0</span> 2246</div> 2247<ul> 2248<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type"><number></a> The size in bits of the generated authentication tag. 2249This values must be one of <code>32</code>, <code>64</code>, <code>96</code>, <code>104</code>, <code>112</code>, <code>120</code>, or 2250<code>128</code>. <strong>Default:</strong> <code>128</code>.</li> 2251</ul> 2252<h4>Class: <code>AesKeyGenParams</code><span><a class="mark" href="#class-aeskeygenparams" id="class-aeskeygenparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_aeskeygenparams"></a></h4> 2253<div class="api_metadata"> 2254<span>Added in: v15.0.0</span> 2255</div> 2256<h5><code>aesKeyGenParams.length</code><span><a class="mark" href="#aeskeygenparamslength" id="aeskeygenparamslength">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aeskeygenparams_length"></a></h5> 2257<div class="api_metadata"> 2258<span>Added in: v15.0.0</span> 2259</div> 2260<ul> 2261<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type"><number></a></li> 2262</ul> 2263<p>The length of the AES key to be generated. This must be either <code>128</code>, <code>192</code>, 2264or <code>256</code>.</p> 2265<h5><code>aesKeyGenParams.name</code><span><a class="mark" href="#aeskeygenparamsname" id="aeskeygenparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_aeskeygenparams_name"></a></h5> 2266<div class="api_metadata"> 2267<span>Added in: v15.0.0</span> 2268</div> 2269<ul> 2270<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'AES-CBC'</code>, <code>'AES-CTR'</code>, <code>'AES-GCM'</code>, or 2271<code>'AES-KW'</code></li> 2272</ul> 2273<h4>Class: <code>EcdhKeyDeriveParams</code><span><a class="mark" href="#class-ecdhkeyderiveparams" id="class-ecdhkeyderiveparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_ecdhkeyderiveparams"></a></h4> 2274<div class="api_metadata"> 2275<span>Added in: v15.0.0</span> 2276</div> 2277<h5><code>ecdhKeyDeriveParams.name</code><span><a class="mark" href="#ecdhkeyderiveparamsname" id="ecdhkeyderiveparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_ecdhkeyderiveparams_name"></a></h5> 2278<div class="api_metadata"> 2279<span>Added in: v15.0.0</span> 2280</div> 2281<ul> 2282<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'ECDH'</code>, <code>'X25519'</code>, or <code>'X448'</code>.</li> 2283</ul> 2284<h5><code>ecdhKeyDeriveParams.public</code><span><a class="mark" href="#ecdhkeyderiveparamspublic" id="ecdhkeyderiveparamspublic">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_ecdhkeyderiveparams_public"></a></h5> 2285<div class="api_metadata"> 2286<span>Added in: v15.0.0</span> 2287</div> 2288<ul> 2289<li>Type: <a href="webcrypto.html#class-cryptokey" class="type"><CryptoKey></a></li> 2290</ul> 2291<p>ECDH key derivation operates by taking as input one parties private key and 2292another parties public key -- using both to generate a common shared secret. 2293The <code>ecdhKeyDeriveParams.public</code> property is set to the other parties public 2294key.</p> 2295<h4>Class: <code>EcdsaParams</code><span><a class="mark" href="#class-ecdsaparams" id="class-ecdsaparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_ecdsaparams"></a></h4> 2296<div class="api_metadata"> 2297<span>Added in: v15.0.0</span> 2298</div> 2299<h5><code>ecdsaParams.hash</code><span><a class="mark" href="#ecdsaparamshash" id="ecdsaparamshash">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_ecdsaparams_hash"></a></h5> 2300<div class="api_metadata"> 2301<span>Added in: v15.0.0</span> 2302</div> 2303<ul> 2304<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a></li> 2305</ul> 2306<p>If represented as a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a>, the value must be one of:</p> 2307<ul> 2308<li><code>'SHA-1'</code></li> 2309<li><code>'SHA-256'</code></li> 2310<li><code>'SHA-384'</code></li> 2311<li><code>'SHA-512'</code></li> 2312</ul> 2313<p>If represented as an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a>, the object must have a <code>name</code> property 2314whose value is one of the above listed values.</p> 2315<h5><code>ecdsaParams.name</code><span><a class="mark" href="#ecdsaparamsname" id="ecdsaparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_ecdsaparams_name"></a></h5> 2316<div class="api_metadata"> 2317<span>Added in: v15.0.0</span> 2318</div> 2319<ul> 2320<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'ECDSA'</code>.</li> 2321</ul> 2322<h4>Class: <code>EcKeyGenParams</code><span><a class="mark" href="#class-eckeygenparams" id="class-eckeygenparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_eckeygenparams"></a></h4> 2323<div class="api_metadata"> 2324<span>Added in: v15.0.0</span> 2325</div> 2326<h5><code>ecKeyGenParams.name</code><span><a class="mark" href="#eckeygenparamsname" id="eckeygenparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_eckeygenparams_name"></a></h5> 2327<div class="api_metadata"> 2328<span>Added in: v15.0.0</span> 2329</div> 2330<ul> 2331<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'ECDSA'</code> or <code>'ECDH'</code>.</li> 2332</ul> 2333<h5><code>ecKeyGenParams.namedCurve</code><span><a class="mark" href="#eckeygenparamsnamedcurve" id="eckeygenparamsnamedcurve">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_eckeygenparams_namedcurve"></a></h5> 2334<div class="api_metadata"> 2335<span>Added in: v15.0.0</span> 2336</div> 2337<ul> 2338<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'P-256'</code>, <code>'P-384'</code>, <code>'P-521'</code>.</li> 2339</ul> 2340<h4>Class: <code>EcKeyImportParams</code><span><a class="mark" href="#class-eckeyimportparams" id="class-eckeyimportparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_eckeyimportparams"></a></h4> 2341<div class="api_metadata"> 2342<span>Added in: v15.0.0</span> 2343</div> 2344<h5><code>ecKeyImportParams.name</code><span><a class="mark" href="#eckeyimportparamsname" id="eckeyimportparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_eckeyimportparams_name"></a></h5> 2345<div class="api_metadata"> 2346<span>Added in: v15.0.0</span> 2347</div> 2348<ul> 2349<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'ECDSA'</code> or <code>'ECDH'</code>.</li> 2350</ul> 2351<h5><code>ecKeyImportParams.namedCurve</code><span><a class="mark" href="#eckeyimportparamsnamedcurve" id="eckeyimportparamsnamedcurve">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_eckeyimportparams_namedcurve"></a></h5> 2352<div class="api_metadata"> 2353<span>Added in: v15.0.0</span> 2354</div> 2355<ul> 2356<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'P-256'</code>, <code>'P-384'</code>, <code>'P-521'</code>.</li> 2357</ul> 2358<h4>Class: <code>Ed448Params</code><span><a class="mark" href="#class-ed448params" id="class-ed448params">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_ed448params"></a></h4> 2359<div class="api_metadata"> 2360<span>Added in: v15.0.0</span> 2361</div> 2362<h5><code>ed448Params.name</code><span><a class="mark" href="#ed448paramsname" id="ed448paramsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_ed448params_name"></a></h5> 2363<div class="api_metadata"> 2364<span>Added in: v18.4.0</span> 2365</div> 2366<ul> 2367<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'Ed448'</code>.</li> 2368</ul> 2369<h5><code>ed448Params.context</code><span><a class="mark" href="#ed448paramscontext" id="ed448paramscontext">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_ed448params_context"></a></h5> 2370<div class="api_metadata"> 2371<span>Added in: v18.4.0</span> 2372</div> 2373<ul> 2374<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Undefined_type" class="type"><undefined></a></li> 2375</ul> 2376<p>The <code>context</code> member represents the optional context data to associate with 2377the message. 2378The Node.js Web Crypto API implementation only supports zero-length context 2379which is equivalent to not providing context at all.</p> 2380<h4>Class: <code>HkdfParams</code><span><a class="mark" href="#class-hkdfparams" id="class-hkdfparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_hkdfparams"></a></h4> 2381<div class="api_metadata"> 2382<span>Added in: v15.0.0</span> 2383</div> 2384<h5><code>hkdfParams.hash</code><span><a class="mark" href="#hkdfparamshash" id="hkdfparamshash">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hkdfparams_hash"></a></h5> 2385<div class="api_metadata"> 2386<span>Added in: v15.0.0</span> 2387</div> 2388<ul> 2389<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a></li> 2390</ul> 2391<p>If represented as a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a>, the value must be one of:</p> 2392<ul> 2393<li><code>'SHA-1'</code></li> 2394<li><code>'SHA-256'</code></li> 2395<li><code>'SHA-384'</code></li> 2396<li><code>'SHA-512'</code></li> 2397</ul> 2398<p>If represented as an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a>, the object must have a <code>name</code> property 2399whose value is one of the above listed values.</p> 2400<h5><code>hkdfParams.info</code><span><a class="mark" href="#hkdfparamsinfo" id="hkdfparamsinfo">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hkdfparams_info"></a></h5> 2401<div class="api_metadata"> 2402<span>Added in: v15.0.0</span> 2403</div> 2404<ul> 2405<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2406</ul> 2407<p>Provides application-specific contextual input to the HKDF algorithm. 2408This can be zero-length but must be provided.</p> 2409<h5><code>hkdfParams.name</code><span><a class="mark" href="#hkdfparamsname" id="hkdfparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hkdfparams_name"></a></h5> 2410<div class="api_metadata"> 2411<span>Added in: v15.0.0</span> 2412</div> 2413<ul> 2414<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'HKDF'</code>.</li> 2415</ul> 2416<h5><code>hkdfParams.salt</code><span><a class="mark" href="#hkdfparamssalt" id="hkdfparamssalt">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hkdfparams_salt"></a></h5> 2417<div class="api_metadata"> 2418<span>Added in: v15.0.0</span> 2419</div> 2420<ul> 2421<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2422</ul> 2423<p>The salt value significantly improves the strength of the HKDF algorithm. 2424It should be random or pseudorandom and should be the same length as the 2425output of the digest function (for instance, if using <code>'SHA-256'</code> as the 2426digest, the salt should be 256-bits of random data).</p> 2427<h4>Class: <code>HmacImportParams</code><span><a class="mark" href="#class-hmacimportparams" id="class-hmacimportparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_hmacimportparams"></a></h4> 2428<div class="api_metadata"> 2429<span>Added in: v15.0.0</span> 2430</div> 2431<h5><code>hmacImportParams.hash</code><span><a class="mark" href="#hmacimportparamshash" id="hmacimportparamshash">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hmacimportparams_hash"></a></h5> 2432<div class="api_metadata"> 2433<span>Added in: v15.0.0</span> 2434</div> 2435<ul> 2436<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a></li> 2437</ul> 2438<p>If represented as a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a>, the value must be one of:</p> 2439<ul> 2440<li><code>'SHA-1'</code></li> 2441<li><code>'SHA-256'</code></li> 2442<li><code>'SHA-384'</code></li> 2443<li><code>'SHA-512'</code></li> 2444</ul> 2445<p>If represented as an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a>, the object must have a <code>name</code> property 2446whose value is one of the above listed values.</p> 2447<h5><code>hmacImportParams.length</code><span><a class="mark" href="#hmacimportparamslength" id="hmacimportparamslength">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hmacimportparams_length"></a></h5> 2448<div class="api_metadata"> 2449<span>Added in: v15.0.0</span> 2450</div> 2451<ul> 2452<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type"><number></a></li> 2453</ul> 2454<p>The optional number of bits in the HMAC key. This is optional and should 2455be omitted for most cases.</p> 2456<h5><code>hmacImportParams.name</code><span><a class="mark" href="#hmacimportparamsname" id="hmacimportparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hmacimportparams_name"></a></h5> 2457<div class="api_metadata"> 2458<span>Added in: v15.0.0</span> 2459</div> 2460<ul> 2461<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'HMAC'</code>.</li> 2462</ul> 2463<h4>Class: <code>HmacKeyGenParams</code><span><a class="mark" href="#class-hmackeygenparams" id="class-hmackeygenparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_hmackeygenparams"></a></h4> 2464<div class="api_metadata"> 2465<span>Added in: v15.0.0</span> 2466</div> 2467<h5><code>hmacKeyGenParams.hash</code><span><a class="mark" href="#hmackeygenparamshash" id="hmackeygenparamshash">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hmackeygenparams_hash"></a></h5> 2468<div class="api_metadata"> 2469<span>Added in: v15.0.0</span> 2470</div> 2471<ul> 2472<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a></li> 2473</ul> 2474<p>If represented as a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a>, the value must be one of:</p> 2475<ul> 2476<li><code>'SHA-1'</code></li> 2477<li><code>'SHA-256'</code></li> 2478<li><code>'SHA-384'</code></li> 2479<li><code>'SHA-512'</code></li> 2480</ul> 2481<p>If represented as an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a>, the object must have a <code>name</code> property 2482whose value is one of the above listed values.</p> 2483<h5><code>hmacKeyGenParams.length</code><span><a class="mark" href="#hmackeygenparamslength" id="hmackeygenparamslength">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hmackeygenparams_length"></a></h5> 2484<div class="api_metadata"> 2485<span>Added in: v15.0.0</span> 2486</div> 2487<ul> 2488<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type"><number></a></li> 2489</ul> 2490<p>The number of bits to generate for the HMAC key. If omitted, 2491the length will be determined by the hash algorithm used. 2492This is optional and should be omitted for most cases.</p> 2493<h5><code>hmacKeyGenParams.name</code><span><a class="mark" href="#hmackeygenparamsname" id="hmackeygenparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_hmackeygenparams_name"></a></h5> 2494<div class="api_metadata"> 2495<span>Added in: v15.0.0</span> 2496</div> 2497<ul> 2498<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'HMAC'</code>.</li> 2499</ul> 2500<h4>Class: <code>Pbkdf2Params</code><span><a class="mark" href="#class-pbkdf2params" id="class-pbkdf2params">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_pbkdf2params"></a></h4> 2501<div class="api_metadata"> 2502<span>Added in: v15.0.0</span> 2503</div> 2504<h5><code>pbkdb2Params.hash</code><span><a class="mark" href="#pbkdb2paramshash" id="pbkdb2paramshash">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_pbkdb2params_hash"></a></h5> 2505<div class="api_metadata"> 2506<span>Added in: v15.0.0</span> 2507</div> 2508<ul> 2509<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a></li> 2510</ul> 2511<p>If represented as a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a>, the value must be one of:</p> 2512<ul> 2513<li><code>'SHA-1'</code></li> 2514<li><code>'SHA-256'</code></li> 2515<li><code>'SHA-384'</code></li> 2516<li><code>'SHA-512'</code></li> 2517</ul> 2518<p>If represented as an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a>, the object must have a <code>name</code> property 2519whose value is one of the above listed values.</p> 2520<h5><code>pbkdf2Params.iterations</code><span><a class="mark" href="#pbkdf2paramsiterations" id="pbkdf2paramsiterations">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_pbkdf2params_iterations"></a></h5> 2521<div class="api_metadata"> 2522<span>Added in: v15.0.0</span> 2523</div> 2524<ul> 2525<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type"><number></a></li> 2526</ul> 2527<p>The number of iterations the PBKDF2 algorithm should make when deriving bits.</p> 2528<h5><code>pbkdf2Params.name</code><span><a class="mark" href="#pbkdf2paramsname" id="pbkdf2paramsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_pbkdf2params_name"></a></h5> 2529<div class="api_metadata"> 2530<span>Added in: v15.0.0</span> 2531</div> 2532<ul> 2533<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'PBKDF2'</code>.</li> 2534</ul> 2535<h5><code>pbkdf2Params.salt</code><span><a class="mark" href="#pbkdf2paramssalt" id="pbkdf2paramssalt">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_pbkdf2params_salt"></a></h5> 2536<div class="api_metadata"> 2537<span>Added in: v15.0.0</span> 2538</div> 2539<ul> 2540<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2541</ul> 2542<p>Should be at least 16 random or pseudorandom bytes.</p> 2543<h4>Class: <code>RsaHashedImportParams</code><span><a class="mark" href="#class-rsahashedimportparams" id="class-rsahashedimportparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_rsahashedimportparams"></a></h4> 2544<div class="api_metadata"> 2545<span>Added in: v15.0.0</span> 2546</div> 2547<h5><code>rsaHashedImportParams.hash</code><span><a class="mark" href="#rsahashedimportparamshash" id="rsahashedimportparamshash">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsahashedimportparams_hash"></a></h5> 2548<div class="api_metadata"> 2549<span>Added in: v15.0.0</span> 2550</div> 2551<ul> 2552<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a></li> 2553</ul> 2554<p>If represented as a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a>, the value must be one of:</p> 2555<ul> 2556<li><code>'SHA-1'</code></li> 2557<li><code>'SHA-256'</code></li> 2558<li><code>'SHA-384'</code></li> 2559<li><code>'SHA-512'</code></li> 2560</ul> 2561<p>If represented as an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a>, the object must have a <code>name</code> property 2562whose value is one of the above listed values.</p> 2563<h5><code>rsaHashedImportParams.name</code><span><a class="mark" href="#rsahashedimportparamsname" id="rsahashedimportparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsahashedimportparams_name"></a></h5> 2564<div class="api_metadata"> 2565<span>Added in: v15.0.0</span> 2566</div> 2567<ul> 2568<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'RSASSA-PKCS1-v1_5'</code>, <code>'RSA-PSS'</code>, or 2569<code>'RSA-OAEP'</code>.</li> 2570</ul> 2571<h4>Class: <code>RsaHashedKeyGenParams</code><span><a class="mark" href="#class-rsahashedkeygenparams" id="class-rsahashedkeygenparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_rsahashedkeygenparams"></a></h4> 2572<div class="api_metadata"> 2573<span>Added in: v15.0.0</span> 2574</div> 2575<h5><code>rsaHashedKeyGenParams.hash</code><span><a class="mark" href="#rsahashedkeygenparamshash" id="rsahashedkeygenparamshash">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsahashedkeygenparams_hash"></a></h5> 2576<div class="api_metadata"> 2577<span>Added in: v15.0.0</span> 2578</div> 2579<ul> 2580<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a></li> 2581</ul> 2582<p>If represented as a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a>, the value must be one of:</p> 2583<ul> 2584<li><code>'SHA-1'</code></li> 2585<li><code>'SHA-256'</code></li> 2586<li><code>'SHA-384'</code></li> 2587<li><code>'SHA-512'</code></li> 2588</ul> 2589<p>If represented as an <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Object" class="type"><Object></a>, the object must have a <code>name</code> property 2590whose value is one of the above listed values.</p> 2591<h5><code>rsaHashedKeyGenParams.modulusLength</code><span><a class="mark" href="#rsahashedkeygenparamsmoduluslength" id="rsahashedkeygenparamsmoduluslength">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsahashedkeygenparams_moduluslength"></a></h5> 2592<div class="api_metadata"> 2593<span>Added in: v15.0.0</span> 2594</div> 2595<ul> 2596<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type"><number></a></li> 2597</ul> 2598<p>The length in bits of the RSA modulus. As a best practice, this should be 2599at least <code>2048</code>.</p> 2600<h5><code>rsaHashedKeyGenParams.name</code><span><a class="mark" href="#rsahashedkeygenparamsname" id="rsahashedkeygenparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsahashedkeygenparams_name"></a></h5> 2601<div class="api_metadata"> 2602<span>Added in: v15.0.0</span> 2603</div> 2604<ul> 2605<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be one of <code>'RSASSA-PKCS1-v1_5'</code>, <code>'RSA-PSS'</code>, or 2606<code>'RSA-OAEP'</code>.</li> 2607</ul> 2608<h5><code>rsaHashedKeyGenParams.publicExponent</code><span><a class="mark" href="#rsahashedkeygenparamspublicexponent" id="rsahashedkeygenparamspublicexponent">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsahashedkeygenparams_publicexponent"></a></h5> 2609<div class="api_metadata"> 2610<span>Added in: v15.0.0</span> 2611</div> 2612<ul> 2613<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array" class="type"><Uint8Array></a></li> 2614</ul> 2615<p>The RSA public exponent. This must be a <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array" class="type"><Uint8Array></a> containing a big-endian, 2616unsigned integer that must fit within 32-bits. The <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/Uint8Array" class="type"><Uint8Array></a> may contain an 2617arbitrary number of leading zero-bits. The value must be a prime number. Unless 2618there is reason to use a different value, use <code>new Uint8Array([1, 0, 1])</code> 2619(65537) as the public exponent.</p> 2620<h4>Class: <code>RsaOaepParams</code><span><a class="mark" href="#class-rsaoaepparams" id="class-rsaoaepparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_rsaoaepparams"></a></h4> 2621<div class="api_metadata"> 2622<span>Added in: v15.0.0</span> 2623</div> 2624<h5><code>rsaOaepParams.label</code><span><a class="mark" href="#rsaoaepparamslabel" id="rsaoaepparamslabel">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsaoaepparams_label"></a></h5> 2625<div class="api_metadata"> 2626<span>Added in: v15.0.0</span> 2627</div> 2628<ul> 2629<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/ArrayBuffer" class="type"><ArrayBuffer></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/TypedArray" class="type"><TypedArray></a> | <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Reference/Global_Objects/DataView" class="type"><DataView></a> | <a href="buffer.html#class-buffer" class="type"><Buffer></a></li> 2630</ul> 2631<p>An additional collection of bytes that will not be encrypted, but will be bound 2632to the generated ciphertext.</p> 2633<p>The <code>rsaOaepParams.label</code> parameter is optional.</p> 2634<h5><code>rsaOaepParams.name</code><span><a class="mark" href="#rsaoaepparamsname" id="rsaoaepparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsaoaepparams_name"></a></h5> 2635<div class="api_metadata"> 2636<span>Added in: v15.0.0</span> 2637</div> 2638<ul> 2639<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> must be <code>'RSA-OAEP'</code>.</li> 2640</ul> 2641<h4>Class: <code>RsaPssParams</code><span><a class="mark" href="#class-rsapssparams" id="class-rsapssparams">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_class_rsapssparams"></a></h4> 2642<div class="api_metadata"> 2643<span>Added in: v15.0.0</span> 2644</div> 2645<h5><code>rsaPssParams.name</code><span><a class="mark" href="#rsapssparamsname" id="rsapssparamsname">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsapssparams_name"></a></h5> 2646<div class="api_metadata"> 2647<span>Added in: v15.0.0</span> 2648</div> 2649<ul> 2650<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#String_type" class="type"><string></a> Must be <code>'RSA-PSS'</code>.</li> 2651</ul> 2652<h5><code>rsaPssParams.saltLength</code><span><a class="mark" href="#rsapssparamssaltlength" id="rsapssparamssaltlength">#</a></span><a aria-hidden="true" class="legacy" id="webcrypto_rsapssparams_saltlength"></a></h5> 2653<div class="api_metadata"> 2654<span>Added in: v15.0.0</span> 2655</div> 2656<ul> 2657<li>Type: <a href="https://developer.mozilla.org/en-US/docs/Web/JavaScript/Data_structures#Number_type" class="type"><number></a></li> 2658</ul> 2659<p>The length (in bytes) of the random salt to use.</p> 2660<section data-footnotes="" class="footnotes"><h3 class="sr-only" id="footnote-label">Footnotes</h3> 2661<ol> 2662<li id="user-content-fn-1"> 2663<p>An experimental implementation of 2664<a href="https://wicg.github.io/webcrypto-secure-curves/">Secure Curves in the Web Cryptography API</a> as of 05 May 2022 <a href="#user-content-fnref-1" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩</a> <a href="#user-content-fnref-1-2" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>2</sup></a> <a href="#user-content-fnref-1-3" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>3</sup></a> <a href="#user-content-fnref-1-4" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>4</sup></a> <a href="#user-content-fnref-1-5" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>5</sup></a> <a href="#user-content-fnref-1-6" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>6</sup></a> <a href="#user-content-fnref-1-7" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>7</sup></a> <a href="#user-content-fnref-1-8" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>8</sup></a> <a href="#user-content-fnref-1-9" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>9</sup></a> <a href="#user-content-fnref-1-10" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>10</sup></a> <a href="#user-content-fnref-1-11" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>11</sup></a> <a href="#user-content-fnref-1-12" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>12</sup></a> <a href="#user-content-fnref-1-13" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>13</sup></a> <a href="#user-content-fnref-1-14" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>14</sup></a> <a href="#user-content-fnref-1-15" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>15</sup></a> <a href="#user-content-fnref-1-16" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>16</sup></a> <a href="#user-content-fnref-1-17" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>17</sup></a> <a href="#user-content-fnref-1-18" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>18</sup></a> <a href="#user-content-fnref-1-19" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>19</sup></a> <a href="#user-content-fnref-1-20" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>20</sup></a> <a href="#user-content-fnref-1-21" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>21</sup></a> <a href="#user-content-fnref-1-22" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>22</sup></a> <a href="#user-content-fnref-1-23" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>23</sup></a> <a href="#user-content-fnref-1-24" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>24</sup></a> <a href="#user-content-fnref-1-25" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>25</sup></a> <a href="#user-content-fnref-1-26" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>26</sup></a> <a href="#user-content-fnref-1-27" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>27</sup></a> <a href="#user-content-fnref-1-28" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>28</sup></a> <a href="#user-content-fnref-1-29" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>29</sup></a> <a href="#user-content-fnref-1-30" data-footnote-backref="" class="data-footnote-backref" aria-label="Back to content">↩<sup>30</sup></a></p> 2665</li> 2666</ol> 2667</section></section> 2668 <!-- API END --> 2669 </div> 2670 </div> 2671 </div> 2672</body> 2673</html> 2674