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 @@
+