You can not select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
79 lines
1.5 KiB
79 lines
1.5 KiB
'use strict'
|
|
|
|
const crypto = require('crypto')
|
|
|
|
function generateKeyPair () {
|
|
const options = {
|
|
modulusLength: 2048,
|
|
publicExponent: 0x10001,
|
|
publicKeyEncoding: {
|
|
type: 'spki',
|
|
format: 'pem'
|
|
},
|
|
privateKeyEncoding: {
|
|
type: 'pkcs8',
|
|
format: 'pem'
|
|
}
|
|
}
|
|
return crypto.generateKeyPairSync('rsa', options)
|
|
}
|
|
|
|
function generateKeyPairProtected (passphrase) {
|
|
const options = {
|
|
modulusLength: 2048,
|
|
publicExponent: 0x10001,
|
|
publicKeyEncoding: {
|
|
type: 'spki',
|
|
format: 'pem'
|
|
},
|
|
privateKeyEncoding: {
|
|
type: 'pkcs8',
|
|
format: 'pem',
|
|
cipher: 'aes-256-cbc',
|
|
passphrase
|
|
}
|
|
}
|
|
return crypto.generateKeyPairSync('rsa', options)
|
|
}
|
|
|
|
function generateKeyPairECDSA () {
|
|
const options = {
|
|
modulusLength: 2048,
|
|
namedCurve: 'prime256v1',
|
|
publicKeyEncoding: {
|
|
type: 'spki',
|
|
format: 'pem'
|
|
},
|
|
privateKeyEncoding: {
|
|
type: 'pkcs8',
|
|
format: 'pem'
|
|
}
|
|
}
|
|
return crypto.generateKeyPairSync('ec', options)
|
|
}
|
|
|
|
function generateKeyPairECDSAProtected (passphrase) {
|
|
const options = {
|
|
modulusLength: 2048,
|
|
namedCurve: 'prime256v1',
|
|
publicKeyEncoding: {
|
|
type: 'spki',
|
|
format: 'pem'
|
|
},
|
|
privateKeyEncoding: {
|
|
type: 'pkcs8',
|
|
format: 'pem',
|
|
cipher: 'aes-256-cbc',
|
|
passphrase
|
|
}
|
|
}
|
|
return crypto.generateKeyPairSync('ec', options)
|
|
}
|
|
|
|
module.exports = {
|
|
generateKeyPair,
|
|
generateKeyPairProtected,
|
|
generateKeyPairECDSA,
|
|
generateKeyPairECDSAProtected
|
|
}
|