@digitaldefiance/node-ecies-lib 1.1.11 → 1.1.13

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.
Files changed (95) hide show
  1. package/README.md +9 -0
  2. package/dist/constants.d.ts.map +1 -1
  3. package/dist/constants.js +44 -44
  4. package/dist/constants.js.map +1 -1
  5. package/dist/enumerations/index.js +17 -1
  6. package/dist/enumerations/index.js.map +1 -1
  7. package/dist/enumerations/pbkdf2-profile.js +5 -2
  8. package/dist/enumerations/pbkdf2-profile.js.map +1 -1
  9. package/dist/i18n/ecies-i18n-factory.js +27 -21
  10. package/dist/i18n/ecies-i18n-factory.js.map +1 -1
  11. package/dist/i18n/index.js +17 -1
  12. package/dist/i18n/index.js.map +1 -1
  13. package/dist/index.js +23 -7
  14. package/dist/index.js.map +1 -1
  15. package/dist/interfaces/authenticated-cipher.js +2 -1
  16. package/dist/interfaces/authenticated-decipher.js +2 -1
  17. package/dist/interfaces/checksum-config.js +2 -1
  18. package/dist/interfaces/checksum-consts.js +2 -1
  19. package/dist/interfaces/constants.js +2 -1
  20. package/dist/interfaces/ecies-consts.js +2 -1
  21. package/dist/interfaces/encryption-consts.js +2 -1
  22. package/dist/interfaces/index.js +33 -17
  23. package/dist/interfaces/index.js.map +1 -1
  24. package/dist/interfaces/keypair-buffer-with-un-encrypted-private-key.js +2 -1
  25. package/dist/interfaces/keyring-consts.js +2 -1
  26. package/dist/interfaces/member-operational.js +2 -1
  27. package/dist/interfaces/member-with-mnemonic.js +2 -1
  28. package/dist/interfaces/multi-encrypted-message.js +2 -1
  29. package/dist/interfaces/multi-encrypted-parsed-header.js +2 -1
  30. package/dist/interfaces/pbkdf-profiles.js +2 -1
  31. package/dist/interfaces/pbkdf2-result.js +2 -1
  32. package/dist/interfaces/signing-key-private-key-info.js +2 -1
  33. package/dist/interfaces/simple-keypair-buffer.js +2 -1
  34. package/dist/interfaces/simple-keypair.js +2 -1
  35. package/dist/interfaces/simple-public-key-only-buffer.js +2 -1
  36. package/dist/interfaces/simple-public-key-only.js +2 -1
  37. package/dist/interfaces/single-encrypted-parsed-header.js +2 -1
  38. package/dist/interfaces/wallet-seed.js +2 -1
  39. package/dist/interfaces/wrapped-key-consts.js +2 -1
  40. package/dist/member.js +35 -30
  41. package/dist/member.js.map +1 -1
  42. package/dist/services/aes-gcm.js +14 -10
  43. package/dist/services/aes-gcm.js.map +1 -1
  44. package/dist/services/ecies/crypto-core.js +29 -25
  45. package/dist/services/ecies/crypto-core.js.map +1 -1
  46. package/dist/services/ecies/file.js +39 -2
  47. package/dist/services/ecies/file.js.map +1 -1
  48. package/dist/services/ecies/index.js +23 -7
  49. package/dist/services/ecies/index.js.map +1 -1
  50. package/dist/services/ecies/multi-recipient.js +50 -46
  51. package/dist/services/ecies/multi-recipient.js.map +1 -1
  52. package/dist/services/ecies/service.js +25 -21
  53. package/dist/services/ecies/service.js.map +1 -1
  54. package/dist/services/ecies/signature.js +15 -11
  55. package/dist/services/ecies/signature.js.map +1 -1
  56. package/dist/services/ecies/single-recipient.js +60 -56
  57. package/dist/services/ecies/single-recipient.js.map +1 -1
  58. package/dist/services/ecies/utilities.js +17 -13
  59. package/dist/services/ecies/utilities.js.map +1 -1
  60. package/dist/services/index.js +19 -3
  61. package/dist/services/index.js.map +1 -1
  62. package/dist/services/pbkdf2.js +25 -20
  63. package/dist/services/pbkdf2.js.map +1 -1
  64. package/dist/types.js +2 -1
  65. package/dist/utils.js +26 -22
  66. package/dist/utils.js.map +1 -1
  67. package/package.json +3 -4
  68. package/dist/interfaces/fec-consts.d.ts +0 -5
  69. package/dist/interfaces/fec-consts.d.ts.map +0 -1
  70. package/dist/interfaces/fec-consts.js +0 -2
  71. package/dist/interfaces/fec-consts.js.map +0 -1
  72. package/dist/services/ecies/crypto-core.debug.d.ts +0 -13
  73. package/dist/services/ecies/crypto-core.debug.d.ts.map +0 -1
  74. package/dist/services/ecies/crypto-core.debug.js +0 -91
  75. package/dist/services/ecies/crypto-core.debug.js.map +0 -1
  76. package/dist/services/ecies/debug-aes-gcm.d.ts +0 -2
  77. package/dist/services/ecies/debug-aes-gcm.d.ts.map +0 -1
  78. package/dist/services/ecies/debug-aes-gcm.js +0 -106
  79. package/dist/services/ecies/debug-aes-gcm.js.map +0 -1
  80. package/dist/services/ecies/debug-ecdh.d.ts +0 -2
  81. package/dist/services/ecies/debug-ecdh.d.ts.map +0 -1
  82. package/dist/services/ecies/debug-ecdh.js +0 -123
  83. package/dist/services/ecies/debug-ecdh.js.map +0 -1
  84. package/dist/services/ecies/debug-ecies-burnbag.d.ts +0 -2
  85. package/dist/services/ecies/debug-ecies-burnbag.d.ts.map +0 -1
  86. package/dist/services/ecies/debug-ecies-burnbag.js +0 -134
  87. package/dist/services/ecies/debug-ecies-burnbag.js.map +0 -1
  88. package/dist/services/ecies/debug-ecies.d.ts +0 -2
  89. package/dist/services/ecies/debug-ecies.d.ts.map +0 -1
  90. package/dist/services/ecies/debug-ecies.js +0 -110
  91. package/dist/services/ecies/debug-ecies.js.map +0 -1
  92. package/dist/services/ecies/debug-test.d.ts +0 -2
  93. package/dist/services/ecies/debug-test.d.ts.map +0 -1
  94. package/dist/services/ecies/debug-test.js +0 -57
  95. package/dist/services/ecies/debug-test.js.map +0 -1
@@ -1,123 +0,0 @@
1
- import { ECIES } from '@digitaldefiance/ecies-lib';
2
- import { createECDH } from 'crypto';
3
- /**
4
- * Simple debugging script to test ECDH key compatibility issues directly
5
- */
6
- function debugEcdhKeys() {
7
- console.log('=== Testing ECDH Key Compatibility ===\n');
8
- try {
9
- // Create an Alice key pair (first party)
10
- const aliceEcdh = createECDH(ECIES.CURVE_NAME);
11
- // Generate keys deterministically
12
- const aliceSeed = Buffer.from('alice_seed_for_testing_crypto_fix', 'utf8');
13
- aliceEcdh.setPrivateKey(aliceSeed.subarray(0, 32));
14
- aliceEcdh.generateKeys();
15
- const alicePrivateKey = aliceEcdh.getPrivateKey();
16
- const alicePublicKey = aliceEcdh.getPublicKey();
17
- // Check if we need to add a prefix to Alice's public key
18
- const aliceRawPublicKey = alicePublicKey.length === 64
19
- ? alicePublicKey
20
- : alicePublicKey.subarray(1);
21
- const aliceFullPublicKey = Buffer.concat([
22
- Buffer.from([ECIES.PUBLIC_KEY_MAGIC]), // 0x04 prefix
23
- aliceRawPublicKey,
24
- ]);
25
- // Create a Bob key pair (second party)
26
- const bobEcdh = createECDH(ECIES.CURVE_NAME);
27
- const bobSeed = Buffer.from('bob_seed_for_testing_crypto_fix____', 'utf8');
28
- bobEcdh.setPrivateKey(bobSeed.subarray(0, 32));
29
- bobEcdh.generateKeys();
30
- const bobPrivateKey = bobEcdh.getPrivateKey();
31
- const bobPublicKey = bobEcdh.getPublicKey();
32
- // Check if we need to add a prefix to Bob's public key
33
- const bobRawPublicKey = bobPublicKey.length === 64 ? bobPublicKey : bobPublicKey.subarray(1);
34
- const bobFullPublicKey = Buffer.concat([
35
- Buffer.from([ECIES.PUBLIC_KEY_MAGIC]), // 0x04 prefix
36
- bobRawPublicKey,
37
- ]);
38
- // Log key formats
39
- console.log('Alice private key length:', alicePrivateKey.length);
40
- console.log('Alice raw public key length:', aliceRawPublicKey.length);
41
- console.log('Alice full public key length:', aliceFullPublicKey.length);
42
- console.log('Alice full public key prefix:', aliceFullPublicKey[0].toString(16));
43
- console.log('\nBob private key length:', bobPrivateKey.length);
44
- console.log('Bob raw public key length:', bobRawPublicKey.length);
45
- console.log('Bob full public key length:', bobFullPublicKey.length);
46
- console.log('Bob full public key prefix:', bobFullPublicKey[0].toString(16));
47
- // Test 1: Try computing shared secret with different key formats
48
- console.log("\n--- Test 1: Alice computes secret using Bob's public key ---");
49
- // Try with full key (with 0x04 prefix)
50
- try {
51
- const secretWithFullKey = aliceEcdh.computeSecret(bobFullPublicKey);
52
- console.log('SUCCESS with full key (0x04 prefix)');
53
- console.log('Shared secret length:', secretWithFullKey.length);
54
- console.log('Shared secret (hex):', secretWithFullKey.toString('hex').substring(0, 32) + '...');
55
- }
56
- catch (error) {
57
- console.error('FAILED with full key (0x04 prefix):', error instanceof Error ? error.message : String(error));
58
- }
59
- // Try with raw key (without prefix)
60
- try {
61
- const secretWithRawKey = aliceEcdh.computeSecret(bobRawPublicKey);
62
- console.log('SUCCESS with raw key (no prefix)');
63
- console.log('Shared secret length:', secretWithRawKey.length);
64
- console.log('Shared secret (hex):', secretWithRawKey.toString('hex').substring(0, 32) + '...');
65
- }
66
- catch (error) {
67
- console.error('FAILED with raw key (no prefix):', error instanceof Error ? error.message : String(error));
68
- }
69
- // Test 2: Bob computes secret using Alice's public key
70
- console.log("\n--- Test 2: Bob computes secret using Alice's public key ---");
71
- // Try with full key (with 0x04 prefix)
72
- try {
73
- const secretWithFullKey = bobEcdh.computeSecret(aliceFullPublicKey);
74
- console.log('SUCCESS with full key (0x04 prefix)');
75
- console.log('Shared secret length:', secretWithFullKey.length);
76
- console.log('Shared secret (hex):', secretWithFullKey.toString('hex').substring(0, 32) + '...');
77
- }
78
- catch (error) {
79
- console.error('FAILED with full key (0x04 prefix):', error instanceof Error ? error.message : String(error));
80
- }
81
- // Try with raw key (without prefix)
82
- try {
83
- const secretWithRawKey = bobEcdh.computeSecret(aliceRawPublicKey);
84
- console.log('SUCCESS with raw key (no prefix)');
85
- console.log('Shared secret length:', secretWithRawKey.length);
86
- console.log('Shared secret (hex):', secretWithRawKey.toString('hex').substring(0, 32) + '...');
87
- }
88
- catch (error) {
89
- console.error('FAILED with raw key (no prefix):', error instanceof Error ? error.message : String(error));
90
- }
91
- // Test 3: Verify both sides get the same shared secret
92
- console.log('\n--- Test 3: Compare computed secrets using consistent format ---');
93
- // Use the format that worked best in tests 1 and 2
94
- let aliceSecret, bobSecret;
95
- try {
96
- aliceSecret = aliceEcdh.computeSecret(bobRawPublicKey); // Try raw format
97
- bobSecret = bobEcdh.computeSecret(aliceRawPublicKey);
98
- console.log("Alice's computed secret:", aliceSecret.toString('hex').substring(0, 32) + '...');
99
- console.log("Bob's computed secret:", bobSecret.toString('hex').substring(0, 32) + '...');
100
- console.log('Secrets match?', aliceSecret.equals(bobSecret) ? 'YES' : 'NO');
101
- }
102
- catch (error) {
103
- console.error('FAILED comparing secrets:', error instanceof Error ? error.message : String(error));
104
- // Try with full key format if raw format failed
105
- try {
106
- aliceSecret = aliceEcdh.computeSecret(bobFullPublicKey);
107
- bobSecret = bobEcdh.computeSecret(aliceFullPublicKey);
108
- console.log("Alice's computed secret (full key):", aliceSecret.toString('hex').substring(0, 32) + '...');
109
- console.log("Bob's computed secret (full key):", bobSecret.toString('hex').substring(0, 32) + '...');
110
- console.log('Secrets match?', aliceSecret.equals(bobSecret) ? 'YES' : 'NO');
111
- }
112
- catch (innerError) {
113
- console.error('FAILED with both key formats. Something is fundamentally wrong with the key exchange.', innerError instanceof Error ? innerError.message : String(innerError));
114
- }
115
- }
116
- }
117
- catch (error) {
118
- console.error('An error occurred during ECDH key testing:', error instanceof Error ? error.message : String(error));
119
- }
120
- }
121
- // Run the debug test
122
- debugEcdhKeys();
123
- //# sourceMappingURL=debug-ecdh.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-ecdh.js","sourceRoot":"","sources":["../../../src/services/ecies/debug-ecdh.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=debug-ecies-burnbag.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-ecies-burnbag.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/debug-ecies-burnbag.ts"],"names":[],"mappings":""}
@@ -1,134 +0,0 @@
1
- import { Constants as AppConstants, ECIES, getEciesI18nEngine, uint8ArrayToHex, } from '@digitaldefiance/ecies-lib';
2
- import { createECDH } from 'crypto';
3
- import { ECIESService } from './service';
4
- /**
5
- * This script simulates how BurnbagMember handles encryption/decryption
6
- * to help debug issues with the ECIES implementation.
7
- */
8
- function debugEciesBurnbag() {
9
- console.log('=== ECIES BurnbagMember Debug Test ===\n');
10
- try {
11
- // Get the ECIES service from the service provider (exactly like in the tests)
12
- const config = {
13
- curveName: AppConstants.ECIES.CURVE_NAME,
14
- primaryKeyDerivationPath: AppConstants.ECIES.PRIMARY_KEY_DERIVATION_PATH,
15
- mnemonicStrength: AppConstants.ECIES.MNEMONIC_STRENGTH,
16
- symmetricAlgorithm: AppConstants.ECIES.SYMMETRIC_ALGORITHM_CONFIGURATION,
17
- symmetricKeyBits: AppConstants.ECIES.SYMMETRIC.KEY_BITS,
18
- symmetricKeyMode: AppConstants.ECIES.SYMMETRIC.MODE,
19
- };
20
- const eciesService = new ECIESService(getEciesI18nEngine(), config);
21
- // Step 1: Generate a mnemonic and wallet (like BrightChainMember.newMember does)
22
- console.log('Generating wallet...');
23
- const mnemonic = eciesService.generateNewMnemonic();
24
- console.log(`Mnemonic: ${mnemonic.toString().substring(0, 20)}...`);
25
- const { wallet } = eciesService.walletAndSeedFromMnemonic(mnemonic);
26
- // Step 2: Get private key from wallet
27
- const privateKey = wallet.getPrivateKey();
28
- console.log(`Private Key: ${uint8ArrayToHex(privateKey).substring(0, 16)}...`);
29
- // Step 3: Get public key with 0x04 prefix (as BrightChainMember does)
30
- const publicKeyWithPrefix = Buffer.concat([
31
- Buffer.from([ECIES.PUBLIC_KEY_MAGIC]),
32
- wallet.getPublicKey(),
33
- ]);
34
- console.log(`Public Key with Prefix: ${publicKeyWithPrefix
35
- .toString('hex')
36
- .substring(0, 16)}...`);
37
- console.log(`Public Key Length: ${publicKeyWithPrefix.length} bytes`);
38
- // Validate the key format
39
- if (publicKeyWithPrefix.length === 65 &&
40
- publicKeyWithPrefix[0] === ECIES.PUBLIC_KEY_MAGIC) {
41
- console.log('Public key format is correct (65 bytes with 0x04 prefix)');
42
- }
43
- else {
44
- console.error('Public key format is INCORRECT!');
45
- console.log(`Actual format: ${publicKeyWithPrefix.length} bytes, prefix: 0x${publicKeyWithPrefix[0].toString(16)}`);
46
- }
47
- // Step 4: Create a test message
48
- const message = Buffer.from('This is a test message for BrightChainMember encryption/decryption');
49
- console.log(`\nOriginal Message: ${message.toString()}`);
50
- // Step 5: Encrypt the message using the public key
51
- console.log('\nEncrypting message...');
52
- const encrypted = eciesService.encryptSimpleOrSingle(true, publicKeyWithPrefix, message);
53
- console.log(`Encrypted size: ${encrypted.length} bytes`);
54
- console.log(`Encrypted data (hex): ${encrypted.toString('hex').substring(0, 32)}...`);
55
- // Step 6: Log header information
56
- console.log('\nHeader Information:');
57
- // Extract the ephemeral public key (first 65 bytes)
58
- const ephPublicKey = encrypted.subarray(0, ECIES.PUBLIC_KEY_LENGTH);
59
- console.log(`Ephemeral Public Key (${ephPublicKey.length} bytes): ${ephPublicKey
60
- .toString('hex')
61
- .substring(0, 32)}...`);
62
- console.log(`Ephemeral Public Key Prefix: 0x${ephPublicKey[0].toString(16)}`);
63
- // Step 7: Decrypt the message using the private key
64
- console.log('\nDecrypting message...');
65
- try {
66
- const decrypted = eciesService.decryptSimpleOrSingleWithHeader(true, Buffer.from(privateKey), encrypted);
67
- console.log(`Decrypted Message: ${decrypted.toString()}`);
68
- console.log('Decryption successful!');
69
- // Verify that the decrypted message matches the original
70
- if (decrypted.equals(message)) {
71
- console.log('✅ Decrypted message matches original!');
72
- }
73
- else {
74
- console.log('❌ Decrypted message does NOT match original!');
75
- }
76
- }
77
- catch (error) {
78
- console.error('Decryption failed:', error);
79
- // Try manual decryption for debugging
80
- console.log('\n--- Attempting manual decryption for debugging ---');
81
- try {
82
- // Set up ECDH with the private key
83
- const ecdh = createECDH(eciesService.curveName);
84
- ecdh.setPrivateKey(privateKey);
85
- // Extract header components
86
- const ephemeralPublicKey = encrypted.subarray(0, ECIES.PUBLIC_KEY_LENGTH);
87
- const iv = encrypted.subarray(ECIES.PUBLIC_KEY_LENGTH, ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE);
88
- const authTag = encrypted.subarray(ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE, ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE + ECIES.AUTH_TAG_SIZE);
89
- const encryptedData = encrypted.subarray(ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE + ECIES.AUTH_TAG_SIZE);
90
- console.log(`Ephemeral Public Key: ${ephemeralPublicKey
91
- .toString('hex')
92
- .substring(0, 16)}...`);
93
- console.log(`IV: ${iv.toString('hex')}`);
94
- console.log(`Auth Tag: ${authTag.toString('hex')}`);
95
- console.log(`Encrypted Data Length: ${encryptedData.length} bytes`);
96
- // Try to compute shared secret with both full and raw ephemeral key formats
97
- console.log('\nTrying to compute shared secret...');
98
- // First try with full key (with 0x04 prefix)
99
- try {
100
- const sharedSecretFull = ecdh.computeSecret(ephemeralPublicKey);
101
- console.log(`✅ Shared secret computed with full key format: ${sharedSecretFull
102
- .toString('hex')
103
- .substring(0, 16)}...`);
104
- }
105
- catch (e) {
106
- console.error(`❌ Failed to compute shared secret with full key: ${e instanceof Error ? e.message : String(e)}`);
107
- }
108
- // Then try with raw key (without prefix)
109
- if (ephemeralPublicKey.length === 65 &&
110
- ephemeralPublicKey[0] === ECIES.PUBLIC_KEY_MAGIC) {
111
- try {
112
- const ephRawKey = ephemeralPublicKey.subarray(1);
113
- const sharedSecretRaw = ecdh.computeSecret(ephRawKey);
114
- console.log(`✅ Shared secret computed with raw key format: ${sharedSecretRaw
115
- .toString('hex')
116
- .substring(0, 16)}...`);
117
- }
118
- catch (e) {
119
- console.error(`❌ Failed to compute shared secret with raw key: ${e instanceof Error ? e.message : String(e)}`);
120
- }
121
- }
122
- }
123
- catch (innerError) {
124
- console.error('Manual decryption debugging failed:', innerError);
125
- }
126
- }
127
- }
128
- catch (error) {
129
- console.error('Debug test failed:', error);
130
- }
131
- }
132
- // Run the debug test
133
- debugEciesBurnbag();
134
- //# sourceMappingURL=debug-ecies-burnbag.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-ecies-burnbag.js","sourceRoot":"","sources":["../../../src/services/ecies/debug-ecies-burnbag.ts"],"names":[],"mappings":"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"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=debug-ecies.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-ecies.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/debug-ecies.ts"],"names":[],"mappings":""}
@@ -1,110 +0,0 @@
1
- import { Constants as AppConstants, ECIES, getEciesI18nEngine, } from '@digitaldefiance/ecies-lib';
2
- import { createECDH } from 'crypto';
3
- import { ECIESService } from './service';
4
- /**
5
- * Debug utility for testing ECIES encryption and decryption with fixed keys
6
- */
7
- function debugEciesFunctions() {
8
- // Get the actual ECIES service from the service provider, same as the tests
9
- const config = {
10
- curveName: AppConstants.ECIES.CURVE_NAME,
11
- primaryKeyDerivationPath: AppConstants.ECIES.PRIMARY_KEY_DERIVATION_PATH,
12
- mnemonicStrength: AppConstants.ECIES.MNEMONIC_STRENGTH,
13
- symmetricAlgorithm: AppConstants.ECIES.SYMMETRIC_ALGORITHM_CONFIGURATION,
14
- symmetricKeyBits: AppConstants.ECIES.SYMMETRIC.KEY_BITS,
15
- symmetricKeyMode: AppConstants.ECIES.SYMMETRIC.MODE,
16
- };
17
- const service = new ECIESService(getEciesI18nEngine(), config);
18
- console.log('\n=== ECIES Debug Test ===\n');
19
- try {
20
- // Create fixed key pairs for reproducibility
21
- const aliceEcdh = createECDH(ECIES.CURVE_NAME);
22
- // Use a fixed seed for deterministic key generation
23
- const aliceSeed = Buffer.from('alice_fixed_seed_for_reproducible_tests', 'utf8');
24
- aliceEcdh.setPrivateKey(aliceSeed.subarray(0, 32));
25
- aliceEcdh.generateKeys();
26
- const bobEcdh = createECDH(ECIES.CURVE_NAME);
27
- const bobSeed = Buffer.from('bob_fixed_seed_for_reproducible_tests_', 'utf8');
28
- bobEcdh.setPrivateKey(bobSeed.subarray(0, 32));
29
- bobEcdh.generateKeys();
30
- // Get Alice's keys
31
- const alicePrivateKey = aliceEcdh.getPrivateKey();
32
- const alicePublicKey = aliceEcdh.getPublicKey();
33
- const alicePublicKeyWithPrefix = Buffer.concat([
34
- Buffer.from([ECIES.PUBLIC_KEY_MAGIC]),
35
- alicePublicKey.length === 64
36
- ? alicePublicKey
37
- : alicePublicKey.subarray(1),
38
- ]);
39
- // Get Bob's keys
40
- const bobPrivateKey = bobEcdh.getPrivateKey();
41
- const bobPublicKey = bobEcdh.getPublicKey();
42
- const bobPublicKeyWithPrefix = Buffer.concat([
43
- Buffer.from([ECIES.PUBLIC_KEY_MAGIC]),
44
- bobPublicKey.length === 64 ? bobPublicKey : bobPublicKey.subarray(1),
45
- ]);
46
- // Log key information
47
- console.log(`Alice Private Key (${alicePrivateKey.length} bytes): ${alicePrivateKey
48
- .toString('hex')
49
- .substring(0, 16)}...`);
50
- console.log(`Alice Public Key (${alicePublicKeyWithPrefix.length} bytes): ${alicePublicKeyWithPrefix
51
- .toString('hex')
52
- .substring(0, 16)}...`);
53
- console.log(`Alice Public Key Prefix: 0x${alicePublicKeyWithPrefix[0].toString(16)}\n`);
54
- console.log(`Bob Private Key (${bobPrivateKey.length} bytes): ${bobPrivateKey
55
- .toString('hex')
56
- .substring(0, 16)}...`);
57
- console.log(`Bob Public Key (${bobPublicKeyWithPrefix.length} bytes): ${bobPublicKeyWithPrefix.toString('hex').substring(0, 16)}...`);
58
- console.log(`Bob Public Key Prefix: 0x${bobPublicKeyWithPrefix[0].toString(16)}\n`);
59
- // Test simple message encryption/decryption
60
- console.log('--- Test 1: Simple Encryption/Decryption ---');
61
- const message = Buffer.from('This is a test message for ECIES encryption and decryption');
62
- console.log(`Original Message (${message.length} bytes): ${message.toString()}\n`);
63
- // Alice encrypts a message for Bob
64
- console.log('Alice encrypts a message for Bob...');
65
- const encrypted = service.encryptSimpleOrSingle(true, bobPublicKeyWithPrefix, message);
66
- console.log(`Encrypted Data (${encrypted.length} bytes): ${encrypted
67
- .toString('hex')
68
- .substring(0, 32)}...\n`);
69
- // Direct computations of shared secret for comparison (should match)
70
- const aliceSharedSecret = aliceEcdh.computeSecret(bobPublicKeyWithPrefix);
71
- const bobSharedSecret = bobEcdh.computeSecret(alicePublicKeyWithPrefix);
72
- console.log('Pre-computed shared secrets match:', aliceSharedSecret.equals(bobSharedSecret));
73
- console.log(`Shared Secret: ${aliceSharedSecret
74
- .toString('hex')
75
- .substring(0, 32)}...\n`);
76
- // Bob decrypts the message
77
- console.log('Bob decrypts the message...');
78
- try {
79
- const decrypted = service.decryptSimpleOrSingleWithHeader(true, bobPrivateKey, encrypted);
80
- console.log(`Decrypted Message (${decrypted.length} bytes): ${decrypted.toString()}`);
81
- console.log('Decryption successful:', decrypted.equals(message));
82
- }
83
- catch (error) {
84
- console.error('Decryption failed:', error);
85
- // Extract components for manual debugging
86
- console.log('\n--- Manual Debug of Encrypted Data ---');
87
- // The first 65 bytes should be the ephemeral public key
88
- const ephPublicKey = encrypted.subarray(0, ECIES.PUBLIC_KEY_LENGTH);
89
- console.log(`Ephemeral Public Key (${ephPublicKey.length} bytes): ${ephPublicKey
90
- .toString('hex')
91
- .substring(0, 32)}...`);
92
- console.log(`Ephemeral Public Key Prefix: 0x${ephPublicKey[0].toString(16)}`);
93
- // Next 16 bytes are the IV
94
- const iv = encrypted.subarray(ECIES.PUBLIC_KEY_LENGTH, ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE);
95
- console.log(`IV (${iv.length} bytes): ${iv.toString('hex')}`);
96
- // Next 16 bytes are the auth tag
97
- const authTag = encrypted.subarray(ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE, ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE + ECIES.AUTH_TAG_SIZE);
98
- console.log(`Auth Tag (${authTag.length} bytes): ${authTag.toString('hex')}`);
99
- // Remaining bytes are the encrypted content
100
- const encryptedContent = encrypted.subarray(ECIES.PUBLIC_KEY_LENGTH + ECIES.IV_SIZE + ECIES.AUTH_TAG_SIZE);
101
- console.log(`Encrypted Content (${encryptedContent.length} bytes): ${encryptedContent.toString('hex').substring(0, 32)}...`);
102
- }
103
- }
104
- catch (error) {
105
- console.error('An error occurred during ECIES debug test:', error);
106
- }
107
- }
108
- // Run the debug test
109
- debugEciesFunctions();
110
- //# sourceMappingURL=debug-ecies.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-ecies.js","sourceRoot":"","sources":["../../../src/services/ecies/debug-ecies.ts"],"names":[],"mappings":"AAAA,OAAO,EACL,SAAS,IAAI,YAAY,EACzB,KAAK,EACL,kBAAkB,GAEnB,MAAM,4BAA4B,CAAC;AACpC,OAAO,EAAE,UAAU,EAAE,MAAM,QAAQ,CAAC;AACpC,OAAO,EAAE,YAAY,EAAE,MAAM,WAAW,CAAC;AAEzC;;GAEG;AACH,SAAS,mBAAmB;IAC1B,4EAA4E;IAC5E,MAAM,MAAM,GAAiB;QAC3B,SAAS,EAAE,YAAY,CAAC,KAAK,CAAC,UAAU;QACxC,wBAAwB,EAAE,YAAY,CAAC,KAAK,CAAC,2BAA2B;QACxE,gBAAgB,EAAE,YAAY,CAAC,KAAK,CAAC,iBAAiB;QACtD,kBAAkB,EAAE,YAAY,CAAC,KAAK,CAAC,iCAAiC;QACxE,gBAAgB,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,QAAQ;QACvD,gBAAgB,EAAE,YAAY,CAAC,KAAK,CAAC,SAAS,CAAC,IAAI;KACpD,CAAC;IACF,MAAM,OAAO,GAAG,IAAI,YAAY,CAAC,kBAAkB,EAAE,EAAE,MAAM,CAAC,CAAC;IAC/D,OAAO,CAAC,GAAG,CAAC,8BAA8B,CAAC,CAAC;IAE5C,IAAI,CAAC;QACH,6CAA6C;QAC7C,MAAM,SAAS,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC/C,oDAAoD;QACpD,MAAM,SAAS,GAAG,MAAM,CAAC,IAAI,CAC3B,yCAAyC,EACzC,MAAM,CACP,CAAC;QACF,SAAS,CAAC,aAAa,CAAC,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QACnD,SAAS,CAAC,YAAY,EAAE,CAAC;QAEzB,MAAM,OAAO,GAAG,UAAU,CAAC,KAAK,CAAC,UAAU,CAAC,CAAC;QAC7C,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CACzB,wCAAwC,EACxC,MAAM,CACP,CAAC;QACF,OAAO,CAAC,aAAa,CAAC,OAAO,CAAC,QAAQ,CAAC,CAAC,EAAE,EAAE,CAAC,CAAC,CAAC;QAC/C,OAAO,CAAC,YAAY,EAAE,CAAC;QAEvB,mBAAmB;QACnB,MAAM,eAAe,GAAG,SAAS,CAAC,aAAa,EAAE,CAAC;QAClD,MAAM,cAAc,GAAG,SAAS,CAAC,YAAY,EAAE,CAAC;QAChD,MAAM,wBAAwB,GAAG,MAAM,CAAC,MAAM,CAAC;YAC7C,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACrC,cAAc,CAAC,MAAM,KAAK,EAAE;gBAC1B,CAAC,CAAC,cAAc;gBAChB,CAAC,CAAC,cAAc,CAAC,QAAQ,CAAC,CAAC,CAAC;SAC/B,CAAC,CAAC;QAEH,iBAAiB;QACjB,MAAM,aAAa,GAAG,OAAO,CAAC,aAAa,EAAE,CAAC;QAC9C,MAAM,YAAY,GAAG,OAAO,CAAC,YAAY,EAAE,CAAC;QAC5C,MAAM,sBAAsB,GAAG,MAAM,CAAC,MAAM,CAAC;YAC3C,MAAM,CAAC,IAAI,CAAC,CAAC,KAAK,CAAC,gBAAgB,CAAC,CAAC;YACrC,YAAY,CAAC,MAAM,KAAK,EAAE,CAAC,CAAC,CAAC,YAAY,CAAC,CAAC,CAAC,YAAY,CAAC,QAAQ,CAAC,CAAC,CAAC;SACrE,CAAC,CAAC;QAEH,sBAAsB;QACtB,OAAO,CAAC,GAAG,CACT,sBAAsB,eAAe,CAAC,MAAM,YAAY,eAAe;aACpE,QAAQ,CAAC,KAAK,CAAC;aACf,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CACzB,CAAC;QACF,OAAO,CAAC,GAAG,CACT,qBACE,wBAAwB,CAAC,MAC3B,YAAY,wBAAwB;aACjC,QAAQ,CAAC,KAAK,CAAC;aACf,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CACzB,CAAC;QACF,OAAO,CAAC,GAAG,CACT,8BAA8B,wBAAwB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAChE,EAAE,CACH,IAAI,CACN,CAAC;QAEF,OAAO,CAAC,GAAG,CACT,oBAAoB,aAAa,CAAC,MAAM,YAAY,aAAa;aAC9D,QAAQ,CAAC,KAAK,CAAC;aACf,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CACzB,CAAC;QACF,OAAO,CAAC,GAAG,CACT,mBACE,sBAAsB,CAAC,MACzB,YAAY,sBAAsB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CACzE,CAAC;QACF,OAAO,CAAC,GAAG,CACT,4BAA4B,sBAAsB,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,IAAI,CACvE,CAAC;QAEF,4CAA4C;QAC5C,OAAO,CAAC,GAAG,CAAC,8CAA8C,CAAC,CAAC;QAC5D,MAAM,OAAO,GAAG,MAAM,CAAC,IAAI,CACzB,4DAA4D,CAC7D,CAAC;QACF,OAAO,CAAC,GAAG,CACT,qBAAqB,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,QAAQ,EAAE,IAAI,CACtE,CAAC;QAEF,mCAAmC;QACnC,OAAO,CAAC,GAAG,CAAC,qCAAqC,CAAC,CAAC;QACnD,MAAM,SAAS,GAAG,OAAO,CAAC,qBAAqB,CAC7C,IAAI,EACJ,sBAAsB,EACtB,OAAO,CACR,CAAC;QACF,OAAO,CAAC,GAAG,CACT,mBAAmB,SAAS,CAAC,MAAM,YAAY,SAAS;aACrD,QAAQ,CAAC,KAAK,CAAC;aACf,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAC3B,CAAC;QAEF,qEAAqE;QACrE,MAAM,iBAAiB,GAAG,SAAS,CAAC,aAAa,CAAC,sBAAsB,CAAC,CAAC;QAC1E,MAAM,eAAe,GAAG,OAAO,CAAC,aAAa,CAAC,wBAAwB,CAAC,CAAC;QACxE,OAAO,CAAC,GAAG,CACT,oCAAoC,EACpC,iBAAiB,CAAC,MAAM,CAAC,eAAe,CAAC,CAC1C,CAAC;QACF,OAAO,CAAC,GAAG,CACT,kBAAkB,iBAAiB;aAChC,QAAQ,CAAC,KAAK,CAAC;aACf,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,OAAO,CAC3B,CAAC;QAEF,2BAA2B;QAC3B,OAAO,CAAC,GAAG,CAAC,6BAA6B,CAAC,CAAC;QAC3C,IAAI,CAAC;YACH,MAAM,SAAS,GAAG,OAAO,CAAC,+BAA+B,CACvD,IAAI,EACJ,aAAa,EACb,SAAS,CACV,CAAC;YACF,OAAO,CAAC,GAAG,CACT,sBACE,SAAS,CAAC,MACZ,YAAY,SAAS,CAAC,QAAQ,EAAE,EAAE,CACnC,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,wBAAwB,EAAE,SAAS,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC,CAAC;QACnE,CAAC;QAAC,OAAO,KAAK,EAAE,CAAC;YACf,OAAO,CAAC,KAAK,CAAC,oBAAoB,EAAE,KAAK,CAAC,CAAC;YAE3C,0CAA0C;YAC1C,OAAO,CAAC,GAAG,CAAC,0CAA0C,CAAC,CAAC;YAExD,wDAAwD;YACxD,MAAM,YAAY,GAAG,SAAS,CAAC,QAAQ,CAAC,CAAC,EAAE,KAAK,CAAC,iBAAiB,CAAC,CAAC;YACpE,OAAO,CAAC,GAAG,CACT,yBAAyB,YAAY,CAAC,MAAM,YAAY,YAAY;iBACjE,QAAQ,CAAC,KAAK,CAAC;iBACf,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CACzB,CAAC;YACF,OAAO,CAAC,GAAG,CACT,kCAAkC,YAAY,CAAC,CAAC,CAAC,CAAC,QAAQ,CAAC,EAAE,CAAC,EAAE,CACjE,CAAC;YAEF,2BAA2B;YAC3B,MAAM,EAAE,GAAG,SAAS,CAAC,QAAQ,CAC3B,KAAK,CAAC,iBAAiB,EACvB,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,CACxC,CAAC;YACF,OAAO,CAAC,GAAG,CAAC,OAAO,EAAE,CAAC,MAAM,YAAY,EAAE,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CAAC,CAAC;YAE9D,iCAAiC;YACjC,MAAM,OAAO,GAAG,SAAS,CAAC,QAAQ,CAChC,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,EACvC,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,aAAa,CAC9D,CAAC;YACF,OAAO,CAAC,GAAG,CACT,aAAa,OAAO,CAAC,MAAM,YAAY,OAAO,CAAC,QAAQ,CAAC,KAAK,CAAC,EAAE,CACjE,CAAC;YAEF,4CAA4C;YAC5C,MAAM,gBAAgB,GAAG,SAAS,CAAC,QAAQ,CACzC,KAAK,CAAC,iBAAiB,GAAG,KAAK,CAAC,OAAO,GAAG,KAAK,CAAC,aAAa,CAC9D,CAAC;YACF,OAAO,CAAC,GAAG,CACT,sBACE,gBAAgB,CAAC,MACnB,YAAY,gBAAgB,CAAC,QAAQ,CAAC,KAAK,CAAC,CAAC,SAAS,CAAC,CAAC,EAAE,EAAE,CAAC,KAAK,CACnE,CAAC;QACJ,CAAC;IACH,CAAC;IAAC,OAAO,KAAK,EAAE,CAAC;QACf,OAAO,CAAC,KAAK,CAAC,4CAA4C,EAAE,KAAK,CAAC,CAAC;IACrE,CAAC;AACH,CAAC;AAED,qBAAqB;AACrB,mBAAmB,EAAE,CAAC"}
@@ -1,2 +0,0 @@
1
- export {};
2
- //# sourceMappingURL=debug-test.d.ts.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-test.d.ts","sourceRoot":"","sources":["../../../src/services/ecies/debug-test.ts"],"names":[],"mappings":""}
@@ -1,57 +0,0 @@
1
- /**
2
- * Debug test script for ECIES encryption and decryption
3
- */
4
- import { ECIES } from '@digitaldefiance/ecies-lib';
5
- import { createECDH } from 'crypto';
6
- import { decryptDebug, encryptDebug } from './crypto-core.debug';
7
- async function runTest() {
8
- try {
9
- console.log('ECIES Debug Test');
10
- console.log('=================\n');
11
- // Generate a key pair for testing
12
- console.log('Generating key pair...');
13
- const ecdh = createECDH(ECIES.CURVE_NAME);
14
- ecdh.generateKeys();
15
- const privateKey = ecdh.getPrivateKey();
16
- const publicKey = ecdh.getPublicKey();
17
- console.log('Private key length:', privateKey.length);
18
- console.log('Public key length:', publicKey.length);
19
- console.log('Public key prefix:', publicKey[0].toString(16));
20
- // Create a test message
21
- const message = Buffer.from('This is a test message for ECIES encryption and decryption');
22
- console.log('\nOriginal message length:', message.length);
23
- console.log('Original message:', message.toString());
24
- // Encrypt the message
25
- console.log('\n--- Encryption ---');
26
- const encrypted = encryptDebug(publicKey, message);
27
- // Decrypt the message
28
- console.log('\n--- Decryption ---');
29
- const decrypted = decryptDebug(privateKey, encrypted);
30
- // Verify the result
31
- console.log('\n--- Verification ---');
32
- console.log('Decrypted message length:', decrypted.length);
33
- console.log('Decrypted message:', decrypted.toString());
34
- const success = message.equals(decrypted);
35
- console.log('Decryption successful:', success);
36
- // Try with a different key pair to simulate the test scenario
37
- console.log('\n\n=== Test with different public/private key pairs ===');
38
- const ecdh2 = createECDH(ECIES.CURVE_NAME);
39
- ecdh2.generateKeys();
40
- // Now encrypt with one key and decrypt with another (should fail)
41
- console.log('\n--- Cross-key encryption/decryption (should fail) ---');
42
- const encrypted2 = encryptDebug(ecdh2.getPublicKey(), message);
43
- try {
44
- const decrypted2 = decryptDebug(privateKey, encrypted2);
45
- console.log('Unexpectedly decrypted with wrong key:', decrypted2.toString());
46
- }
47
- catch (error) {
48
- console.log('Expected error when decrypting with wrong key:', error instanceof Error ? error.message : String(error));
49
- }
50
- }
51
- catch (error) {
52
- console.error('Test failed:', error);
53
- }
54
- }
55
- // Run the test
56
- runTest().catch(console.error);
57
- //# sourceMappingURL=debug-test.js.map
@@ -1 +0,0 @@
1
- {"version":3,"file":"debug-test.js","sourceRoot":"","sources":["../../../src/services/ecies/debug-test.ts"],"names":[],"mappings":"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"}