Node.js crypto.generateKeyPairSync() Method - GeeksforGeeks

11 Oct, 2021
The crypto.generateKeyPairSync() 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 a strong passphrase, in order to keep the passphrase secret.
Syntax:
crypto.generateKeyPairSync( type, options )
Parameters: This method accept two 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: It 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.
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.
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.
Return Value: It returns a new asymmetric key pair of the given type i.e, It returns an object that includes a private key and a public key that holds the string, buffer, and KeyObject.
Below examples illustrate the use of crypto.generateKeyPairSync() method in Node.js:
Example 1:
// Node.js program to demonstrate the// crypto.generateKeyPairSync() method  // Including generateKeyPairSync from crypto moduleconst { generateKeyPairSync } = require('crypto');  // Including publicKey and  privateKey from // generateKeyPairSync() method with its // parametersconst { publicKey, privateKey } = generateKeyPairSync('ec', {  namedCurve: 'secp256k1',    // Options  publicKeyEncoding: {    type: 'spki',    format: 'der'  },  privateKeyEncoding: {    type: 'pkcs8',    format: 'der'  }});  // Prints asymmetric key pairconsole.log("The public key is: ", publicKey);console.log();console.log("The private key is: ", privateKey);
Output:
The public key is: <Buffer 30 56 30 10 06 07
2a 86 48 ce 3d 02 01 06 052b 81 04 00 0a 03 42
00 04 d9 88 53 5b 21 84 f8 73 14 c8 0b 31 e2 2a
28 a5 4c 8f 68 23 65 84 d9 fe 20 3f ... >

The private key is:  Buffer 30 81 84 02 01 00 30
10 06 07 2a 86 48 ce 3d 02 01 06 05 2b 81 04 00
0a 04 6d 30 6b 02 01 01 04 20 50 4a 87 c3 8c
968f 2b 41 f8 66 99 8a 95 ae 45 75 ... >

Example 2:
// Node.js program to demonstrate the// crypto.generateKeyPairSync() method  // Including generateKeyPairSync from crypto moduleconst { generateKeyPairSync } = require('crypto');  // Including publicKey and  privateKey from // generateKeyPairSync() method with its // parametersconst { publicKey, privateKey } = generateKeyPairSync('dsa', {  modulusLength: 570,  publicKeyEncoding: {    type: 'spki',    format: 'der'  },  privateKeyEncoding: {    type: 'pkcs8',    format: 'der'  }});  // Prints asymmetric key pair after encodingconsole.log("The public key is: ",          publicKey.toString('base64'));console.log();console.log("The private key is: ",         privateKey.toString('base64'));
Output:
The public key is:  MIIBETCBwAYHKoZIzjgEATCBtAJJAM6084jk1Y6s/0sWQCs3k59AjV1GgAHb8gmB+Lxd/YVid+GySyss8tqhVQl49xho1DHoeJMNsVO6mcRqaSlSCPgmzqGaOvn2mQIdAKL5nGKJjDZF8Pb1SVvwWivhPShJiiHC2JjgrN8CSAqhzmg26/kEHYTZ3yNEGuguDhLvMAPdVG9pjTahLBytn8JQa3yQwLuPB4MzKfJ4d0pvKVZVnkMsatUe2ZkjnKoCjGlzwggd+QNMAAJJAMvsOBUjUKLhpkw4FZP7LIz0yYyOV1yYy84t8qSO42Yf6sNUfK6INnkFbpLHjFLcaDkFPqE5oRCIUqIVOhH0I7jNcGCN2m+ZWg==

The private key is:  MIHnAgEAMIHABgcqhkjOOAQBMIG0AkkAzrTziOTVjqz/SxZAKzeTn0CNXUaAAdvyCYH4vF39hWJ34bJLKyzy2qFVCXj3GGjUMeh4kw2xU7qZxGppKVII+CbOoZo6+faZAh0AovmcYomMNkXw9vVJW/BaK+E9KEmKIcLYmOCs3wJICqHOaDbr+QQdhNnfI0Qa6C4OEu8wA91Ub2mNNqEsHK2fwlBrfJDAu48HgzMp8nh3Sm8pVlWeQyxq1R7ZmSOcqgKMaXPCCB35BB8CHQChh8yXsr/3dx3OdV6JmIWPcHe6dTHh6IOEIHer
Here, ‘dsa’ key type is used.
Reference: https://nodejs.org/api/crypto.html#crypto_crypto_generatekeypairsync_type_options
Node.js-crypto-module
Node.js
Web Technologies
Writing code in comment?
Please use ide.geeksforgeeks.org,
generate link and share the link here.
Comments
Old Comments
Node.js path.resolve() Method
Node.js CRUD Operations Using Mongoose and MongoDB Atlas
Node.js fs.readdir() Method
Express.js res.render() Function
Node.js First Application
Express.js express.Router() Function
Convert a string to an integer in JavaScript
How to set the default value for an HTML <select> element ?
Top 10 Angular Libraries For Web Developers
How to create footer to stay at the bottom of a Web page?