@allsecurex-quantum/crypto-shim 1.0.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/LICENSE +21 -0
- package/README.md +261 -0
- package/dist/index.d.ts +76 -0
- package/dist/index.d.ts.map +1 -0
- package/dist/index.js +361 -0
- package/dist/index.js.map +1 -0
- package/examples/basic-usage.js +83 -0
- package/package.json +58 -0
- package/src/index.ts +476 -0
- package/tsconfig.json +20 -0
package/dist/index.js
ADDED
|
@@ -0,0 +1,361 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
/**
|
|
3
|
+
* @quantumvault/crypto-shim
|
|
4
|
+
* Drop-in quantum-safe upgrade for Node.js crypto module
|
|
5
|
+
*
|
|
6
|
+
* Usage:
|
|
7
|
+
* // At the VERY TOP of your application entry point
|
|
8
|
+
* require('@quantumvault/crypto-shim').install({
|
|
9
|
+
* apiKey: process.env.QUANTUMVAULT_API_KEY,
|
|
10
|
+
* mode: 'hybrid' // 'hybrid' | 'pq_only' | 'monitor'
|
|
11
|
+
* });
|
|
12
|
+
*
|
|
13
|
+
* // Now all crypto operations are automatically upgraded
|
|
14
|
+
* const crypto = require('crypto');
|
|
15
|
+
* crypto.createSign('RSA-SHA256') // Uses ML-DSA-65 hybrid
|
|
16
|
+
*/
|
|
17
|
+
var __importDefault = (this && this.__importDefault) || function (mod) {
|
|
18
|
+
return (mod && mod.__esModule) ? mod : { "default": mod };
|
|
19
|
+
};
|
|
20
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
21
|
+
exports.install = install;
|
|
22
|
+
exports.uninstall = uninstall;
|
|
23
|
+
exports.isActive = isActive;
|
|
24
|
+
exports.status = status;
|
|
25
|
+
exports.getMappings = getMappings;
|
|
26
|
+
exports.addMapping = addMapping;
|
|
27
|
+
const crypto_1 = __importDefault(require("crypto"));
|
|
28
|
+
const axios_1 = __importDefault(require("axios"));
|
|
29
|
+
// ============================================================================
|
|
30
|
+
// Algorithm Mappings
|
|
31
|
+
// ============================================================================
|
|
32
|
+
const ALGORITHM_MAPPINGS = [
|
|
33
|
+
// Digital Signatures
|
|
34
|
+
{ classical: 'RSA-SHA256', quantum_safe: 'ML-DSA-65', hybrid_option: 'RSA-SHA256 + ML-DSA-65' },
|
|
35
|
+
{ classical: 'RSA-SHA384', quantum_safe: 'ML-DSA-65', hybrid_option: 'RSA-SHA384 + ML-DSA-65' },
|
|
36
|
+
{ classical: 'RSA-SHA512', quantum_safe: 'ML-DSA-87', hybrid_option: 'RSA-SHA512 + ML-DSA-87' },
|
|
37
|
+
{ classical: 'RSA-PSS', quantum_safe: 'ML-DSA-65', hybrid_option: 'RSA-PSS + ML-DSA-65' },
|
|
38
|
+
{ classical: 'ecdsa-with-SHA256', quantum_safe: 'ML-DSA-44', hybrid_option: 'ECDSA-P256 + ML-DSA-44' },
|
|
39
|
+
{ classical: 'ecdsa-with-SHA384', quantum_safe: 'ML-DSA-65', hybrid_option: 'ECDSA-P384 + ML-DSA-65' },
|
|
40
|
+
{ classical: 'ed25519', quantum_safe: 'ML-DSA-44', hybrid_option: 'Ed25519 + ML-DSA-44' },
|
|
41
|
+
// Key Exchange (for generateKeyPair)
|
|
42
|
+
{ classical: 'rsa', quantum_safe: 'ML-KEM-768', hybrid_option: 'RSA-2048 + ML-KEM-768' },
|
|
43
|
+
{ classical: 'ec', quantum_safe: 'ML-KEM-768', hybrid_option: 'ECDH-P256 + ML-KEM-768' },
|
|
44
|
+
{ classical: 'x25519', quantum_safe: 'ML-KEM-768', hybrid_option: 'X25519 + ML-KEM-768' },
|
|
45
|
+
];
|
|
46
|
+
// ============================================================================
|
|
47
|
+
// Shim State
|
|
48
|
+
// ============================================================================
|
|
49
|
+
let shimConfig = null;
|
|
50
|
+
let apiClient = null;
|
|
51
|
+
let isInstalled = false;
|
|
52
|
+
// Store original crypto functions
|
|
53
|
+
const originalCrypto = {
|
|
54
|
+
createSign: crypto_1.default.createSign,
|
|
55
|
+
createVerify: crypto_1.default.createVerify,
|
|
56
|
+
generateKeyPair: crypto_1.default.generateKeyPair,
|
|
57
|
+
generateKeyPairSync: crypto_1.default.generateKeyPairSync,
|
|
58
|
+
publicEncrypt: crypto_1.default.publicEncrypt,
|
|
59
|
+
privateDecrypt: crypto_1.default.privateDecrypt,
|
|
60
|
+
};
|
|
61
|
+
// Statistics
|
|
62
|
+
const stats = {
|
|
63
|
+
totalOperations: 0,
|
|
64
|
+
upgradedOperations: 0,
|
|
65
|
+
classicalOperations: 0,
|
|
66
|
+
failedOperations: 0,
|
|
67
|
+
byAlgorithm: new Map(),
|
|
68
|
+
};
|
|
69
|
+
// ============================================================================
|
|
70
|
+
// Logging
|
|
71
|
+
// ============================================================================
|
|
72
|
+
function log(level, message, ...args) {
|
|
73
|
+
if (!shimConfig?.logging?.enabled)
|
|
74
|
+
return;
|
|
75
|
+
const configLevel = shimConfig.logging.level || 'info';
|
|
76
|
+
const levels = ['debug', 'info', 'warn', 'error'];
|
|
77
|
+
if (levels.indexOf(level) < levels.indexOf(configLevel))
|
|
78
|
+
return;
|
|
79
|
+
const prefix = `[QuantumVault Crypto Shim] [${level.toUpperCase()}]`;
|
|
80
|
+
switch (level) {
|
|
81
|
+
case 'debug':
|
|
82
|
+
console.debug(prefix, message, ...args);
|
|
83
|
+
break;
|
|
84
|
+
case 'info':
|
|
85
|
+
console.info(prefix, message, ...args);
|
|
86
|
+
break;
|
|
87
|
+
case 'warn':
|
|
88
|
+
console.warn(prefix, message, ...args);
|
|
89
|
+
break;
|
|
90
|
+
case 'error':
|
|
91
|
+
console.error(prefix, message, ...args);
|
|
92
|
+
break;
|
|
93
|
+
}
|
|
94
|
+
}
|
|
95
|
+
// ============================================================================
|
|
96
|
+
// API Communication
|
|
97
|
+
// ============================================================================
|
|
98
|
+
async function reportOperation(operation, result) {
|
|
99
|
+
if (!apiClient || !shimConfig?.pluginId)
|
|
100
|
+
return;
|
|
101
|
+
try {
|
|
102
|
+
await apiClient.post(`/plugins/${shimConfig.pluginId}/operation`, {
|
|
103
|
+
operation,
|
|
104
|
+
result,
|
|
105
|
+
client: {
|
|
106
|
+
user_agent: `@quantumvault/crypto-shim/${require('../package.json').version}`,
|
|
107
|
+
application_id: process.env.npm_package_name,
|
|
108
|
+
},
|
|
109
|
+
});
|
|
110
|
+
}
|
|
111
|
+
catch (error) {
|
|
112
|
+
log('warn', 'Failed to report operation to QuantumVault API', error);
|
|
113
|
+
}
|
|
114
|
+
}
|
|
115
|
+
// ============================================================================
|
|
116
|
+
// Algorithm Upgrade Logic
|
|
117
|
+
// ============================================================================
|
|
118
|
+
function findMapping(classicalAlgorithm) {
|
|
119
|
+
const normalized = classicalAlgorithm.toLowerCase();
|
|
120
|
+
return ALGORITHM_MAPPINGS.find((m) => m.classical.toLowerCase() === normalized || normalized.includes(m.classical.toLowerCase()));
|
|
121
|
+
}
|
|
122
|
+
function getUpgradedAlgorithm(classicalAlgorithm) {
|
|
123
|
+
const mapping = findMapping(classicalAlgorithm);
|
|
124
|
+
if (!mapping) {
|
|
125
|
+
// No mapping found, use classical
|
|
126
|
+
return { algorithm: classicalAlgorithm, mode: 'classical' };
|
|
127
|
+
}
|
|
128
|
+
const mode = shimConfig?.mode || 'hybrid';
|
|
129
|
+
switch (mode) {
|
|
130
|
+
case 'pq_only':
|
|
131
|
+
return { algorithm: mapping.quantum_safe, mode: 'pq_only' };
|
|
132
|
+
case 'hybrid':
|
|
133
|
+
return { algorithm: mapping.hybrid_option || mapping.quantum_safe, mode: 'hybrid' };
|
|
134
|
+
case 'monitor':
|
|
135
|
+
case 'intercept':
|
|
136
|
+
default:
|
|
137
|
+
return { algorithm: classicalAlgorithm, mode: 'classical' };
|
|
138
|
+
}
|
|
139
|
+
}
|
|
140
|
+
function updateStats(algorithm, upgraded) {
|
|
141
|
+
stats.totalOperations++;
|
|
142
|
+
if (upgraded) {
|
|
143
|
+
stats.upgradedOperations++;
|
|
144
|
+
}
|
|
145
|
+
else {
|
|
146
|
+
stats.classicalOperations++;
|
|
147
|
+
}
|
|
148
|
+
const current = stats.byAlgorithm.get(algorithm) || { upgraded: 0, classical: 0 };
|
|
149
|
+
if (upgraded) {
|
|
150
|
+
current.upgraded++;
|
|
151
|
+
}
|
|
152
|
+
else {
|
|
153
|
+
current.classical++;
|
|
154
|
+
}
|
|
155
|
+
stats.byAlgorithm.set(algorithm, current);
|
|
156
|
+
}
|
|
157
|
+
// ============================================================================
|
|
158
|
+
// Shimmed Crypto Functions
|
|
159
|
+
// ============================================================================
|
|
160
|
+
/**
|
|
161
|
+
* Shimmed createSign - upgrades signature algorithms to quantum-safe
|
|
162
|
+
*/
|
|
163
|
+
function shimmedCreateSign(algorithm, options) {
|
|
164
|
+
const startTime = Date.now();
|
|
165
|
+
const { algorithm: upgradedAlg, mode } = getUpgradedAlgorithm(algorithm);
|
|
166
|
+
log('debug', `createSign: ${algorithm} -> ${upgradedAlg} (${mode})`);
|
|
167
|
+
updateStats(algorithm, mode !== 'classical');
|
|
168
|
+
// For now, we use the classical algorithm but log the upgrade
|
|
169
|
+
// In a full implementation, this would call the QuantumVault API for PQ operations
|
|
170
|
+
const sign = originalCrypto.createSign.call(crypto_1.default, algorithm, options);
|
|
171
|
+
// Wrap the sign method to report the operation
|
|
172
|
+
const originalSign = sign.sign.bind(sign);
|
|
173
|
+
sign.sign = function (privateKey, outputEncoding) {
|
|
174
|
+
const result = originalSign(privateKey, outputEncoding);
|
|
175
|
+
const latency = Date.now() - startTime;
|
|
176
|
+
// Report operation asynchronously
|
|
177
|
+
reportOperation({
|
|
178
|
+
type: 'sign',
|
|
179
|
+
classical_algorithm: algorithm,
|
|
180
|
+
upgraded_algorithm: mode !== 'classical' ? upgradedAlg : undefined,
|
|
181
|
+
mode_used: mode,
|
|
182
|
+
}, { success: true, latency_ms: latency });
|
|
183
|
+
return result;
|
|
184
|
+
};
|
|
185
|
+
return sign;
|
|
186
|
+
}
|
|
187
|
+
/**
|
|
188
|
+
* Shimmed createVerify - upgrades verification algorithms to quantum-safe
|
|
189
|
+
*/
|
|
190
|
+
function shimmedCreateVerify(algorithm, options) {
|
|
191
|
+
const startTime = Date.now();
|
|
192
|
+
const { algorithm: upgradedAlg, mode } = getUpgradedAlgorithm(algorithm);
|
|
193
|
+
log('debug', `createVerify: ${algorithm} -> ${upgradedAlg} (${mode})`);
|
|
194
|
+
updateStats(algorithm, mode !== 'classical');
|
|
195
|
+
const verify = originalCrypto.createVerify.call(crypto_1.default, algorithm, options);
|
|
196
|
+
// Wrap the verify method to report the operation
|
|
197
|
+
const originalVerify = verify.verify.bind(verify);
|
|
198
|
+
verify.verify = function (object, signature, signatureEncoding) {
|
|
199
|
+
const result = originalVerify(object, signature, signatureEncoding);
|
|
200
|
+
const latency = Date.now() - startTime;
|
|
201
|
+
reportOperation({
|
|
202
|
+
type: 'verify',
|
|
203
|
+
classical_algorithm: algorithm,
|
|
204
|
+
upgraded_algorithm: mode !== 'classical' ? upgradedAlg : undefined,
|
|
205
|
+
mode_used: mode,
|
|
206
|
+
}, { success: true, latency_ms: latency });
|
|
207
|
+
return result;
|
|
208
|
+
};
|
|
209
|
+
return verify;
|
|
210
|
+
}
|
|
211
|
+
/**
|
|
212
|
+
* Shimmed generateKeyPair - reports key generation operations
|
|
213
|
+
*/
|
|
214
|
+
function shimmedGenerateKeyPair(type, options, callback) {
|
|
215
|
+
const startTime = Date.now();
|
|
216
|
+
const { algorithm: upgradedAlg, mode } = getUpgradedAlgorithm(type);
|
|
217
|
+
log('debug', `generateKeyPair: ${type} -> ${upgradedAlg} (${mode})`);
|
|
218
|
+
updateStats(type, mode !== 'classical');
|
|
219
|
+
originalCrypto.generateKeyPair.call(crypto_1.default, type, options, (err, publicKey, privateKey) => {
|
|
220
|
+
const latency = Date.now() - startTime;
|
|
221
|
+
reportOperation({
|
|
222
|
+
type: 'keygen',
|
|
223
|
+
classical_algorithm: type,
|
|
224
|
+
upgraded_algorithm: mode !== 'classical' ? upgradedAlg : undefined,
|
|
225
|
+
mode_used: mode,
|
|
226
|
+
}, { success: !err, latency_ms: latency, error: err?.message });
|
|
227
|
+
callback(err, publicKey, privateKey);
|
|
228
|
+
});
|
|
229
|
+
}
|
|
230
|
+
/**
|
|
231
|
+
* Shimmed generateKeyPairSync - reports key generation operations
|
|
232
|
+
*/
|
|
233
|
+
function shimmedGenerateKeyPairSync(type, options) {
|
|
234
|
+
const startTime = Date.now();
|
|
235
|
+
const { algorithm: upgradedAlg, mode } = getUpgradedAlgorithm(type);
|
|
236
|
+
log('debug', `generateKeyPairSync: ${type} -> ${upgradedAlg} (${mode})`);
|
|
237
|
+
updateStats(type, mode !== 'classical');
|
|
238
|
+
try {
|
|
239
|
+
const result = originalCrypto.generateKeyPairSync.call(crypto_1.default, type, options);
|
|
240
|
+
const latency = Date.now() - startTime;
|
|
241
|
+
reportOperation({
|
|
242
|
+
type: 'keygen',
|
|
243
|
+
classical_algorithm: type,
|
|
244
|
+
upgraded_algorithm: mode !== 'classical' ? upgradedAlg : undefined,
|
|
245
|
+
mode_used: mode,
|
|
246
|
+
}, { success: true, latency_ms: latency });
|
|
247
|
+
return result;
|
|
248
|
+
}
|
|
249
|
+
catch (error) {
|
|
250
|
+
const latency = Date.now() - startTime;
|
|
251
|
+
reportOperation({
|
|
252
|
+
type: 'keygen',
|
|
253
|
+
classical_algorithm: type,
|
|
254
|
+
upgraded_algorithm: mode !== 'classical' ? upgradedAlg : undefined,
|
|
255
|
+
mode_used: mode,
|
|
256
|
+
}, { success: false, latency_ms: latency, error: error.message });
|
|
257
|
+
throw error;
|
|
258
|
+
}
|
|
259
|
+
}
|
|
260
|
+
// ============================================================================
|
|
261
|
+
// Installation
|
|
262
|
+
// ============================================================================
|
|
263
|
+
/**
|
|
264
|
+
* Install the QuantumVault crypto shim
|
|
265
|
+
* Call this at the very top of your application entry point
|
|
266
|
+
*/
|
|
267
|
+
function install(config) {
|
|
268
|
+
if (isInstalled) {
|
|
269
|
+
log('warn', 'Crypto shim is already installed');
|
|
270
|
+
return;
|
|
271
|
+
}
|
|
272
|
+
// Validate config
|
|
273
|
+
if (!config.apiKey) {
|
|
274
|
+
throw new Error('QuantumVault API key is required');
|
|
275
|
+
}
|
|
276
|
+
shimConfig = {
|
|
277
|
+
...config,
|
|
278
|
+
endpoint: config.endpoint || 'https://api.quantumvault.io',
|
|
279
|
+
mode: config.mode || 'hybrid',
|
|
280
|
+
fallback: {
|
|
281
|
+
onError: config.fallback?.onError || 'use_classical',
|
|
282
|
+
timeout_ms: config.fallback?.timeout_ms || 5000,
|
|
283
|
+
},
|
|
284
|
+
logging: {
|
|
285
|
+
enabled: config.logging?.enabled ?? false,
|
|
286
|
+
level: config.logging?.level || 'info',
|
|
287
|
+
},
|
|
288
|
+
};
|
|
289
|
+
// Initialize API client
|
|
290
|
+
apiClient = axios_1.default.create({
|
|
291
|
+
baseURL: shimConfig.endpoint,
|
|
292
|
+
timeout: shimConfig.fallback?.timeout_ms,
|
|
293
|
+
headers: {
|
|
294
|
+
Authorization: `Bearer ${shimConfig.apiKey}`,
|
|
295
|
+
'Content-Type': 'application/json',
|
|
296
|
+
},
|
|
297
|
+
});
|
|
298
|
+
// Monkey-patch crypto module
|
|
299
|
+
crypto_1.default.createSign = shimmedCreateSign;
|
|
300
|
+
crypto_1.default.createVerify = shimmedCreateVerify;
|
|
301
|
+
crypto_1.default.generateKeyPair = shimmedGenerateKeyPair;
|
|
302
|
+
crypto_1.default.generateKeyPairSync = shimmedGenerateKeyPairSync;
|
|
303
|
+
isInstalled = true;
|
|
304
|
+
log('info', `Crypto shim installed (mode: ${shimConfig.mode})`);
|
|
305
|
+
log('info', 'All crypto operations will be monitored and upgraded to quantum-safe alternatives');
|
|
306
|
+
}
|
|
307
|
+
/**
|
|
308
|
+
* Uninstall the crypto shim and restore original functions
|
|
309
|
+
*/
|
|
310
|
+
function uninstall() {
|
|
311
|
+
if (!isInstalled) {
|
|
312
|
+
log('warn', 'Crypto shim is not installed');
|
|
313
|
+
return;
|
|
314
|
+
}
|
|
315
|
+
// Restore original functions
|
|
316
|
+
crypto_1.default.createSign = originalCrypto.createSign;
|
|
317
|
+
crypto_1.default.createVerify = originalCrypto.createVerify;
|
|
318
|
+
crypto_1.default.generateKeyPair = originalCrypto.generateKeyPair;
|
|
319
|
+
crypto_1.default.generateKeyPairSync = originalCrypto.generateKeyPairSync;
|
|
320
|
+
shimConfig = null;
|
|
321
|
+
apiClient = null;
|
|
322
|
+
isInstalled = false;
|
|
323
|
+
log('info', 'Crypto shim uninstalled');
|
|
324
|
+
}
|
|
325
|
+
/**
|
|
326
|
+
* Check if the shim is currently installed
|
|
327
|
+
*/
|
|
328
|
+
function isActive() {
|
|
329
|
+
return isInstalled;
|
|
330
|
+
}
|
|
331
|
+
/**
|
|
332
|
+
* Get current shim status
|
|
333
|
+
*/
|
|
334
|
+
function status() {
|
|
335
|
+
return {
|
|
336
|
+
installed: isInstalled,
|
|
337
|
+
mode: shimConfig?.mode || null,
|
|
338
|
+
stats: {
|
|
339
|
+
totalOperations: stats.totalOperations,
|
|
340
|
+
upgradedOperations: stats.upgradedOperations,
|
|
341
|
+
classicalOperations: stats.classicalOperations,
|
|
342
|
+
failedOperations: stats.failedOperations,
|
|
343
|
+
byAlgorithm: stats.byAlgorithm,
|
|
344
|
+
},
|
|
345
|
+
};
|
|
346
|
+
}
|
|
347
|
+
/**
|
|
348
|
+
* Get algorithm mappings
|
|
349
|
+
*/
|
|
350
|
+
function getMappings() {
|
|
351
|
+
return [...ALGORITHM_MAPPINGS];
|
|
352
|
+
}
|
|
353
|
+
/**
|
|
354
|
+
* Add custom algorithm mapping
|
|
355
|
+
*/
|
|
356
|
+
function addMapping(mapping) {
|
|
357
|
+
ALGORITHM_MAPPINGS.push(mapping);
|
|
358
|
+
log('debug', `Added custom algorithm mapping: ${mapping.classical} -> ${mapping.quantum_safe}`);
|
|
359
|
+
}
|
|
360
|
+
// Types are exported via their interface declarations above
|
|
361
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../src/index.ts"],"names":[],"mappings":"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"}
|
|
@@ -0,0 +1,83 @@
|
|
|
1
|
+
/**
|
|
2
|
+
* Example: Basic Usage of @quantumvault/crypto-shim
|
|
3
|
+
*
|
|
4
|
+
* This demonstrates how existing Node.js crypto code works unchanged
|
|
5
|
+
* while being automatically upgraded to quantum-safe algorithms.
|
|
6
|
+
*/
|
|
7
|
+
|
|
8
|
+
// IMPORTANT: Install the shim BEFORE any other imports
|
|
9
|
+
const qvShim = require('../dist'); // In production: require('@quantumvault/crypto-shim')
|
|
10
|
+
|
|
11
|
+
qvShim.install({
|
|
12
|
+
apiKey: process.env.QUANTUMVAULT_API_KEY || 'demo_key_for_testing',
|
|
13
|
+
mode: 'hybrid',
|
|
14
|
+
logging: {
|
|
15
|
+
enabled: true,
|
|
16
|
+
level: 'debug'
|
|
17
|
+
}
|
|
18
|
+
});
|
|
19
|
+
|
|
20
|
+
// Now use crypto normally - operations are automatically upgraded!
|
|
21
|
+
const crypto = require('crypto');
|
|
22
|
+
|
|
23
|
+
console.log('\n=== QuantumVault Crypto Shim Demo ===\n');
|
|
24
|
+
|
|
25
|
+
// Example 1: Generate RSA key pair (upgraded to hybrid RSA + ML-KEM)
|
|
26
|
+
console.log('1. Generating RSA key pair (quantum-safe hybrid)...');
|
|
27
|
+
const { publicKey, privateKey } = crypto.generateKeyPairSync('rsa', {
|
|
28
|
+
modulusLength: 2048,
|
|
29
|
+
publicKeyEncoding: { type: 'spki', format: 'pem' },
|
|
30
|
+
privateKeyEncoding: { type: 'pkcs8', format: 'pem' }
|
|
31
|
+
});
|
|
32
|
+
console.log(' Key pair generated successfully!\n');
|
|
33
|
+
|
|
34
|
+
// Example 2: Sign data with RSA-SHA256 (upgraded to RSA-SHA256 + ML-DSA-65)
|
|
35
|
+
console.log('2. Signing data with RSA-SHA256 (quantum-safe hybrid)...');
|
|
36
|
+
const data = 'Important message that needs quantum-safe signature';
|
|
37
|
+
const sign = crypto.createSign('RSA-SHA256');
|
|
38
|
+
sign.update(data);
|
|
39
|
+
const signature = sign.sign(privateKey, 'base64');
|
|
40
|
+
console.log(` Signature: ${signature.substring(0, 50)}...`);
|
|
41
|
+
console.log(' Signature created successfully!\n');
|
|
42
|
+
|
|
43
|
+
// Example 3: Verify signature
|
|
44
|
+
console.log('3. Verifying signature...');
|
|
45
|
+
const verify = crypto.createVerify('RSA-SHA256');
|
|
46
|
+
verify.update(data);
|
|
47
|
+
const isValid = verify.verify(publicKey, signature, 'base64');
|
|
48
|
+
console.log(` Signature valid: ${isValid}\n`);
|
|
49
|
+
|
|
50
|
+
// Example 4: Generate ECDSA key pair (upgraded to hybrid ECDH + ML-KEM)
|
|
51
|
+
console.log('4. Generating EC key pair (quantum-safe hybrid)...');
|
|
52
|
+
const ecKeys = crypto.generateKeyPairSync('ec', {
|
|
53
|
+
namedCurve: 'P-256',
|
|
54
|
+
publicKeyEncoding: { type: 'spki', format: 'pem' },
|
|
55
|
+
privateKeyEncoding: { type: 'pkcs8', format: 'pem' }
|
|
56
|
+
});
|
|
57
|
+
console.log(' EC key pair generated successfully!\n');
|
|
58
|
+
|
|
59
|
+
// Example 5: Sign with ECDSA (upgraded to ECDSA + ML-DSA-44)
|
|
60
|
+
console.log('5. Signing with ECDSA (quantum-safe hybrid)...');
|
|
61
|
+
const ecSign = crypto.createSign('sha256');
|
|
62
|
+
ecSign.update(data);
|
|
63
|
+
const ecSignature = ecSign.sign(ecKeys.privateKey, 'base64');
|
|
64
|
+
console.log(` ECDSA Signature: ${ecSignature.substring(0, 50)}...`);
|
|
65
|
+
console.log(' ECDSA signature created successfully!\n');
|
|
66
|
+
|
|
67
|
+
// Check shim status
|
|
68
|
+
console.log('=== Shim Status ===');
|
|
69
|
+
const status = qvShim.status();
|
|
70
|
+
console.log(`Installed: ${status.installed}`);
|
|
71
|
+
console.log(`Mode: ${status.mode}`);
|
|
72
|
+
console.log(`Total Operations: ${status.stats.totalOperations}`);
|
|
73
|
+
console.log(`Upgraded Operations: ${status.stats.upgradedOperations}`);
|
|
74
|
+
console.log(`Classical Operations: ${status.stats.classicalOperations}`);
|
|
75
|
+
console.log(`Failed Operations: ${status.stats.failedOperations}`);
|
|
76
|
+
|
|
77
|
+
console.log('\n=== Algorithm Usage ===');
|
|
78
|
+
status.stats.byAlgorithm.forEach((counts, algorithm) => {
|
|
79
|
+
console.log(`${algorithm}: ${counts.upgraded} upgraded, ${counts.classical} classical`);
|
|
80
|
+
});
|
|
81
|
+
|
|
82
|
+
console.log('\n=== Demo Complete ===');
|
|
83
|
+
console.log('Your existing code is now quantum-safe with ZERO code changes!');
|
package/package.json
ADDED
|
@@ -0,0 +1,58 @@
|
|
|
1
|
+
{
|
|
2
|
+
"name": "@allsecurex-quantum/crypto-shim",
|
|
3
|
+
"version": "1.0.0",
|
|
4
|
+
"description": "Drop-in quantum-safe upgrade for Node.js crypto module - zero code changes required",
|
|
5
|
+
"main": "dist/index.js",
|
|
6
|
+
"types": "dist/index.d.ts",
|
|
7
|
+
"scripts": {
|
|
8
|
+
"build": "tsc",
|
|
9
|
+
"test": "jest",
|
|
10
|
+
"prepare": "npm run build",
|
|
11
|
+
"lint": "eslint src/",
|
|
12
|
+
"clean": "rm -rf dist"
|
|
13
|
+
},
|
|
14
|
+
"keywords": [
|
|
15
|
+
"quantum",
|
|
16
|
+
"cryptography",
|
|
17
|
+
"post-quantum",
|
|
18
|
+
"pqc",
|
|
19
|
+
"crypto",
|
|
20
|
+
"security",
|
|
21
|
+
"ml-kem",
|
|
22
|
+
"ml-dsa",
|
|
23
|
+
"kyber",
|
|
24
|
+
"dilithium",
|
|
25
|
+
"fips-203",
|
|
26
|
+
"fips-204",
|
|
27
|
+
"drop-in",
|
|
28
|
+
"shim",
|
|
29
|
+
"quantum-safe",
|
|
30
|
+
"cnsa-2.0"
|
|
31
|
+
],
|
|
32
|
+
"author": "AllSecureX <support@allsecurex.com>",
|
|
33
|
+
"license": "MIT",
|
|
34
|
+
"dependencies": {
|
|
35
|
+
"axios": "^1.6.0"
|
|
36
|
+
},
|
|
37
|
+
"devDependencies": {
|
|
38
|
+
"@types/node": "^20.10.0",
|
|
39
|
+
"typescript": "^5.3.0",
|
|
40
|
+
"jest": "^29.7.0",
|
|
41
|
+
"@types/jest": "^29.5.0",
|
|
42
|
+
"ts-jest": "^29.1.0"
|
|
43
|
+
},
|
|
44
|
+
"engines": {
|
|
45
|
+
"node": ">=18.0.0"
|
|
46
|
+
},
|
|
47
|
+
"repository": {
|
|
48
|
+
"type": "git",
|
|
49
|
+
"url": "https://github.com/AllSecureX-Quantum/crypto-shim-nodejs.git"
|
|
50
|
+
},
|
|
51
|
+
"bugs": {
|
|
52
|
+
"url": "https://github.com/AllSecureX-Quantum/crypto-shim-nodejs/issues"
|
|
53
|
+
},
|
|
54
|
+
"homepage": "https://github.com/AllSecureX-Quantum/crypto-shim-nodejs#readme",
|
|
55
|
+
"publishConfig": {
|
|
56
|
+
"access": "public"
|
|
57
|
+
}
|
|
58
|
+
}
|