From 30e9149d61c30206d080cf5c88d8cde1a282476c Mon Sep 17 00:00:00 2001 From: Corentin Thomasset Date: Fri, 10 Mar 2023 18:16:55 +0100 Subject: feat(new-tool): RSA key pair generator --- src/tools/index.ts | 3 +- src/tools/rsa-key-pair-generator/index.ts | 11 +++++ .../rsa-key-pair-generator.service.ts | 25 +++++++++++ .../rsa-key-pair-generator.vue | 48 ++++++++++++++++++++++ src/utils/defaults.ts | 10 ++++- 5 files changed, 95 insertions(+), 2 deletions(-) create mode 100644 src/tools/rsa-key-pair-generator/index.ts create mode 100644 src/tools/rsa-key-pair-generator/rsa-key-pair-generator.service.ts create mode 100644 src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue (limited to 'src') diff --git a/src/tools/index.ts b/src/tools/index.ts index 6ad328f..18208dd 100644 --- a/src/tools/index.ts +++ b/src/tools/index.ts @@ -1,6 +1,7 @@ import { tool as base64FileConverter } from './base64-file-converter'; import { tool as base64StringConverter } from './base64-string-converter'; import { tool as basicAuthGenerator } from './basic-auth-generator'; +import { tool as rsaKeyPairGenerator } from './rsa-key-pair-generator'; import { tool as textToNatoAlphabet } from './text-to-nato-alphabet'; import { tool as slugifyString } from './slugify-string'; import { tool as keycodeInfo } from './keycode-info'; @@ -44,7 +45,7 @@ import { tool as uuidGenerator } from './uuid-generator'; export const toolsByCategory: ToolCategory[] = [ { name: 'Crypto', - components: [tokenGenerator, hashText, bcrypt, uuidGenerator, cypher, bip39, hmacGenerator], + components: [tokenGenerator, hashText, bcrypt, uuidGenerator, cypher, bip39, hmacGenerator, rsaKeyPairGenerator], }, { name: 'Converter', diff --git a/src/tools/rsa-key-pair-generator/index.ts b/src/tools/rsa-key-pair-generator/index.ts new file mode 100644 index 0000000..c8ab4cd --- /dev/null +++ b/src/tools/rsa-key-pair-generator/index.ts @@ -0,0 +1,11 @@ +import { Certificate } from '@vicons/tabler'; +import { defineTool } from '../tool'; + +export const tool = defineTool({ + name: 'RSA key pair generator', + path: '/rsa-key-pair-generator', + description: 'Generate new random RSA private and public key pem certificates.', + keywords: ['rsa', 'key', 'pair', 'generator', 'public', 'private', 'secret', 'ssh', 'pem'], + component: () => import('./rsa-key-pair-generator.vue'), + icon: Certificate, +}); diff --git a/src/tools/rsa-key-pair-generator/rsa-key-pair-generator.service.ts b/src/tools/rsa-key-pair-generator/rsa-key-pair-generator.service.ts new file mode 100644 index 0000000..a41d5cd --- /dev/null +++ b/src/tools/rsa-key-pair-generator/rsa-key-pair-generator.service.ts @@ -0,0 +1,25 @@ +import { pki } from 'node-forge'; + +export { generateKeyPair }; + +function generateRawPairs({ bits = 2048 }) { + return new Promise((resolve, reject) => + pki.rsa.generateKeyPair({ bits }, (err, keyPair) => { + if (err) { + reject(err); + return; + } + + resolve(keyPair); + }), + ); +} + +async function generateKeyPair(config: { bits?: number } = {}) { + const { privateKey, publicKey } = await generateRawPairs(config); + + return { + publicKeyPem: pki.publicKeyToPem(publicKey), + privateKeyPem: pki.privateKeyToPem(privateKey), + }; +} diff --git a/src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue b/src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue new file mode 100644 index 0000000..fbad58d --- /dev/null +++ b/src/tools/rsa-key-pair-generator/rsa-key-pair-generator.vue @@ -0,0 +1,48 @@ + + + + + diff --git a/src/utils/defaults.ts b/src/utils/defaults.ts index 3d253d5..1e52b49 100644 --- a/src/utils/defaults.ts +++ b/src/utils/defaults.ts @@ -1,4 +1,4 @@ -export { withDefaultOnError }; +export { withDefaultOnError, withDefaultOnErrorAsync }; function withDefaultOnError(cb: () => A, defaultValue: B): A | B { try { @@ -7,3 +7,11 @@ function withDefaultOnError(cb: () => A, defaultValue: B): A | B { return defaultValue; } } + +async function withDefaultOnErrorAsync(cb: () => A, defaultValue: B): Promise | B> { + try { + return await cb(); + } catch (_) { + return defaultValue; + } +} -- cgit v1.2.3