Node.js crypto.generateKeyPair() Method
Last Updated :
11 Oct, 2021
The
crypto.generateKeyPair() method is an inbuilt application programming interface of crypto module which is used to generate a new asymmetric key pair of the specified type. For example, the currently supported key types are
RSA, DSA, EC, Ed25519, Ed448, X25519, X448, and DH. Moreover, if option's
publicKeyEncoding or
privateKeyEncoding is stated here, then this function acts as if
keyObject.export() had been called on its output. Else, the particular part of the key is returned as a
KeyObject.
However, it is suggested to encode the public keys as 'spki' and private keys as 'pkcs8' with encryption for long-term storage.
Syntax:
crypto.generateKeyPair( type, options, callback )
Parameters: This method accept three parameters as mentioned above and described below:
- type: It holds a string and it must include one or more of the following algorithms: 'rsa', 'dsa', 'ec', 'ed25519', 'ed448', 'x25519', 'x448', or 'dh'.
- options: is of type object. It can hold the following parameters:
- modulusLength: It holds a number. It is the key size in bits and is applicable for RSA, and DSA algorithm only.
- publicExponent: It holds a number. It is the Public exponent of RSA algorithm. Its by default value is 0x10001.
- divisorLength: It holds a number. It is the size of q in bits of DSA algorithm.
- namedCurve: It holds a string. It is the name of the curve to be used in EC algorithm.
- prime: It holds a buffer. It is the prime parameter of DH algorithm.
- primeLength: It holds a number. It is the prime length of DH algorithm in bits.
- generator: It holds a number. It is the custom generator of DH algorithm. Its by default value is 2.
- groupName: It holds string. It is the Diffie-Hellman group name of DH algorithm.
- publicKeyEncoding: It holds a string.
- privateKeyEncoding: It holds an Object.
- callback: It is a function, with parameters publicKey, privateKey and err.
- err: holds an error.
- publicKey: It holds a string, buffer or a KeyObject.
- privateKey: holds a string, buffer or a KeyObject.
Return Value: It returns a new asymmetric key pair of the given type.
Below examples illustrate the use of
crypto.generateKeyPair() method in Node.js:
Example 1:
javascript
// Node.js program to demonstrate the
// crypto.generateKeyPair() method
// Including generateKeyPair from crypto module
const { generateKeyPair } = require('crypto');
// Calling generateKeyPair() method
// with its parameters
generateKeyPair('rsa', {
modulusLength: 530, // options
publicExponent: 0x10101,
publicKeyEncoding: {
type: 'pkcs1',
format: 'der'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'der',
cipher: 'aes-192-cbc',
passphrase: 'GeeksforGeeks is a CS-Portal!'
}
}, (err, publicKey, privateKey) => { // Callback function
if(!err)
{
// Prints new asymmetric key pair
console.log("Public Key is : ", publicKey);
console.log();
console.log("Private Key is: ", privateKey);
}
else
{
// Prints error
console.log("Errr is: ", err);
}
});
Output:
Public Key is : <Buffer 30 4a 02 43 03 12 b9
4c 1a 3f 96 07 51 c6 31 02d7 11 e2 e3 a5 2b 0c
7c 18 55 88 39 04 4c 86 e2 77 c4 29 47 82 2c 5b
4b 9e f3 e8 83 4b 5d 4b 31 e7 d5 ... >
Private Key is: <Buffer 30 82 01 cd 30 57 06
09 2a 86 48 86 f7 0d 01 050d 30 4a 30 29 06 09
2a 86 48 86 f7 0d 01 05 0c 30 1c 04 08 e0 31 2b
a0 38 82 e1 db 02 02 08 00 30 0c ... >
Example 2:
javascript
// Node.js program to demonstrate the
// crypto.generateKeyPair() method
// Including generateKeyPair from crypto module
const { generateKeyPair } = require('crypto');
// Calling generateKeyPair() method
// with its parameters
generateKeyPair('ec', {
namedCurve: 'secp256k1', // Options
publicKeyEncoding: {
type: 'spki',
format: 'der'
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'der'
}
},
(err, publicKey, privateKey) => { // Callback function
if(!err)
{
// Prints new asymmetric key
// pair after encoding
console.log("Public Key is: ",
publicKey.toString('hex'));
console.log();
console.log("Private Key is: ",
privateKey.toString('hex'));
}
else
{
// Prints error
console.log("Errr is: ", err);
}
});
Output:
Public Key is: 3056301006072a8648ce3d020106052b8104000a0342000499c5f442c3264bcdfb093b0bc820e3f0f6546972856ebec2f8ccc03f49abdb47ffcfcaf4f37e0ec53050760e74014767e30a8a3e891f4db8c83fa27627898f15
Private Key is: 308184020100301006072a8648ce3d020106052b8104000a046d306b0201010420326b340a964512bfc3e010850ff05e077b2f016fce9eded11f40643e4231efc4a1440342000499c5f442c3264bcdfb093b0bc820e3f0f6546972856ebec2f8ccc03f49abdb47ffcfcaf4f37e0ec53050760e74014767e30a8a3e891f4db8c83fa27627898f15
Reference: https://nodejs.org/api/crypto.html#crypto_crypto_generatekeypair_type_options_callback
Similar Reads
Node.js cipher.final() Method The cipher.final() method in Node.js is used to signal to the cipher object that the encryption or decryption process is complete. This method must be called after all data has been passed to the cipher object using the cipher.update() method. The cipher.final() method returns the remaining encrypte
2 min read
Node.js cipher.update() Method The cipher.update() method is an inbuilt application programming interface of class Cipher within crypto module which is used to update the cipher with data according to the given encoding format. Syntax: const cipher.update(data[, inputEncoding][, outputEncoding]) Parameters: This method takes the
2 min read
Node.js crypto.getCiphers() Method The crypto.getCiphers() method returns an array the names of all the supported cipher algorithms. Syntax: crypto.getCiphers() Parameters: This method doesn't accepts any parameters. Return Value: It returns the names of all the supported cipher algorithms. Below example illustrate the use of crypto.
2 min read
Node.js crypto.createECDH() Method The crypto.createECDH() method is an inbuilt application programming interface of crypto module which is used to create an Elliptic Curve Diffie-Hellman i.e, (ECDH) key exchange object with the help of a predefined curve which is defined by the curveName string. Moreover you can use crypto.getCurves
2 min read
Node.js crypto.createDecipheriv() Method The crypto.createDecipheriv() method is an inbuilt application programming interface of crypto module which is used to create a Decipher object, with the stated algorithm, key and initialization vector i.e, (iv). Syntax: crypto.createDecipheriv( algorithm, key, iv, options ) Parameters: This method
3 min read
Node crypto.createCipheriv() Method The crypto.createCipheriv() method is an inbuilt application programming interface of the crypto module which is used to create a Cipher object, with the stated algorithm, key, and initialization vector (iv).Syntax: crypto.createCipheriv( algorithm, key, iv, options )Parameters: This method accepts
2 min read
Node.js crypto.getDiffieHellman() Method The crypto.getDiffieHellman() method is used to create a predefined DiffieHellmanGroup key exchange object. Here, the favored groups are 'modp1', 'modp2', 'modp5', which are defined in RFC 2412 and 'modp14', 'modp15', 'modp16', 'modp17', 'modp18', defined in RFC 3526. Syntax: crypto.getDiffieHellman
2 min read
Node.js crypto.pbkdf2() Method The crypto.pbkdf2() method gives an asynchronous Password-Based Key Derivation Function 2 i.e. (PBKDF2) implementation. Moreover, a particular HMAC digest algorithm which is defined by digest is implemented to derive a key of the required byte length (keylen) from the stated password, salt, and iter
2 min read
Node crypto.createHash() Method The crypto.createHash() method is used to create a Hash object that can be used to create hash digests by using the stated algorithm. Syntax:crypto.createHash( algorithm, options )Parameters: This method accepts two parameters as mentioned above and described below:algorithm: It is dependent on the
2 min read
Node.js crypto.createHmac() Method The crypto.createHmac() method is used to create an Hmac object that uses the stated 'algorithm' and 'key'.Syntax:crypto.createHmac( algorithm, key, options )Parameters: This method accepts three parameters as mentioned above and described below:algorithm: It is dependent on the accessible algorithm
2 min read