Open In App

Node.js crypto.generateKeyPairSync() Method

Improve
Improve
Like Article
Like
Save
Share
Report

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:
    1. modulusLength: It holds a number. It is the key size in bits and is applicable for RSA, and DSA algorithm only.
    2. publicExponent: It holds a number. It is the Public exponent of RSA algorithm. Its by default value is 0x10001.
    3. divisorLength: It holds a number. It is the size of q in bits of DSA algorithm.
    4. namedCurve: It holds a string. It is the name of the curve to be used in EC algorithm.
    5. prime: It holds a buffer. It is the prime parameter of DH algorithm.
    6. primeLength: It holds a number. It is the prime length of DH algorithm in bits.
    7. generator: It holds a number. It is the custom generator of DH algorithm. Its by default value is 2.
    8. groupName: It holds string. It is the Diffie-Hellman group name of DH algorithm.
    9. publicKeyEncoding: It holds a string.
    10. 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 module
const { generateKeyPairSync } = require('crypto');
  
// Including publicKey and  privateKey from 
// generateKeyPairSync() method with its 
// parameters
const { publicKey, privateKey } = generateKeyPairSync('ec', {
  namedCurve: 'secp256k1',    // Options
  publicKeyEncoding: {
    type: 'spki',
    format: 'der'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'der'
  }
});
  
// Prints asymmetric key pair
console.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 module
const { generateKeyPairSync } = require('crypto');
  
// Including publicKey and  privateKey from 
// generateKeyPairSync() method with its 
// parameters
const { publicKey, privateKey } = generateKeyPairSync('dsa', {
  modulusLength: 570,
  publicKeyEncoding: {
    type: 'spki',
    format: 'der'
  },
  privateKeyEncoding: {
    type: 'pkcs8',
    format: 'der'
  }
});
  
// Prints asymmetric key pair after encoding
console.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



Last Updated : 11 Oct, 2021
Like Article
Save Article
Previous
Next
Share your thoughts in the comments
Similar Reads