diff --git a/packages/backend/src/apps/cryptography/actions/create-hmac/index.js b/packages/backend/src/apps/cryptography/actions/create-hmac/index.js new file mode 100644 index 00000000..e14f0d67 --- /dev/null +++ b/packages/backend/src/apps/cryptography/actions/create-hmac/index.js @@ -0,0 +1,64 @@ +import { createHmac } from 'node:crypto'; +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Create HMAC', + key: 'createHmac', + description: 'Create a Hash-based Message Authentication Code (HMAC) using the specified algorithm, secret key, and message.', + arguments: [ + { + label: 'Algorithm', + key: 'algorithm', + type: 'dropdown', + required: true, + value: 'sha256', + description: 'Specifies the cryptographic hash function to use for HMAC generation.', + options: [ + { label: 'SHA-256', value: 'sha256' }, + ], + variables: true, + }, + { + label: 'Message', + key: 'message', + type: 'string', + required: true, + description: 'The input message to be hashed. This is the value that will be processed to generate the HMAC.', + variables: true, + }, + { + label: 'Secret Key', + key: 'secretKey', + type: 'string', + required: true, + description: 'The secret key used to create the HMAC.', + variables: true, + }, + { + label: 'Output Encoding', + key: 'outputEncoding', + type: 'dropdown', + required: true, + value: 'hex', + description: 'Specifies the encoding format for the HMAC digest output.', + options: [ + { label: 'base64', value: 'base64' }, + { label: 'base64url', value: 'base64url' }, + { label: 'hex', value: 'hex' }, + ], + variables: true, + }, + ], + + async run($) { + const hash = createHmac($.step.parameters.algorithm, $.step.parameters.secretKey) + .update($.step.parameters.message) + .digest($.step.parameters.outputEncoding); + + $.setActionItem({ + raw: { + hash + }, + }); + }, +}); diff --git a/packages/backend/src/apps/cryptography/actions/create-rsa-sha256-signature/index.js b/packages/backend/src/apps/cryptography/actions/create-rsa-sha256-signature/index.js new file mode 100644 index 00000000..446309e8 --- /dev/null +++ b/packages/backend/src/apps/cryptography/actions/create-rsa-sha256-signature/index.js @@ -0,0 +1,65 @@ +import crypto from 'node:crypto'; +import defineAction from '../../../../helpers/define-action.js'; + +export default defineAction({ + name: 'Create Signature', + key: 'createSignature', + description: 'Create a digital signature using the specified algorithm, secret key, and message.', + arguments: [ + { + label: 'Algorithm', + key: 'algorithm', + type: 'dropdown', + required: true, + value: 'RSA-SHA256', + description: 'Specifies the cryptographic hash function to use for HMAC generation.', + options: [ + { label: 'RSA-SHA256', value: 'RSA-SHA256' }, + ], + variables: true, + }, + { + label: 'Message', + key: 'message', + type: 'string', + required: true, + description: 'The input message to be signed.', + variables: true, + }, + { + label: 'Private Key', + key: 'privateKey', + type: 'string', + required: true, + description: 'The RSA private key in PEM format used for signing.', + variables: true, + }, + { + label: 'Output Encoding', + key: 'outputEncoding', + type: 'dropdown', + required: true, + value: 'hex', + description: 'Specifies the encoding format for the digital signature output. This determines how the generated signature will be represented as a string.', + options: [ + { label: 'base64', value: 'base64' }, + { label: 'base64url', value: 'base64url' }, + { label: 'hex', value: 'hex' }, + ], + variables: true, + }, + ], + + async run($) { + const signer = crypto.createSign($.step.parameters.algorithm); + signer.update($.step.parameters.message); + signer.end(); + const signature = signer.sign($.step.parameters.privateKey, $.step.parameters.outputEncoding); + + $.setActionItem({ + raw: { + signature + }, + }); + }, +}); diff --git a/packages/backend/src/apps/cryptography/actions/index.js b/packages/backend/src/apps/cryptography/actions/index.js new file mode 100644 index 00000000..ab2da71e --- /dev/null +++ b/packages/backend/src/apps/cryptography/actions/index.js @@ -0,0 +1,4 @@ +import createHmac from './create-hmac/index.js'; +import createRsaSha256Signature from './create-rsa-sha256-signature/index.js'; + +export default [createHmac, createRsaSha256Signature]; diff --git a/packages/backend/src/apps/cryptography/assets/favicon.svg b/packages/backend/src/apps/cryptography/assets/favicon.svg new file mode 100644 index 00000000..da529327 --- /dev/null +++ b/packages/backend/src/apps/cryptography/assets/favicon.svg @@ -0,0 +1,3 @@ + + + diff --git a/packages/backend/src/apps/cryptography/index.js b/packages/backend/src/apps/cryptography/index.js new file mode 100644 index 00000000..23e57b2e --- /dev/null +++ b/packages/backend/src/apps/cryptography/index.js @@ -0,0 +1,14 @@ +import defineApp from '../../helpers/define-app.js'; +import actions from './actions/index.js'; + +export default defineApp({ + name: 'Cryptography', + key: 'cryptography', + iconUrl: '{BASE_URL}/apps/cryptography/assets/favicon.svg', + authDocUrl: '{DOCS_URL}/apps/cryptography/connection', + supportsConnections: false, + baseUrl: '', + apiBaseUrl: '', + primaryColor: '001F52', + actions, +}); diff --git a/packages/docs/pages/.vitepress/config.js b/packages/docs/pages/.vitepress/config.js index 219a1d51..216b6514 100644 --- a/packages/docs/pages/.vitepress/config.js +++ b/packages/docs/pages/.vitepress/config.js @@ -59,6 +59,15 @@ export default defineConfig({ { text: 'Connection', link: '/apps/carbone/connection' }, ], }, + { + text: 'Cryptography', + collapsible: true, + collapsed: true, + items: [ + { text: 'Actions', link: '/apps/cryptography/actions' }, + { text: 'Connection', link: '/apps/cryptography/connection' }, + ], + }, { text: 'Datastore', collapsible: true, diff --git a/packages/docs/pages/apps/cryptography/actions.md b/packages/docs/pages/apps/cryptography/actions.md new file mode 100644 index 00000000..a7aa2a77 --- /dev/null +++ b/packages/docs/pages/apps/cryptography/actions.md @@ -0,0 +1,14 @@ +--- +favicon: /favicons/cryptography.svg +items: + - name: Create HMAC + desc: Create a Hash-based Message Authentication Code (HMAC) using the specified algorithm, secret key, and message. + - name: Create Signature + desc: Create a digital signature using the specified algorithm, secret key, and message. +--- + + + + diff --git a/packages/docs/pages/apps/cryptography/connection.md b/packages/docs/pages/apps/cryptography/connection.md new file mode 100644 index 00000000..5cf28566 --- /dev/null +++ b/packages/docs/pages/apps/cryptography/connection.md @@ -0,0 +1,3 @@ +# Cryptography + +Cryptography is a built-in app shipped with Automatisch, allowing you to perform cryptographic operations without needing to connect to any external services. diff --git a/packages/docs/pages/public/favicons/cryptography.svg b/packages/docs/pages/public/favicons/cryptography.svg new file mode 100644 index 00000000..da529327 --- /dev/null +++ b/packages/docs/pages/public/favicons/cryptography.svg @@ -0,0 +1,3 @@ + + +