-
Notifications
You must be signed in to change notification settings - Fork 0
/
generate-keys.js
52 lines (48 loc) · 1.35 KB
/
generate-keys.js
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
const crypto = require('crypto');
const fs = require('fs');
const path = require('path');
const keysDirectory = path.join(__dirname, 'keys');
const rsaPrivKeyPath = path.join(keysDirectory, 'priv.pem');
function newKeyPair(mod) {
return new Promise((res, rej) => {
crypto.generateKeyPair('rsa', {
modulusLength: mod,
publicKeyEncoding: {
type: 'spki',
format: 'pem',
},
privateKeyEncoding: {
type: 'pkcs8',
format: 'pem',
},
}, (err, pub, priv) => {
if (err) {
rej(err);
} else {
res({priv: crypto.createPrivateKey(priv), pub: crypto.createPublicKey(pub)});
}
});
});
}
(async() => {
try {
const stat = await fs.promises.stat(keysDirectory);
if (!stat.isDirectory()) {
console.error(`Expected '${keysDirectory}' to be a directory!`);
process.exit(1);
}
} catch {
await fs.promises.mkdir(keysDirectory);
}
try {
const stat = await fs.promises.stat(rsaPrivKeyPath);
if (!stat.isDirectory()) {
console.error(`Expected '${keysDirectory}' to be a directory!`);
process.exit(1);
}
} catch {
const rsaKeys = await newKeyPair(4096);
await fs.promises.writeFile(rsaPrivKeyPath, rsaKeys.priv.export({ format: 'pem', type: 'pkcs1' }));
}
console.log('done with key initialization');
})();