- Assertion testing
- Async hooks
- Buffer
- C++ addons
- C/C++ addons with Node-API
- C++ embedder API
- Child processes
- Cluster
- Command-line options
- Console
- Crypto
- Debugger
- Deprecated APIs
- Diagnostics Channel
- DNS
- Domain
- Errors
- Events
- File system
- Globals
- HTTP
- HTTP/2
- HTTPS
- Inspector
- Internationalization
- Modules: CommonJS modules
- Modules: ECMAScript modules
- Modules:
moduleAPI - Modules: Packages
- Net
- OS
- Path
- Performance hooks
- Policies
- Process
- Punycode
- Query strings
- Readline
- REPL
- Report
- Stream
- String decoder
- Timers
- TLS/SSL
- Trace events
- TTY
- UDP/datagram
- URL
- Utilities
- V8
- VM
- WASI
- Web Crypto API
- Worker threads
- Zlib
Node.js v15.14.0 documentation
Table of contents
- Web Crypto API
- Examples
- Algorithm Matrix
- Class:
Crypto - Class:
CryptoKey - Class:
CryptoKeyPair - Class:
SubtleCryptosubtle.decrypt(algorithm, key, data)subtle.deriveBits(algorithm, baseKey, length)subtle.deriveKey(algorithm, baseKey, derivedKeyAlgorithm, extractable, keyUsages)subtle.digest(algorithm, data)subtle.encrypt(algorithm, key, data)subtle.exportKey(format, key)subtle.generateKey(algorithm, extractable, keyUsages)subtle.importKey(format, keyData, algorithm, extractable, keyUsages)subtle.sign(algorithm, key, data)subtle.unwrapKey(format, wrappedKey, unwrappingKey, unwrapAlgo, unwrappedKeyAlgo, extractable, keyUsages)subtle.verify(algorithm, key, signature, data)subtle.wrapKey(format, key, wrappingKey, wrapAlgo)
- Algorithm Parameters
- Class:
AesCbcParams - Class:
AesCtrParams - Class:
AesGcmParams - Class:
AesImportParams - Class:
AesKeyGenParams - Class:
AesKwParams - Class:
EcdhKeyDeriveParams - Class:
EcdsaParams - Class:
EcKeyGenParams - Class:
EcKeyImportParams - Class:
HkdfParams - Class:
HmacImportParams - Class:
HmacKeyGenParams - Class:
HmacParams - Class:
Pbkdf2ImportParams - Class:
Pbkdf2Params - Class:
RsaHashedImportParams - Class:
RsaHashedKeyGenParams - Class:
RsaOaepParams - Class:
RsaPssParams - Class:
RsaSignParams
- Class:
- Node.js-specific extensions
Web Crypto API#
Stability: 1 - Experimental
Node.js provides an implementation of the standard Web Crypto API.
Use require('crypto').webcrypto to access this module.
const { subtle } = require('crypto').webcrypto;
(async function() {
const key = await subtle.generateKey({
name: 'HMAC',
hash: 'SHA-256',
length: 256
}, true, ['sign', 'verify']);
const digest = await subtle.sign({
name: 'HMAC'
}, key, 'I love cupcakes');
})();
Examples#
Generating keys#
The <SubtleCrypto> class can be used to generate symmetric (secret) keys or asymmetric key pairs (public key and private key).
AES keys#
const { subtle } = require('crypto').webcrypto;
async function generateAesKey(length = 256) {
const key = await subtle.generateKey({
name: 'AES-CBC',
length
}, true, ['encrypt', 'decrypt']);
return key;
}
Elliptic curve key pairs#
const { subtle } = require('crypto').webcrypto;
async function generateEcKey(namedCurve = 'P-521') {
const {
publicKey,
privateKey
} = await subtle.generateKey({
name: 'ECDSA',
namedCurve,
}, true, ['sign', 'verify']);
return { publicKey, privateKey };
}
ED25519/ED448/X25519/X448 Elliptic curve key pairs#
const { subtle } = require('crypto').webcrypto;
async function generateEd25519Key() {
return subtle.generateKey({
name: 'NODE-ED25519',
namedCurve: 'NODE-ED25519',
}, true, ['sign', 'verify']);
}