@pcircle/evidencemcp-server 0.1.0 → 0.2.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +27 -297
- package/dist/index.d.ts +1 -15
- package/dist/index.d.ts.map +1 -1
- package/dist/index.js +55 -123
- package/dist/index.js.map +1 -1
- package/dist/lib/crypto/decrypt.d.ts +11 -0
- package/dist/lib/crypto/decrypt.d.ts.map +1 -0
- package/dist/lib/crypto/decrypt.js +30 -0
- package/dist/lib/crypto/decrypt.js.map +1 -0
- package/dist/lib/crypto/encrypt.d.ts +13 -0
- package/dist/lib/crypto/encrypt.d.ts.map +1 -0
- package/dist/lib/crypto/encrypt.js +24 -0
- package/dist/lib/crypto/encrypt.js.map +1 -0
- package/dist/lib/crypto/index.d.ts +6 -0
- package/dist/lib/crypto/index.d.ts.map +1 -0
- package/dist/lib/crypto/index.js +5 -0
- package/dist/lib/crypto/index.js.map +1 -0
- package/dist/lib/crypto/key-derivation.d.ts +30 -0
- package/dist/lib/crypto/key-derivation.d.ts.map +1 -0
- package/dist/lib/crypto/key-derivation.js +63 -0
- package/dist/lib/crypto/key-derivation.js.map +1 -0
- package/dist/lib/crypto/types.d.ts +22 -0
- package/dist/lib/crypto/types.d.ts.map +1 -0
- package/dist/lib/crypto/types.js +10 -0
- package/dist/lib/crypto/types.js.map +1 -0
- package/dist/lib/storage/database.d.ts +66 -0
- package/dist/lib/storage/database.d.ts.map +1 -0
- package/dist/lib/storage/database.js +195 -0
- package/dist/lib/storage/database.js.map +1 -0
- package/dist/lib/storage/export.d.ts +26 -0
- package/dist/lib/storage/export.d.ts.map +1 -0
- package/dist/lib/storage/export.js +113 -0
- package/dist/lib/storage/export.js.map +1 -0
- package/dist/lib/storage/git.d.ts +16 -0
- package/dist/lib/storage/git.d.ts.map +1 -0
- package/dist/lib/storage/git.js +55 -0
- package/dist/lib/storage/git.js.map +1 -0
- package/dist/lib/storage/index.d.ts +6 -0
- package/dist/lib/storage/index.d.ts.map +1 -0
- package/dist/lib/storage/index.js +5 -0
- package/dist/lib/storage/index.js.map +1 -0
- package/dist/lib/storage/schema.d.ts +17 -0
- package/dist/lib/storage/schema.d.ts.map +1 -0
- package/dist/lib/storage/schema.js +103 -0
- package/dist/lib/storage/schema.js.map +1 -0
- package/dist/lib/storage/types.d.ts +26 -0
- package/dist/lib/storage/types.d.ts.map +1 -0
- package/dist/lib/storage/types.js +2 -0
- package/dist/lib/storage/types.js.map +1 -0
- package/dist/test-helpers.d.ts +12 -30
- package/dist/test-helpers.d.ts.map +1 -1
- package/dist/test-helpers.js +59 -121
- package/dist/test-helpers.js.map +1 -1
- package/dist/types.d.ts +0 -25
- package/dist/types.d.ts.map +1 -1
- package/package.json +7 -3
package/dist/index.js
CHANGED
|
@@ -1,14 +1,15 @@
|
|
|
1
1
|
#!/usr/bin/env node
|
|
2
2
|
import { McpServer, ResourceTemplate } from '@modelcontextprotocol/sdk/server/mcp.js';
|
|
3
3
|
import { StdioServerTransport } from '@modelcontextprotocol/sdk/server/stdio.js';
|
|
4
|
-
import { EvidenceDatabase, getCurrentCommit } from '
|
|
5
|
-
import { deriveKey, encrypt, decrypt } from '
|
|
4
|
+
import { EvidenceDatabase, getCurrentCommit } from './lib/storage/index.js';
|
|
5
|
+
import { deriveKey, encrypt, decrypt } from './lib/crypto/index.js';
|
|
6
6
|
import * as z from 'zod';
|
|
7
7
|
import * as crypto from 'crypto';
|
|
8
|
+
function getErrorMessage(error) {
|
|
9
|
+
return error instanceof Error ? error.message : 'Unknown error';
|
|
10
|
+
}
|
|
8
11
|
/**
|
|
9
|
-
* EvidenceMCP Server
|
|
10
|
-
*
|
|
11
|
-
* Captures LLM conversations and stores them as encrypted evidence
|
|
12
|
+
* EvidenceMCP Server - Captures LLM conversations as encrypted evidence
|
|
12
13
|
* with Git timestamps and export capabilities.
|
|
13
14
|
*/
|
|
14
15
|
export class EvidenceMCPServer {
|
|
@@ -19,25 +20,18 @@ export class EvidenceMCPServer {
|
|
|
19
20
|
constructor(config) {
|
|
20
21
|
this.config = config;
|
|
21
22
|
try {
|
|
22
|
-
// Initialize database with error handling
|
|
23
23
|
this.db = new EvidenceDatabase(config.dbPath);
|
|
24
24
|
}
|
|
25
25
|
catch (error) {
|
|
26
|
-
|
|
27
|
-
throw new Error(`Failed to initialize database: ${errorMsg}`);
|
|
26
|
+
throw new Error(`Failed to initialize database: ${getErrorMessage(error)}`);
|
|
28
27
|
}
|
|
29
|
-
// Initialize MCP server
|
|
30
28
|
this.server = new McpServer({
|
|
31
29
|
name: config.name || 'traceguard-mcp',
|
|
32
30
|
version: config.version || '0.1.0'
|
|
33
31
|
});
|
|
34
|
-
// Register tools and resources (will implement in later steps)
|
|
35
32
|
this.registerTools();
|
|
36
33
|
this.registerResources();
|
|
37
34
|
}
|
|
38
|
-
/**
|
|
39
|
-
* Derive encryption key from password (lazy initialization)
|
|
40
|
-
*/
|
|
41
35
|
async getDerivedKey() {
|
|
42
36
|
if (!this.derivedKey) {
|
|
43
37
|
const result = await deriveKey(this.config.password);
|
|
@@ -45,11 +39,7 @@ export class EvidenceMCPServer {
|
|
|
45
39
|
}
|
|
46
40
|
return this.derivedKey;
|
|
47
41
|
}
|
|
48
|
-
/**
|
|
49
|
-
* Register MCP tools for evidence management
|
|
50
|
-
*/
|
|
51
42
|
registerTools() {
|
|
52
|
-
// Tool 1: capture-evidence
|
|
53
43
|
this.server.registerTool('capture-evidence', {
|
|
54
44
|
title: 'Capture Evidence',
|
|
55
45
|
description: 'Capture and encrypt LLM conversation as evidence',
|
|
@@ -68,24 +58,16 @@ export class EvidenceMCPServer {
|
|
|
68
58
|
}
|
|
69
59
|
}, async (params) => {
|
|
70
60
|
try {
|
|
71
|
-
// Input validation
|
|
72
61
|
if (!params.content || params.content.trim().length === 0) {
|
|
73
62
|
throw new Error('Content cannot be empty');
|
|
74
63
|
}
|
|
75
64
|
if (params.messageCount <= 0) {
|
|
76
65
|
throw new Error('Message count must be positive');
|
|
77
66
|
}
|
|
78
|
-
// Derive encryption key
|
|
79
67
|
const key = await this.getDerivedKey();
|
|
80
|
-
// Encrypt content
|
|
81
68
|
const encrypted = await encrypt(params.content, key);
|
|
82
|
-
// Get Git timestamp
|
|
83
69
|
const gitInfo = await getCurrentCommit();
|
|
84
|
-
|
|
85
|
-
const hash = crypto.createHash('sha256');
|
|
86
|
-
hash.update(params.content);
|
|
87
|
-
const contentHash = hash.digest('hex');
|
|
88
|
-
// Store evidence
|
|
70
|
+
const contentHash = crypto.createHash('sha256').update(params.content).digest('hex');
|
|
89
71
|
const id = this.db.create({
|
|
90
72
|
timestamp: new Date().toISOString(),
|
|
91
73
|
conversationId: params.conversationId,
|
|
@@ -98,26 +80,20 @@ export class EvidenceMCPServer {
|
|
|
98
80
|
gitTimestamp: gitInfo?.timestamp || null,
|
|
99
81
|
tags: params.tags || null
|
|
100
82
|
});
|
|
101
|
-
const output = {
|
|
102
|
-
id,
|
|
103
|
-
timestamp: new Date().toISOString(),
|
|
104
|
-
gitCommitHash: gitInfo?.commitHash || null,
|
|
105
|
-
success: true
|
|
106
|
-
};
|
|
107
83
|
return {
|
|
108
|
-
content: [{
|
|
109
|
-
|
|
110
|
-
|
|
111
|
-
|
|
112
|
-
|
|
84
|
+
content: [{ type: 'text', text: `Evidence captured successfully. ID: ${id}` }],
|
|
85
|
+
structuredContent: {
|
|
86
|
+
id,
|
|
87
|
+
timestamp: new Date().toISOString(),
|
|
88
|
+
gitCommitHash: gitInfo?.commitHash || null,
|
|
89
|
+
success: true
|
|
90
|
+
}
|
|
113
91
|
};
|
|
114
92
|
}
|
|
115
93
|
catch (error) {
|
|
116
|
-
|
|
117
|
-
throw new Error(`[Tool: capture-evidence] ${errorMsg}`);
|
|
94
|
+
throw new Error(`[Tool: capture-evidence] ${getErrorMessage(error)}`);
|
|
118
95
|
}
|
|
119
96
|
});
|
|
120
|
-
// Tool 2: list-evidences
|
|
121
97
|
this.server.registerTool('list-evidences', {
|
|
122
98
|
title: 'List Evidences',
|
|
123
99
|
description: 'List all captured evidence with pagination',
|
|
@@ -138,42 +114,30 @@ export class EvidenceMCPServer {
|
|
|
138
114
|
}
|
|
139
115
|
}, async (params) => {
|
|
140
116
|
try {
|
|
141
|
-
// Input validation
|
|
142
117
|
if (params.limit !== undefined && params.limit <= 0) {
|
|
143
118
|
throw new Error('Limit must be positive');
|
|
144
119
|
}
|
|
145
120
|
if (params.offset !== undefined && params.offset < 0) {
|
|
146
121
|
throw new Error('Offset cannot be negative');
|
|
147
122
|
}
|
|
148
|
-
const evidences = this.db.list({
|
|
149
|
-
|
|
150
|
-
|
|
151
|
-
|
|
152
|
-
|
|
153
|
-
|
|
154
|
-
|
|
155
|
-
|
|
156
|
-
|
|
157
|
-
llmProvider: e.llmProvider,
|
|
158
|
-
messageCount: e.messageCount,
|
|
159
|
-
tags: e.tags
|
|
160
|
-
})),
|
|
161
|
-
total: evidences.length
|
|
162
|
-
};
|
|
123
|
+
const evidences = this.db.list({ limit: params.limit, offset: params.offset });
|
|
124
|
+
const mappedEvidences = evidences.map(e => ({
|
|
125
|
+
id: e.id,
|
|
126
|
+
timestamp: e.timestamp,
|
|
127
|
+
conversationId: e.conversationId,
|
|
128
|
+
llmProvider: e.llmProvider,
|
|
129
|
+
messageCount: e.messageCount,
|
|
130
|
+
tags: e.tags
|
|
131
|
+
}));
|
|
163
132
|
return {
|
|
164
|
-
content: [{
|
|
165
|
-
|
|
166
|
-
text: `Found ${evidences.length} evidence(s)`
|
|
167
|
-
}],
|
|
168
|
-
structuredContent: output
|
|
133
|
+
content: [{ type: 'text', text: `Found ${evidences.length} evidence(s)` }],
|
|
134
|
+
structuredContent: { evidences: mappedEvidences, total: evidences.length }
|
|
169
135
|
};
|
|
170
136
|
}
|
|
171
137
|
catch (error) {
|
|
172
|
-
|
|
173
|
-
throw new Error(`[Tool: list-evidences] ${errorMsg}`);
|
|
138
|
+
throw new Error(`[Tool: list-evidences] ${getErrorMessage(error)}`);
|
|
174
139
|
}
|
|
175
140
|
});
|
|
176
|
-
// Tool 3: export-evidences
|
|
177
141
|
this.server.registerTool('export-evidences', {
|
|
178
142
|
title: 'Export Evidences',
|
|
179
143
|
description: 'Export evidences to encrypted ZIP archive',
|
|
@@ -189,34 +153,27 @@ export class EvidenceMCPServer {
|
|
|
189
153
|
}
|
|
190
154
|
}, async (params) => {
|
|
191
155
|
try {
|
|
192
|
-
const { exportEvidences } = await import('
|
|
156
|
+
const { exportEvidences } = await import('./lib/storage/index.js');
|
|
157
|
+
const fs = await import('fs');
|
|
193
158
|
const result = await exportEvidences(this.db, {
|
|
194
159
|
evidenceIds: params.evidenceIds,
|
|
195
160
|
includeGitInfo: params.includeGitInfo ?? false
|
|
196
161
|
});
|
|
197
|
-
// Write ZIP to file
|
|
198
|
-
const fs = await import('fs');
|
|
199
162
|
fs.writeFileSync(result.filename, result.zipData);
|
|
200
|
-
const output = {
|
|
201
|
-
filename: result.filename,
|
|
202
|
-
checksum: result.checksum,
|
|
203
|
-
evidenceCount: result.evidenceCount,
|
|
204
|
-
success: true
|
|
205
|
-
};
|
|
206
163
|
return {
|
|
207
|
-
content: [{
|
|
208
|
-
|
|
209
|
-
|
|
210
|
-
|
|
211
|
-
|
|
164
|
+
content: [{ type: 'text', text: `Exported ${result.evidenceCount} evidence(s) to ${result.filename}` }],
|
|
165
|
+
structuredContent: {
|
|
166
|
+
filename: result.filename,
|
|
167
|
+
checksum: result.checksum,
|
|
168
|
+
evidenceCount: result.evidenceCount,
|
|
169
|
+
success: true
|
|
170
|
+
}
|
|
212
171
|
};
|
|
213
172
|
}
|
|
214
173
|
catch (error) {
|
|
215
|
-
|
|
216
|
-
throw new Error(`[Tool: export-evidences] ${errorMsg}`);
|
|
174
|
+
throw new Error(`[Tool: export-evidences] ${getErrorMessage(error)}`);
|
|
217
175
|
}
|
|
218
176
|
});
|
|
219
|
-
// Tool 4: get-evidence
|
|
220
177
|
this.server.registerTool('get-evidence', {
|
|
221
178
|
title: 'Get Evidence',
|
|
222
179
|
description: 'Retrieve and decrypt specific evidence by ID',
|
|
@@ -242,81 +199,58 @@ export class EvidenceMCPServer {
|
|
|
242
199
|
if (!evidence) {
|
|
243
200
|
throw new Error(`Evidence not found: ${params.id}`);
|
|
244
201
|
}
|
|
245
|
-
// Decrypt content
|
|
246
|
-
const { decrypt } = await import('@evidencemcp/crypto');
|
|
247
202
|
const key = await this.getDerivedKey();
|
|
248
203
|
const decrypted = decrypt(evidence.encryptedContent, evidence.nonce, key);
|
|
249
|
-
const
|
|
250
|
-
|
|
251
|
-
|
|
252
|
-
conversationId: evidence.conversationId,
|
|
253
|
-
llmProvider: evidence.llmProvider,
|
|
254
|
-
content: decrypted,
|
|
255
|
-
messageCount: evidence.messageCount,
|
|
256
|
-
gitInfo: evidence.gitCommitHash ? {
|
|
257
|
-
commitHash: evidence.gitCommitHash,
|
|
258
|
-
timestamp: evidence.gitTimestamp
|
|
259
|
-
} : null,
|
|
260
|
-
tags: evidence.tags
|
|
261
|
-
};
|
|
204
|
+
const gitInfo = evidence.gitCommitHash
|
|
205
|
+
? { commitHash: evidence.gitCommitHash, timestamp: evidence.gitTimestamp }
|
|
206
|
+
: null;
|
|
262
207
|
return {
|
|
263
|
-
content: [{
|
|
264
|
-
|
|
265
|
-
|
|
266
|
-
|
|
267
|
-
|
|
208
|
+
content: [{ type: 'text', text: `Evidence ID: ${evidence.id}\nContent: ${decrypted.substring(0, 100)}...` }],
|
|
209
|
+
structuredContent: {
|
|
210
|
+
id: evidence.id,
|
|
211
|
+
timestamp: evidence.timestamp,
|
|
212
|
+
conversationId: evidence.conversationId,
|
|
213
|
+
llmProvider: evidence.llmProvider,
|
|
214
|
+
content: decrypted,
|
|
215
|
+
messageCount: evidence.messageCount,
|
|
216
|
+
gitInfo,
|
|
217
|
+
tags: evidence.tags
|
|
218
|
+
}
|
|
268
219
|
};
|
|
269
220
|
}
|
|
270
221
|
catch (error) {
|
|
271
|
-
|
|
272
|
-
throw new Error(`[Tool: get-evidence] ${errorMsg}`);
|
|
222
|
+
throw new Error(`[Tool: get-evidence] ${getErrorMessage(error)}`);
|
|
273
223
|
}
|
|
274
224
|
});
|
|
275
225
|
}
|
|
276
|
-
/**
|
|
277
|
-
* Register MCP resources for evidence access
|
|
278
|
-
*/
|
|
279
226
|
registerResources() {
|
|
280
|
-
// Resource: evidence://{id}
|
|
281
227
|
this.server.registerResource('evidence', new ResourceTemplate('evidence://{id}', { list: undefined }), {
|
|
282
228
|
title: 'Evidence Content',
|
|
283
229
|
description: 'Access encrypted evidence record by ID',
|
|
284
230
|
mimeType: 'text/plain'
|
|
285
231
|
}, async (uri, { id }) => {
|
|
286
232
|
try {
|
|
287
|
-
// Find evidence by ID
|
|
288
233
|
const evidence = this.db.findById(id);
|
|
289
234
|
if (!evidence) {
|
|
290
235
|
throw new Error(`Evidence with ID ${id} not found`);
|
|
291
236
|
}
|
|
292
|
-
// Decrypt content using correct 3-argument signature
|
|
293
237
|
const key = await this.getDerivedKey();
|
|
294
238
|
const decrypted = decrypt(evidence.encryptedContent, evidence.nonce, key);
|
|
295
239
|
return {
|
|
296
|
-
contents: [{
|
|
297
|
-
uri: uri.href,
|
|
298
|
-
mimeType: 'text/plain',
|
|
299
|
-
text: decrypted
|
|
300
|
-
}]
|
|
240
|
+
contents: [{ uri: uri.href, mimeType: 'text/plain', text: decrypted }]
|
|
301
241
|
};
|
|
302
242
|
}
|
|
303
243
|
catch (error) {
|
|
304
|
-
|
|
305
|
-
throw new Error(`Failed to access evidence resource: ${errorMsg}`);
|
|
244
|
+
throw new Error(`Failed to access evidence resource: ${getErrorMessage(error)}`);
|
|
306
245
|
}
|
|
307
246
|
});
|
|
308
247
|
}
|
|
309
|
-
/**
|
|
310
|
-
* Start the MCP server with stdio transport
|
|
311
|
-
*/
|
|
312
248
|
async start() {
|
|
313
249
|
const transport = new StdioServerTransport();
|
|
314
250
|
await this.server.connect(transport);
|
|
315
251
|
}
|
|
316
252
|
}
|
|
317
|
-
// CLI entry point
|
|
318
253
|
async function main() {
|
|
319
|
-
// Read config from environment variables
|
|
320
254
|
const config = {
|
|
321
255
|
dbPath: process.env.EVIDENCEMCP_DB_PATH || './evidence.db',
|
|
322
256
|
password: process.env.EVIDENCEMCP_PASSWORD || ''
|
|
@@ -328,13 +262,11 @@ async function main() {
|
|
|
328
262
|
const server = new EvidenceMCPServer(config);
|
|
329
263
|
await server.start();
|
|
330
264
|
}
|
|
331
|
-
// Run if called directly
|
|
332
265
|
if (import.meta.url === `file://${process.argv[1]}`) {
|
|
333
266
|
main().catch((error) => {
|
|
334
267
|
console.error('Server error:', error);
|
|
335
268
|
process.exit(1);
|
|
336
269
|
});
|
|
337
270
|
}
|
|
338
|
-
// Export test helpers for testing
|
|
339
271
|
export { EvidenceMCPTestHelpers } from './test-helpers.js';
|
|
340
272
|
//# sourceMappingURL=index.js.map
|
package/dist/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,11 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Decrypt ciphertext using XChaCha20-Poly1305 AEAD
|
|
3
|
+
*
|
|
4
|
+
* @param ciphertext - Encrypted data
|
|
5
|
+
* @param nonce - 24-byte nonce used during encryption
|
|
6
|
+
* @param key - 32-byte encryption key
|
|
7
|
+
* @returns Decrypted plaintext
|
|
8
|
+
* @throws Error if authentication fails or key is wrong
|
|
9
|
+
*/
|
|
10
|
+
export declare function decrypt(ciphertext: Uint8Array, nonce: Uint8Array, key: Uint8Array): string;
|
|
11
|
+
//# sourceMappingURL=decrypt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decrypt.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/decrypt.ts"],"names":[],"mappings":"AAEA;;;;;;;;GAQG;AACH,wBAAgB,OAAO,CACrB,UAAU,EAAE,UAAU,EACtB,KAAK,EAAE,UAAU,EACjB,GAAG,EAAE,UAAU,GACd,MAAM,CAqBR"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import { xchacha20poly1305 } from '@noble/ciphers/chacha';
|
|
2
|
+
/**
|
|
3
|
+
* Decrypt ciphertext using XChaCha20-Poly1305 AEAD
|
|
4
|
+
*
|
|
5
|
+
* @param ciphertext - Encrypted data
|
|
6
|
+
* @param nonce - 24-byte nonce used during encryption
|
|
7
|
+
* @param key - 32-byte encryption key
|
|
8
|
+
* @returns Decrypted plaintext
|
|
9
|
+
* @throws Error if authentication fails or key is wrong
|
|
10
|
+
*/
|
|
11
|
+
export function decrypt(ciphertext, nonce, key) {
|
|
12
|
+
if (key.length !== 32) {
|
|
13
|
+
throw new Error('Key must be 32 bytes');
|
|
14
|
+
}
|
|
15
|
+
if (nonce.length !== 24) {
|
|
16
|
+
throw new Error('Nonce must be 24 bytes');
|
|
17
|
+
}
|
|
18
|
+
// Create cipher instance
|
|
19
|
+
const cipher = xchacha20poly1305(key, nonce);
|
|
20
|
+
try {
|
|
21
|
+
// Decrypt and verify authentication tag
|
|
22
|
+
const plaintextBytes = cipher.decrypt(ciphertext);
|
|
23
|
+
// Convert bytes back to string
|
|
24
|
+
return new TextDecoder().decode(plaintextBytes);
|
|
25
|
+
}
|
|
26
|
+
catch (error) {
|
|
27
|
+
throw new Error('Decryption failed: invalid key or tampered data');
|
|
28
|
+
}
|
|
29
|
+
}
|
|
30
|
+
//# sourceMappingURL=decrypt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"decrypt.js","sourceRoot":"","sources":["../../../src/lib/crypto/decrypt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAE1D;;;;;;;;GAQG;AACH,MAAM,UAAU,OAAO,CACrB,UAAsB,EACtB,KAAiB,EACjB,GAAe;IAEf,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,IAAI,KAAK,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACxB,MAAM,IAAI,KAAK,CAAC,wBAAwB,CAAC,CAAC;IAC5C,CAAC;IAED,yBAAyB;IACzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE7C,IAAI,CAAC;QACH,wCAAwC;QACxC,MAAM,cAAc,GAAG,MAAM,CAAC,OAAO,CAAC,UAAU,CAAC,CAAC;QAElD,+BAA+B;QAC/B,OAAO,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,cAAc,CAAC,CAAC;IAClD,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,MAAM,IAAI,KAAK,CAAC,iDAAiD,CAAC,CAAC;IACrE,CAAC;AACH,CAAC"}
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export interface EncryptedData {
|
|
2
|
+
ciphertext: Uint8Array;
|
|
3
|
+
nonce: Uint8Array;
|
|
4
|
+
}
|
|
5
|
+
/**
|
|
6
|
+
* Encrypt plaintext using XChaCha20-Poly1305 AEAD
|
|
7
|
+
*
|
|
8
|
+
* @param plaintext - Text to encrypt
|
|
9
|
+
* @param key - 32-byte encryption key
|
|
10
|
+
* @returns Encrypted data with nonce
|
|
11
|
+
*/
|
|
12
|
+
export declare function encrypt(plaintext: string, key: Uint8Array): EncryptedData;
|
|
13
|
+
//# sourceMappingURL=encrypt.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encrypt.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/encrypt.ts"],"names":[],"mappings":"AAGA,MAAM,WAAW,aAAa;IAC5B,UAAU,EAAE,UAAU,CAAC;IACvB,KAAK,EAAE,UAAU,CAAC;CACnB;AAED;;;;;;GAMG;AACH,wBAAgB,OAAO,CAAC,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,UAAU,GAAG,aAAa,CAkBzE"}
|
|
@@ -0,0 +1,24 @@
|
|
|
1
|
+
import { xchacha20poly1305 } from '@noble/ciphers/chacha';
|
|
2
|
+
import { randomBytes } from '@noble/hashes/utils';
|
|
3
|
+
/**
|
|
4
|
+
* Encrypt plaintext using XChaCha20-Poly1305 AEAD
|
|
5
|
+
*
|
|
6
|
+
* @param plaintext - Text to encrypt
|
|
7
|
+
* @param key - 32-byte encryption key
|
|
8
|
+
* @returns Encrypted data with nonce
|
|
9
|
+
*/
|
|
10
|
+
export function encrypt(plaintext, key) {
|
|
11
|
+
if (key.length !== 32) {
|
|
12
|
+
throw new Error('Key must be 32 bytes');
|
|
13
|
+
}
|
|
14
|
+
// Generate random 24-byte nonce (XChaCha20 extended nonce)
|
|
15
|
+
const nonce = randomBytes(24);
|
|
16
|
+
// Convert plaintext to bytes
|
|
17
|
+
const plaintextBytes = new TextEncoder().encode(plaintext);
|
|
18
|
+
// Create cipher instance
|
|
19
|
+
const cipher = xchacha20poly1305(key, nonce);
|
|
20
|
+
// Encrypt with authentication
|
|
21
|
+
const ciphertext = cipher.encrypt(plaintextBytes);
|
|
22
|
+
return { ciphertext, nonce };
|
|
23
|
+
}
|
|
24
|
+
//# sourceMappingURL=encrypt.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encrypt.js","sourceRoot":"","sources":["../../../src/lib/crypto/encrypt.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,iBAAiB,EAAE,MAAM,uBAAuB,CAAC;AAC1D,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAOlD;;;;;;GAMG;AACH,MAAM,UAAU,OAAO,CAAC,SAAiB,EAAE,GAAe;IACxD,IAAI,GAAG,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACtB,MAAM,IAAI,KAAK,CAAC,sBAAsB,CAAC,CAAC;IAC1C,CAAC;IAED,2DAA2D;IAC3D,MAAM,KAAK,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAE9B,6BAA6B;IAC7B,MAAM,cAAc,GAAG,IAAI,WAAW,EAAE,CAAC,MAAM,CAAC,SAAS,CAAC,CAAC;IAE3D,yBAAyB;IACzB,MAAM,MAAM,GAAG,iBAAiB,CAAC,GAAG,EAAE,KAAK,CAAC,CAAC;IAE7C,8BAA8B;IAC9B,MAAM,UAAU,GAAG,MAAM,CAAC,OAAO,CAAC,cAAc,CAAC,CAAC;IAElD,OAAO,EAAE,UAAU,EAAE,KAAK,EAAE,CAAC;AAC/B,CAAC"}
|
|
@@ -0,0 +1,6 @@
|
|
|
1
|
+
export { deriveKey, verifyKey } from './key-derivation.js';
|
|
2
|
+
export { encrypt } from './encrypt.js';
|
|
3
|
+
export { decrypt } from './decrypt.js';
|
|
4
|
+
export type { DerivedKey, KeyDerivationParams, EncryptedData } from './types.js';
|
|
5
|
+
export { DEFAULT_KDF_PARAMS } from './types.js';
|
|
6
|
+
//# sourceMappingURL=index.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,YAAY,EAAE,UAAU,EAAE,mBAAmB,EAAE,aAAa,EAAE,MAAM,YAAY,CAAC;AACjF,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../../src/lib/crypto/index.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,SAAS,EAAE,SAAS,EAAE,MAAM,qBAAqB,CAAC;AAC3D,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AACvC,OAAO,EAAE,OAAO,EAAE,MAAM,cAAc,CAAC;AAEvC,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC"}
|
|
@@ -0,0 +1,30 @@
|
|
|
1
|
+
import type { DerivedKey, KeyDerivationParams } from './types.js';
|
|
2
|
+
/**
|
|
3
|
+
* Derive encryption key from password using Argon2id
|
|
4
|
+
*
|
|
5
|
+
* @param password - User password (must not be empty)
|
|
6
|
+
* @param params - Optional KDF parameters (uses OWASP defaults)
|
|
7
|
+
* @returns Derived key and salt
|
|
8
|
+
*
|
|
9
|
+
* @security When comparing derived keys for authentication,
|
|
10
|
+
* use constant-time comparison to prevent timing attacks:
|
|
11
|
+
* @example
|
|
12
|
+
* ```typescript
|
|
13
|
+
* import { timingSafeEqual } from 'node:crypto';
|
|
14
|
+
*
|
|
15
|
+
* const derived = await deriveKey('password');
|
|
16
|
+
* // SECURE - constant-time comparison
|
|
17
|
+
* const match = timingSafeEqual(derived.key, storedKey);
|
|
18
|
+
* ```
|
|
19
|
+
*/
|
|
20
|
+
export declare function deriveKey(password: string, params?: Partial<KeyDerivationParams>): Promise<DerivedKey>;
|
|
21
|
+
/**
|
|
22
|
+
* Re-derive key from password and existing salt (for verification)
|
|
23
|
+
*
|
|
24
|
+
* @param password - User password
|
|
25
|
+
* @param salt - Existing salt (from previous derivation)
|
|
26
|
+
* @param params - Optional KDF parameters
|
|
27
|
+
* @returns Derived key with same salt
|
|
28
|
+
*/
|
|
29
|
+
export declare function verifyKey(password: string, salt: Uint8Array, params?: Partial<KeyDerivationParams>): Promise<DerivedKey>;
|
|
30
|
+
//# sourceMappingURL=key-derivation.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-derivation.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/key-derivation.ts"],"names":[],"mappings":"AAEA,OAAO,KAAK,EAAE,UAAU,EAAE,mBAAmB,EAAE,MAAM,YAAY,CAAC;AAGlE;;;;;;;;;;;;;;;;;GAiBG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACxC,OAAO,CAAC,UAAU,CAAC,CAuBrB;AAED;;;;;;;GAOG;AACH,wBAAsB,SAAS,CAC7B,QAAQ,EAAE,MAAM,EAChB,IAAI,EAAE,UAAU,EAChB,MAAM,GAAE,OAAO,CAAC,mBAAmB,CAAM,GACxC,OAAO,CAAC,UAAU,CAAC,CAwBrB"}
|
|
@@ -0,0 +1,63 @@
|
|
|
1
|
+
import { argon2id } from '@noble/hashes/argon2';
|
|
2
|
+
import { randomBytes } from '@noble/hashes/utils';
|
|
3
|
+
import { DEFAULT_KDF_PARAMS } from './types.js';
|
|
4
|
+
/**
|
|
5
|
+
* Derive encryption key from password using Argon2id
|
|
6
|
+
*
|
|
7
|
+
* @param password - User password (must not be empty)
|
|
8
|
+
* @param params - Optional KDF parameters (uses OWASP defaults)
|
|
9
|
+
* @returns Derived key and salt
|
|
10
|
+
*
|
|
11
|
+
* @security When comparing derived keys for authentication,
|
|
12
|
+
* use constant-time comparison to prevent timing attacks:
|
|
13
|
+
* @example
|
|
14
|
+
* ```typescript
|
|
15
|
+
* import { timingSafeEqual } from 'node:crypto';
|
|
16
|
+
*
|
|
17
|
+
* const derived = await deriveKey('password');
|
|
18
|
+
* // SECURE - constant-time comparison
|
|
19
|
+
* const match = timingSafeEqual(derived.key, storedKey);
|
|
20
|
+
* ```
|
|
21
|
+
*/
|
|
22
|
+
export async function deriveKey(password, params = {}) {
|
|
23
|
+
if (!password || password.length === 0) {
|
|
24
|
+
throw new Error('Password cannot be empty');
|
|
25
|
+
}
|
|
26
|
+
const kdfParams = { ...DEFAULT_KDF_PARAMS, ...params };
|
|
27
|
+
// Generate random salt (16 bytes)
|
|
28
|
+
const salt = randomBytes(16);
|
|
29
|
+
// Derive key using Argon2id
|
|
30
|
+
const key = argon2id(password, salt, {
|
|
31
|
+
m: kdfParams.memory,
|
|
32
|
+
t: kdfParams.iterations,
|
|
33
|
+
p: kdfParams.parallelism,
|
|
34
|
+
dkLen: kdfParams.keyLength,
|
|
35
|
+
});
|
|
36
|
+
return { key, salt };
|
|
37
|
+
}
|
|
38
|
+
/**
|
|
39
|
+
* Re-derive key from password and existing salt (for verification)
|
|
40
|
+
*
|
|
41
|
+
* @param password - User password
|
|
42
|
+
* @param salt - Existing salt (from previous derivation)
|
|
43
|
+
* @param params - Optional KDF parameters
|
|
44
|
+
* @returns Derived key with same salt
|
|
45
|
+
*/
|
|
46
|
+
export async function verifyKey(password, salt, params = {}) {
|
|
47
|
+
if (!password || password.length === 0) {
|
|
48
|
+
throw new Error('Password cannot be empty');
|
|
49
|
+
}
|
|
50
|
+
const kdfParams = { ...DEFAULT_KDF_PARAMS, ...params };
|
|
51
|
+
if (salt.length !== 16) {
|
|
52
|
+
throw new Error('Salt must be 16 bytes');
|
|
53
|
+
}
|
|
54
|
+
// Re-derive key using same salt
|
|
55
|
+
const key = argon2id(password, salt, {
|
|
56
|
+
m: kdfParams.memory,
|
|
57
|
+
t: kdfParams.iterations,
|
|
58
|
+
p: kdfParams.parallelism,
|
|
59
|
+
dkLen: kdfParams.keyLength,
|
|
60
|
+
});
|
|
61
|
+
return { key, salt };
|
|
62
|
+
}
|
|
63
|
+
//# sourceMappingURL=key-derivation.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"key-derivation.js","sourceRoot":"","sources":["../../../src/lib/crypto/key-derivation.ts"],"names":[],"mappings":"AAAA,OAAO,EAAE,QAAQ,EAAE,MAAM,sBAAsB,CAAC;AAChD,OAAO,EAAE,WAAW,EAAE,MAAM,qBAAqB,CAAC;AAElD,OAAO,EAAE,kBAAkB,EAAE,MAAM,YAAY,CAAC;AAEhD;;;;;;;;;;;;;;;;;GAiBG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,SAAuC,EAAE;IAEzC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAAC;IAEvD,kCAAkC;IAClC,MAAM,IAAI,GAAG,WAAW,CAAC,EAAE,CAAC,CAAC;IAE7B,4BAA4B;IAC5B,MAAM,GAAG,GAAG,QAAQ,CAClB,QAAQ,EACR,IAAI,EACJ;QACE,CAAC,EAAE,SAAS,CAAC,MAAM;QACnB,CAAC,EAAE,SAAS,CAAC,UAAU;QACvB,CAAC,EAAE,SAAS,CAAC,WAAW;QACxB,KAAK,EAAE,SAAS,CAAC,SAAS;KAC3B,CACF,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC;AAED;;;;;;;GAOG;AACH,MAAM,CAAC,KAAK,UAAU,SAAS,CAC7B,QAAgB,EAChB,IAAgB,EAChB,SAAuC,EAAE;IAEzC,IAAI,CAAC,QAAQ,IAAI,QAAQ,CAAC,MAAM,KAAK,CAAC,EAAE,CAAC;QACvC,MAAM,IAAI,KAAK,CAAC,0BAA0B,CAAC,CAAC;IAC9C,CAAC;IAED,MAAM,SAAS,GAAG,EAAE,GAAG,kBAAkB,EAAE,GAAG,MAAM,EAAE,CAAC;IAEvD,IAAI,IAAI,CAAC,MAAM,KAAK,EAAE,EAAE,CAAC;QACvB,MAAM,IAAI,KAAK,CAAC,uBAAuB,CAAC,CAAC;IAC3C,CAAC;IAED,gCAAgC;IAChC,MAAM,GAAG,GAAG,QAAQ,CAClB,QAAQ,EACR,IAAI,EACJ;QACE,CAAC,EAAE,SAAS,CAAC,MAAM;QACnB,CAAC,EAAE,SAAS,CAAC,UAAU;QACvB,CAAC,EAAE,SAAS,CAAC,WAAW;QACxB,KAAK,EAAE,SAAS,CAAC,SAAS;KAC3B,CACF,CAAC;IAEF,OAAO,EAAE,GAAG,EAAE,IAAI,EAAE,CAAC;AACvB,CAAC"}
|
|
@@ -0,0 +1,22 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Encryption key derived from user password
|
|
3
|
+
*/
|
|
4
|
+
export interface DerivedKey {
|
|
5
|
+
key: Uint8Array;
|
|
6
|
+
salt: Uint8Array;
|
|
7
|
+
}
|
|
8
|
+
/**
|
|
9
|
+
* Parameters for Argon2 key derivation
|
|
10
|
+
*/
|
|
11
|
+
export interface KeyDerivationParams {
|
|
12
|
+
memory: number;
|
|
13
|
+
iterations: number;
|
|
14
|
+
parallelism: number;
|
|
15
|
+
keyLength: number;
|
|
16
|
+
}
|
|
17
|
+
/**
|
|
18
|
+
* Default Argon2id parameters (OWASP recommended)
|
|
19
|
+
*/
|
|
20
|
+
export declare const DEFAULT_KDF_PARAMS: KeyDerivationParams;
|
|
21
|
+
export type { EncryptedData } from './encrypt.js';
|
|
22
|
+
//# sourceMappingURL=types.d.ts.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"types.d.ts","sourceRoot":"","sources":["../../../src/lib/crypto/types.ts"],"names":[],"mappings":"AAAA;;GAEG;AACH,MAAM,WAAW,UAAU;IACzB,GAAG,EAAE,UAAU,CAAC;IAChB,IAAI,EAAE,UAAU,CAAC;CAClB;AAED;;GAEG;AACH,MAAM,WAAW,mBAAmB;IAClC,MAAM,EAAE,MAAM,CAAC;IACf,UAAU,EAAE,MAAM,CAAC;IACnB,WAAW,EAAE,MAAM,CAAC;IACpB,SAAS,EAAE,MAAM,CAAC;CACnB;AAED;;GAEG;AACH,eAAO,MAAM,kBAAkB,EAAE,mBAKhC,CAAC;AAEF,YAAY,EAAE,aAAa,EAAE,MAAM,cAAc,CAAC"}
|