@nr1e/commons 0.0.0-snapshot-20251228031344 → 0.0.0-snapshot-20251228033901

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 (37) hide show
  1. package/dist/encryption/crypto-generator.d.mts +3 -0
  2. package/dist/encryption/crypto-generator.d.mts.map +1 -0
  3. package/dist/encryption/crypto-generator.mjs +8 -0
  4. package/dist/encryption/crypto-generator.mjs.map +1 -0
  5. package/dist/encryption/crypto-generator.test.d.mts +2 -0
  6. package/dist/encryption/crypto-generator.test.d.mts.map +1 -0
  7. package/dist/encryption/crypto-generator.test.mjs +13 -0
  8. package/dist/encryption/crypto-generator.test.mjs.map +1 -0
  9. package/dist/encryption/encryption.d.mts +11 -0
  10. package/dist/encryption/encryption.d.mts.map +1 -0
  11. package/dist/encryption/encryption.mjs +47 -0
  12. package/dist/encryption/encryption.mjs.map +1 -0
  13. package/dist/encryption/encryption.test.d.mts +2 -0
  14. package/dist/encryption/encryption.test.d.mts.map +1 -0
  15. package/dist/encryption/encryption.test.mjs +19 -0
  16. package/dist/encryption/encryption.test.mjs.map +1 -0
  17. package/dist/encryption/index.d.mts +4 -0
  18. package/dist/encryption/index.d.mts.map +1 -0
  19. package/dist/encryption/index.mjs +4 -0
  20. package/dist/encryption/index.mjs.map +1 -0
  21. package/dist/encryption/new-format.test.d.mts +2 -0
  22. package/dist/encryption/new-format.test.d.mts.map +1 -0
  23. package/dist/encryption/new-format.test.mjs +127 -0
  24. package/dist/encryption/new-format.test.mjs.map +1 -0
  25. package/dist/encryption/rsa-encryption.browser.d.mts +36 -0
  26. package/dist/encryption/rsa-encryption.browser.d.mts.map +1 -0
  27. package/dist/encryption/rsa-encryption.browser.mjs +140 -0
  28. package/dist/encryption/rsa-encryption.browser.mjs.map +1 -0
  29. package/dist/encryption/rsa-encryption.d.mts +89 -0
  30. package/dist/encryption/rsa-encryption.d.mts.map +1 -0
  31. package/dist/encryption/rsa-encryption.mjs +254 -0
  32. package/dist/encryption/rsa-encryption.mjs.map +1 -0
  33. package/dist/encryption/rsa-encryption.test.d.mts +2 -0
  34. package/dist/encryption/rsa-encryption.test.d.mts.map +1 -0
  35. package/dist/encryption/rsa-encryption.test.mjs +324 -0
  36. package/dist/encryption/rsa-encryption.test.mjs.map +1 -0
  37. package/package.json +5 -1
@@ -0,0 +1,254 @@
1
+ import { generateKeyPairSync as cryptoGenerateKeyPairSync, generateKeyPair as cryptoGenerateKeyPair, publicEncrypt, privateDecrypt, constants, createPublicKey, createPrivateKey, } from 'crypto';
2
+ import { promisify } from 'util';
3
+ const generateKeyPairAsync = promisify(cryptoGenerateKeyPair);
4
+ /**
5
+ * Convert raw base64 key (without PEM headers) to PEM format
6
+ * @param base64Key - Raw base64 encoded key (no headers)
7
+ * @param type - Type of key (PUBLIC or PRIVATE)
8
+ * @returns PEM formatted key
9
+ */
10
+ function rawBase64ToPem(base64Key, type = 'PUBLIC') {
11
+ const pemHeader = `-----BEGIN ${type} KEY-----`;
12
+ const pemFooter = `-----END ${type} KEY-----`;
13
+ // Format as PEM with line breaks every 64 characters
14
+ const formatted = base64Key.match(/.{1,64}/g)?.join('\n') || base64Key;
15
+ return `${pemHeader}\n${formatted}\n${pemFooter}`;
16
+ }
17
+ /**
18
+ * Normalize a key to PEM format
19
+ * Handles three formats:
20
+ * 1. Already in PEM format (with -----BEGIN headers)
21
+ * 2. Base64 encoded PEM (decode first, then use as PEM)
22
+ * 3. Raw base64 key material (needs PEM headers added)
23
+ * @param key - Key in any supported format
24
+ * @param type - Type of key (PUBLIC or PRIVATE)
25
+ * @returns PEM formatted key
26
+ */
27
+ function normalizeKeyToPem(key, type) {
28
+ // Already in PEM format
29
+ if (key.includes('-----BEGIN')) {
30
+ return key;
31
+ }
32
+ // Try to decode as base64 to see if it contains PEM
33
+ try {
34
+ const decoded = Buffer.from(key, 'base64').toString('utf8');
35
+ if (decoded.includes('-----BEGIN')) {
36
+ // It was base64 encoded PEM
37
+ return decoded;
38
+ }
39
+ }
40
+ catch {
41
+ // Not valid base64 or not PEM inside, continue
42
+ }
43
+ // Raw base64 key material - add PEM headers
44
+ return rawBase64ToPem(key, type);
45
+ }
46
+ /**
47
+ * Generate an RSA key pair synchronously
48
+ * @param options - Options for key generation
49
+ * @returns RSA key pair in the specified format
50
+ */
51
+ export function generateKeyPairSync(options = {}) {
52
+ const { keySize = 2048, format = 'pem' } = options;
53
+ const { publicKey, privateKey } = cryptoGenerateKeyPairSync('rsa', {
54
+ modulusLength: keySize,
55
+ publicKeyEncoding: {
56
+ type: 'spki',
57
+ format: 'pem',
58
+ },
59
+ privateKeyEncoding: {
60
+ type: 'pkcs8',
61
+ format: 'pem',
62
+ },
63
+ });
64
+ if (format === 'base64') {
65
+ return {
66
+ publicKey: Buffer.from(publicKey).toString('base64'),
67
+ privateKey: Buffer.from(privateKey).toString('base64'),
68
+ };
69
+ }
70
+ return { publicKey, privateKey };
71
+ }
72
+ /**
73
+ * Generate an RSA key pair asynchronously
74
+ * @param options - Options for key generation
75
+ * @returns Promise resolving to RSA key pair in the specified format
76
+ */
77
+ export async function generateKeyPair(options = {}) {
78
+ const { keySize = 2048, format = 'pem' } = options;
79
+ const { publicKey, privateKey } = await generateKeyPairAsync('rsa', {
80
+ modulusLength: keySize,
81
+ publicKeyEncoding: {
82
+ type: 'spki',
83
+ format: 'pem',
84
+ },
85
+ privateKeyEncoding: {
86
+ type: 'pkcs8',
87
+ format: 'pem',
88
+ },
89
+ });
90
+ if (format === 'base64') {
91
+ return {
92
+ publicKey: Buffer.from(publicKey).toString('base64'),
93
+ privateKey: Buffer.from(privateKey).toString('base64'),
94
+ };
95
+ }
96
+ return { publicKey, privateKey };
97
+ }
98
+ /**
99
+ * Encrypt data using an RSA public key
100
+ * Supports three key formats:
101
+ * 1. PEM format (with -----BEGIN PUBLIC KEY-----)
102
+ * 2. Base64 encoded PEM
103
+ * 3. Raw base64 key material (without PEM headers)
104
+ * @param data - Data to encrypt (string or object)
105
+ * @param publicKey - RSA public key in any supported format
106
+ * @param options - Encryption options
107
+ * @returns Encrypted data as base64 string
108
+ */
109
+ export function encryptWithPublicKey(data, publicKey, options = {}) {
110
+ const { encoding = 'base64' } = options;
111
+ // Convert data to string if it's an object
112
+ const dataString = typeof data === 'object' ? JSON.stringify(data) : data;
113
+ const dataBuffer = Buffer.from(dataString, 'utf8');
114
+ // Normalize key to PEM format
115
+ const keyToUse = normalizeKeyToPem(publicKey, 'PUBLIC');
116
+ // Encrypt using OAEP padding with SHA-256
117
+ const encrypted = publicEncrypt({
118
+ key: keyToUse,
119
+ padding: constants.RSA_PKCS1_OAEP_PADDING,
120
+ oaepHash: 'sha256',
121
+ }, dataBuffer);
122
+ return encrypted.toString(encoding);
123
+ }
124
+ /**
125
+ * Decrypt data using an RSA private key
126
+ * Supports three key formats:
127
+ * 1. PEM format (with -----BEGIN PRIVATE KEY-----)
128
+ * 2. Base64 encoded PEM
129
+ * 3. Raw base64 key material (without PEM headers)
130
+ * @param encryptedData - Encrypted data as base64 string
131
+ * @param privateKey - RSA private key in any supported format
132
+ * @param options - Decryption options
133
+ * @returns Decrypted data as string or parsed object
134
+ */
135
+ export function decryptWithPrivateKey(encryptedData, privateKey, options = {}) {
136
+ const { encoding = 'base64' } = options;
137
+ // Convert encrypted data from base64 to buffer
138
+ const encryptedBuffer = Buffer.from(encryptedData, encoding);
139
+ // Normalize key to PEM format
140
+ const keyToUse = normalizeKeyToPem(privateKey, 'PRIVATE');
141
+ // Decrypt using OAEP padding with SHA-256
142
+ const decrypted = privateDecrypt({
143
+ key: keyToUse,
144
+ padding: constants.RSA_PKCS1_OAEP_PADDING,
145
+ oaepHash: 'sha256',
146
+ }, encryptedBuffer);
147
+ const decryptedString = decrypted.toString('utf8');
148
+ // Try to parse as JSON, return string if it fails
149
+ try {
150
+ return JSON.parse(decryptedString);
151
+ }
152
+ catch {
153
+ return decryptedString;
154
+ }
155
+ }
156
+ /**
157
+ * Export RSA keys to different formats
158
+ * @param keyPair - RSA key pair
159
+ * @param format - Target format
160
+ * @returns Key pair in the specified format
161
+ */
162
+ export function exportKeys(keyPair, format) {
163
+ if (format === 'base64') {
164
+ // Convert PEM to base64 if needed
165
+ if (keyPair.publicKey.includes('-----BEGIN')) {
166
+ return {
167
+ publicKey: Buffer.from(keyPair.publicKey).toString('base64'),
168
+ privateKey: Buffer.from(keyPair.privateKey).toString('base64'),
169
+ };
170
+ }
171
+ return keyPair;
172
+ }
173
+ else {
174
+ // Convert to PEM if needed
175
+ return {
176
+ publicKey: normalizeKeyToPem(keyPair.publicKey, 'PUBLIC'),
177
+ privateKey: normalizeKeyToPem(keyPair.privateKey, 'PRIVATE'),
178
+ };
179
+ }
180
+ }
181
+ /**
182
+ * Import RSA keys from strings to KeyObject instances
183
+ * @param publicKey - Public key string (PEM, base64 encoded PEM, or raw base64)
184
+ * @param privateKey - Private key string (PEM, base64 encoded PEM, or raw base64)
185
+ * @returns KeyObject instances for the keys
186
+ */
187
+ export function importKeys(publicKey, privateKey) {
188
+ const pubKeyPem = normalizeKeyToPem(publicKey, 'PUBLIC');
189
+ const privKeyPem = normalizeKeyToPem(privateKey, 'PRIVATE');
190
+ return {
191
+ publicKey: createPublicKey(pubKeyPem),
192
+ privateKey: createPrivateKey(privKeyPem),
193
+ };
194
+ }
195
+ /**
196
+ * Validate if a string is a valid RSA public key
197
+ * @param key - Key string to validate
198
+ * @returns True if valid public key
199
+ */
200
+ export function isValidPublicKey(key) {
201
+ try {
202
+ const keyPem = normalizeKeyToPem(key, 'PUBLIC');
203
+ // Check if it's actually a private key
204
+ if (keyPem.includes('PRIVATE KEY')) {
205
+ return false;
206
+ }
207
+ createPublicKey(keyPem);
208
+ return true;
209
+ }
210
+ catch {
211
+ return false;
212
+ }
213
+ }
214
+ /**
215
+ * Validate if a string is a valid RSA private key
216
+ * @param key - Key string to validate
217
+ * @returns True if valid private key
218
+ */
219
+ export function isValidPrivateKey(key) {
220
+ try {
221
+ const keyPem = normalizeKeyToPem(key, 'PRIVATE');
222
+ createPrivateKey(keyPem);
223
+ return true;
224
+ }
225
+ catch {
226
+ return false;
227
+ }
228
+ }
229
+ /**
230
+ * Get the key size of an RSA key
231
+ * @param key - RSA key (public or private) in any supported format
232
+ * @returns Key size in bits
233
+ */
234
+ export function getKeySize(key) {
235
+ let keyPem;
236
+ // Determine if it's a public or private key
237
+ if (key.includes('PRIVATE') ||
238
+ (!key.includes('BEGIN') && key.length > 1000)) {
239
+ keyPem = normalizeKeyToPem(key, 'PRIVATE');
240
+ }
241
+ else {
242
+ keyPem = normalizeKeyToPem(key, 'PUBLIC');
243
+ }
244
+ let keyObject;
245
+ if (keyPem.includes('PUBLIC KEY')) {
246
+ keyObject = createPublicKey(keyPem);
247
+ }
248
+ else {
249
+ keyObject = createPrivateKey(keyPem);
250
+ }
251
+ const keyDetails = keyObject.asymmetricKeyDetails;
252
+ return keyDetails?.modulusLength || 0;
253
+ }
254
+ //# sourceMappingURL=rsa-encryption.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa-encryption.mjs","sourceRoot":"","sources":["../../src/encryption/rsa-encryption.mts"],"names":[],"mappings":"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"}
@@ -0,0 +1,2 @@
1
+ export {};
2
+ //# sourceMappingURL=rsa-encryption.test.d.mts.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa-encryption.test.d.mts","sourceRoot":"","sources":["../../src/encryption/rsa-encryption.test.mts"],"names":[],"mappings":""}
@@ -0,0 +1,324 @@
1
+ import { describe, it, expect, beforeAll } from 'vitest';
2
+ import { generateKeyPair, generateKeyPairSync, encryptWithPublicKey, decryptWithPrivateKey, exportKeys, importKeys, isValidPublicKey, isValidPrivateKey, getKeySize, } from './rsa-encryption.mjs';
3
+ describe('RSA Encryption', () => {
4
+ let testKeyPair;
5
+ beforeAll(() => {
6
+ // Generate a test key pair for use in multiple tests
7
+ testKeyPair = generateKeyPairSync();
8
+ });
9
+ describe('generateKeyPairSync', () => {
10
+ it('should generate a valid RSA key pair with default options', () => {
11
+ const keyPair = generateKeyPairSync();
12
+ expect(keyPair).toBeDefined();
13
+ expect(keyPair.publicKey).toBeDefined();
14
+ expect(keyPair.privateKey).toBeDefined();
15
+ expect(keyPair.publicKey).toContain('-----BEGIN PUBLIC KEY-----');
16
+ expect(keyPair.privateKey).toContain('-----BEGIN PRIVATE KEY-----');
17
+ });
18
+ it('should generate a 2048-bit key pair by default', () => {
19
+ const keyPair = generateKeyPairSync();
20
+ const keySize = getKeySize(keyPair.publicKey);
21
+ expect(keySize).toBe(2048);
22
+ });
23
+ it('should generate a 3072-bit key pair when specified', () => {
24
+ const keyPair = generateKeyPairSync({ keySize: 3072 });
25
+ const keySize = getKeySize(keyPair.publicKey);
26
+ expect(keySize).toBe(3072);
27
+ });
28
+ it('should generate a 4096-bit key pair when specified', () => {
29
+ const keyPair = generateKeyPairSync({ keySize: 4096 });
30
+ const keySize = getKeySize(keyPair.publicKey);
31
+ expect(keySize).toBe(4096);
32
+ });
33
+ it('should generate keys in base64 format when specified', () => {
34
+ const keyPair = generateKeyPairSync({ format: 'base64' });
35
+ expect(keyPair.publicKey).toBeDefined();
36
+ expect(keyPair.privateKey).toBeDefined();
37
+ expect(keyPair.publicKey).not.toContain('-----BEGIN');
38
+ expect(keyPair.privateKey).not.toContain('-----BEGIN');
39
+ // Should be valid base64
40
+ expect(() => Buffer.from(keyPair.publicKey, 'base64')).not.toThrow();
41
+ expect(() => Buffer.from(keyPair.privateKey, 'base64')).not.toThrow();
42
+ });
43
+ });
44
+ describe('generateKeyPair (async)', () => {
45
+ it('should generate a valid RSA key pair asynchronously', async () => {
46
+ const keyPair = await generateKeyPair();
47
+ expect(keyPair).toBeDefined();
48
+ expect(keyPair.publicKey).toBeDefined();
49
+ expect(keyPair.privateKey).toBeDefined();
50
+ expect(keyPair.publicKey).toContain('-----BEGIN PUBLIC KEY-----');
51
+ expect(keyPair.privateKey).toContain('-----BEGIN PRIVATE KEY-----');
52
+ });
53
+ it('should generate keys in base64 format when specified', async () => {
54
+ const keyPair = await generateKeyPair({ format: 'base64' });
55
+ expect(keyPair.publicKey).not.toContain('-----BEGIN');
56
+ expect(keyPair.privateKey).not.toContain('-----BEGIN');
57
+ });
58
+ });
59
+ describe('encryptWithPublicKey and decryptWithPrivateKey', () => {
60
+ it('should encrypt and decrypt a string successfully', () => {
61
+ const originalData = 'Hello, World!';
62
+ const encrypted = encryptWithPublicKey(originalData, testKeyPair.publicKey);
63
+ expect(encrypted).toBeDefined();
64
+ expect(encrypted).not.toBe(originalData);
65
+ const decrypted = decryptWithPrivateKey(encrypted, testKeyPair.privateKey);
66
+ expect(decrypted).toBe(originalData);
67
+ });
68
+ it('should encrypt and decrypt an object successfully', () => {
69
+ const originalData = {
70
+ name: 'John Doe',
71
+ age: 30,
72
+ email: 'john@example.com',
73
+ nested: {
74
+ key: 'value',
75
+ },
76
+ };
77
+ const encrypted = encryptWithPublicKey(originalData, testKeyPair.publicKey);
78
+ expect(encrypted).toBeDefined();
79
+ const decrypted = decryptWithPrivateKey(encrypted, testKeyPair.privateKey);
80
+ expect(decrypted).toEqual(originalData);
81
+ });
82
+ it('should handle base64 encoded keys', () => {
83
+ const base64KeyPair = generateKeyPairSync({ format: 'base64' });
84
+ const originalData = 'Test with base64 keys';
85
+ const encrypted = encryptWithPublicKey(originalData, base64KeyPair.publicKey);
86
+ const decrypted = decryptWithPrivateKey(encrypted, base64KeyPair.privateKey);
87
+ expect(decrypted).toBe(originalData);
88
+ });
89
+ it('should handle raw base64 keys without PEM headers', () => {
90
+ // Generate a key pair and extract the raw base64 (simulate the new format)
91
+ const pemKeyPair = generateKeyPairSync({ format: 'pem' });
92
+ // Extract raw base64 from PEM by removing headers and newlines
93
+ const rawPublicKey = pemKeyPair.publicKey
94
+ .replace('-----BEGIN PUBLIC KEY-----', '')
95
+ .replace('-----END PUBLIC KEY-----', '')
96
+ .replace(/\s/g, '');
97
+ const rawPrivateKey = pemKeyPair.privateKey
98
+ .replace('-----BEGIN PRIVATE KEY-----', '')
99
+ .replace('-----END PRIVATE KEY-----', '')
100
+ .replace(/\s/g, '');
101
+ const originalData = 'Test with raw base64 keys';
102
+ // Should work with raw base64 format
103
+ const encrypted = encryptWithPublicKey(originalData, rawPublicKey);
104
+ const decrypted = decryptWithPrivateKey(encrypted, rawPrivateKey);
105
+ expect(decrypted).toBe(originalData);
106
+ });
107
+ it('should handle the new environment format (raw base64 without PEM headers)', () => {
108
+ // Test with the actual format from the dev environment
109
+ const rawPublicKey = 'MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA1M6wSqLb6VDlo1E1zQet/F8ubAhvdcLLe8CKd66w154qZ4b0mYNSmw7DXR+wNz4k8VkP9Cxi/SxxHqj+PLYugHWftN/OFsSUASWRr0jiywQ5pbEngMU56Wy90iZmu9ngimdwinmuOjIuDFVyQNGb8E9k1YcTUMqhbgV7OPjn2n6YuJje5A/bLXzrF9qwXxDlLz3Idc8oRDjL42/erifhV7jPk6yFGD7TxHYAtaFP9Q6sQzNvPX3z4xJkTsRCDoFXGu5jCWxWKtXZTT7Jgpxo5PWjR05aNSQu87UBDNM1a3cJygFGdi4k9lhVfK9NRLwX3IrGJx0EYpS70e6SYwmxawIDAQAB';
110
+ const rawPrivateKey = 'MIIEvQIBADANBgkqhkiG9w0BAQEFAASCBKcwggSjAgEAAoIBAQDUzrBKotvpUOWjUTXNB638Xy5sCG91wst7wIp3rrDXnipnhvSZg1KbDsNdH7A3PiTxWQ/0LGL9LHEeqP48ti6AdZ+0384WxJQBJZGvSOLLBDmlsSeAxTnpbL3SJma72eCKZ3CKea46Mi4MVXJA0ZvwT2TVhxNQyqFuBXs4+Ofafpi4mN7kD9stfOsX2rBfEOUvPch1zyhEOMvjb96uJ+FXuM+TrIUYPtPEdgC1oU/1DqxDM289ffPjEmROxEIOgVca7mMJbFYq1dlNPsmCnGjk9aNHTlo1JC7ztQEM0zVrdwnKAUZ2LiT2WFV8r01EvBfcisYnHQRilLvR7pJjCbFrAgMBAAECggEAFNVnTOdEwEK7OJHqwnfOALcQxGLPBqhbY3ImHDFt/q3tWNVNfPnuTF/VoHhJuB7NXxNpDG6MAl0ndej1etwbEVhymjKO6ou0MaiL6q0oBtgTDLWbOHAWi1OqAbjgteNOqD4YNnZTKD9hYrO6y725ln0vUfg3W+F6jFrdBWbYy/sLFC6LiPjBo5UrtYwsFXS63JiOs+wuZGRWDlaOpA26ptGQFh4hIoQ494Lwz5G92w0zKTPh1qGLa+vpB9NlUWpJdZPVbN3GL7q3/N2qwt26VwgR2UB/wdM7lA7m4OltqcYykz8bJa+dm9U/qwME3i7GGhqtSml6ugWE7XsBK47QgQKBgQD2RNK7EnhTKs08j5O8+yLR9ZTFdKsmx6kdXddQ9v//y5IxlYeoQDZ+o6pyWdLixfWg6O4ipMlG+5WOG5Gvxqf/avpUc25aCF157dLLaagDUCoJbsmnw13vDl/xE4HfADJSk8vlhU2MX6z+uYR7t286HbJ9Z0XZnDAo55qoPV0SlwKBgQDdN2FIi9Wr6D1vioQsJLINbTwIQIv5Khko/RzS4MwApdaKiL+0mUFUqPBAX4jxdihv9wl8shtgZZleB+283JzmDouO4I7H4pf8HhQ6Fg/1q66EucgCJvY7xkVN6BGN1RblcDx3GAdoQF7o8k1ME9uynkFTZjGdjEnNh2C8jwL2TQKBgEuy8hfA4K2n3Xh9JcuUYqqpU3aymx2LiAdX3iSsGBrXx3NoZE+qlVWuF2mZBMLiWNOCZhjOEHS6Rsls3gZrCR7xEku9Q7F3Gsys9vvB2XxTOui1XlUsL4aZI5KmDWiv1cgeWDGQHTtF+ZY/DmM9CnqRwFjd0tHGOeOI9bg7TI23AoGBANk9dGzQ3fGm7QYnqirLkos69ZRJBuyWmgS1pGO23L/aHDkJl/Gb+xtPmDgvWYV+erGRkSCCq/3baGR+Nsqcf/ww1n5mKfFDpeuyAj0Uw3GHuqee5jqu1mrXB+I8/1ggpg6FTOvLjiKj7FCo+p22dq8PWKm1Fw5X4XZT9vzVGJyVAoGAfWcHjfYtBZF7j7V1AorL6mDaD7fpDEl/JQxwYpFwryAtSlPFrylXvvxb0R9h2cGdknNSAZhUkl+D+ceIH9iz3mwHT7uncNqwyi7OomOJSeWbsisw2II8vmGdSnEQDKKwZAfJ6nF8BGq6+HuRzD/Y0sujE31CSkRJbMRRgUVmPfU=';
111
+ const originalData = 'Test with new environment format';
112
+ // Should work with the new raw base64 format from environment
113
+ const encrypted = encryptWithPublicKey(originalData, rawPublicKey);
114
+ const decrypted = decryptWithPrivateKey(encrypted, rawPrivateKey);
115
+ expect(decrypted).toBe(originalData);
116
+ });
117
+ it('should handle maximum allowed string size', () => {
118
+ // For 2048-bit key with OAEP padding, max is approximately 190 bytes
119
+ const maxString = 'x'.repeat(190);
120
+ const encrypted = encryptWithPublicKey(maxString, testKeyPair.publicKey);
121
+ const decrypted = decryptWithPrivateKey(encrypted, testKeyPair.privateKey);
122
+ expect(decrypted).toBe(maxString);
123
+ });
124
+ it('should throw error when data is too large for key size', () => {
125
+ // Exceeding the maximum size for 2048-bit key
126
+ const tooLargeString = 'x'.repeat(250);
127
+ expect(() => {
128
+ encryptWithPublicKey(tooLargeString, testKeyPair.publicKey);
129
+ }).toThrow('data too large for key size');
130
+ });
131
+ it('should throw error when decrypting with wrong key', () => {
132
+ const wrongKeyPair = generateKeyPairSync();
133
+ const originalData = 'Secret message';
134
+ const encrypted = encryptWithPublicKey(originalData, testKeyPair.publicKey);
135
+ expect(() => {
136
+ decryptWithPrivateKey(encrypted, wrongKeyPair.privateKey);
137
+ }).toThrow();
138
+ }, 30000);
139
+ it('should throw error when encrypting with invalid key', () => {
140
+ const invalidKey = 'not-a-valid-key';
141
+ expect(() => {
142
+ encryptWithPublicKey('test', invalidKey);
143
+ }).toThrow();
144
+ });
145
+ });
146
+ describe('exportKeys', () => {
147
+ it('should export PEM keys to base64 format', () => {
148
+ const pemKeyPair = generateKeyPairSync({ format: 'pem' });
149
+ const base64KeyPair = exportKeys(pemKeyPair, 'base64');
150
+ expect(base64KeyPair.publicKey).not.toContain('-----BEGIN');
151
+ expect(base64KeyPair.privateKey).not.toContain('-----BEGIN');
152
+ // Should be valid base64
153
+ expect(() => Buffer.from(base64KeyPair.publicKey, 'base64')).not.toThrow();
154
+ expect(() => Buffer.from(base64KeyPair.privateKey, 'base64')).not.toThrow();
155
+ });
156
+ it('should export base64 keys to PEM format', () => {
157
+ const base64KeyPair = generateKeyPairSync({ format: 'base64' });
158
+ const pemKeyPair = exportKeys(base64KeyPair, 'pem');
159
+ expect(pemKeyPair.publicKey).toContain('-----BEGIN PUBLIC KEY-----');
160
+ expect(pemKeyPair.privateKey).toContain('-----BEGIN PRIVATE KEY-----');
161
+ });
162
+ it('should return same keys if already in requested format', () => {
163
+ const pemKeyPair = generateKeyPairSync({ format: 'pem' });
164
+ const exportedPem = exportKeys(pemKeyPair, 'pem');
165
+ expect(exportedPem).toEqual(pemKeyPair);
166
+ const base64KeyPair = generateKeyPairSync({ format: 'base64' });
167
+ const exportedBase64 = exportKeys(base64KeyPair, 'base64');
168
+ expect(exportedBase64).toEqual(base64KeyPair);
169
+ });
170
+ });
171
+ describe('importKeys', () => {
172
+ it('should import PEM keys successfully', () => {
173
+ const keyObjects = importKeys(testKeyPair.publicKey, testKeyPair.privateKey);
174
+ expect(keyObjects).toBeDefined();
175
+ expect(keyObjects.publicKey).toBeDefined();
176
+ expect(keyObjects.privateKey).toBeDefined();
177
+ expect(keyObjects.publicKey.type).toBe('public');
178
+ expect(keyObjects.privateKey.type).toBe('private');
179
+ });
180
+ it('should import base64 keys successfully', () => {
181
+ const base64KeyPair = generateKeyPairSync({ format: 'base64' });
182
+ const keyObjects = importKeys(base64KeyPair.publicKey, base64KeyPair.privateKey);
183
+ expect(keyObjects).toBeDefined();
184
+ expect(keyObjects.publicKey.type).toBe('public');
185
+ expect(keyObjects.privateKey.type).toBe('private');
186
+ });
187
+ it('should import raw base64 keys without PEM headers', () => {
188
+ const pemKeyPair = generateKeyPairSync({ format: 'pem' });
189
+ // Extract raw base64
190
+ const rawPublicKey = pemKeyPair.publicKey
191
+ .replace('-----BEGIN PUBLIC KEY-----', '')
192
+ .replace('-----END PUBLIC KEY-----', '')
193
+ .replace(/\s/g, '');
194
+ const rawPrivateKey = pemKeyPair.privateKey
195
+ .replace('-----BEGIN PRIVATE KEY-----', '')
196
+ .replace('-----END PRIVATE KEY-----', '')
197
+ .replace(/\s/g, '');
198
+ const keyObjects = importKeys(rawPublicKey, rawPrivateKey);
199
+ expect(keyObjects).toBeDefined();
200
+ expect(keyObjects.publicKey.type).toBe('public');
201
+ expect(keyObjects.privateKey.type).toBe('private');
202
+ });
203
+ });
204
+ describe('isValidPublicKey', () => {
205
+ it('should return true for valid PEM public key', () => {
206
+ expect(isValidPublicKey(testKeyPair.publicKey)).toBe(true);
207
+ });
208
+ it('should return true for valid base64 public key', () => {
209
+ const base64KeyPair = generateKeyPairSync({ format: 'base64' });
210
+ expect(isValidPublicKey(base64KeyPair.publicKey)).toBe(true);
211
+ });
212
+ it('should return true for raw base64 public key without PEM headers', () => {
213
+ const pemKeyPair = generateKeyPairSync({ format: 'pem' });
214
+ const rawPublicKey = pemKeyPair.publicKey
215
+ .replace('-----BEGIN PUBLIC KEY-----', '')
216
+ .replace('-----END PUBLIC KEY-----', '')
217
+ .replace(/\s/g, '');
218
+ expect(isValidPublicKey(rawPublicKey)).toBe(true);
219
+ });
220
+ it('should return false for invalid key', () => {
221
+ expect(isValidPublicKey('invalid-key')).toBe(false);
222
+ expect(isValidPublicKey('')).toBe(false);
223
+ expect(isValidPublicKey('-----BEGIN PUBLIC KEY-----\ninvalid\n-----END PUBLIC KEY-----')).toBe(false);
224
+ });
225
+ it('should return false for private key', () => {
226
+ expect(isValidPublicKey(testKeyPair.privateKey)).toBe(false);
227
+ });
228
+ });
229
+ describe('isValidPrivateKey', () => {
230
+ it('should return true for valid PEM private key', () => {
231
+ expect(isValidPrivateKey(testKeyPair.privateKey)).toBe(true);
232
+ });
233
+ it('should return true for valid base64 private key', () => {
234
+ const base64KeyPair = generateKeyPairSync({ format: 'base64' });
235
+ expect(isValidPrivateKey(base64KeyPair.privateKey)).toBe(true);
236
+ });
237
+ it('should return true for raw base64 private key without PEM headers', () => {
238
+ const pemKeyPair = generateKeyPairSync({ format: 'pem' });
239
+ const rawPrivateKey = pemKeyPair.privateKey
240
+ .replace('-----BEGIN PRIVATE KEY-----', '')
241
+ .replace('-----END PRIVATE KEY-----', '')
242
+ .replace(/\s/g, '');
243
+ expect(isValidPrivateKey(rawPrivateKey)).toBe(true);
244
+ });
245
+ it('should return false for invalid key', () => {
246
+ expect(isValidPrivateKey('invalid-key')).toBe(false);
247
+ expect(isValidPrivateKey('')).toBe(false);
248
+ expect(isValidPrivateKey('-----BEGIN PRIVATE KEY-----\ninvalid\n-----END PRIVATE KEY-----')).toBe(false);
249
+ });
250
+ it('should return false for public key', () => {
251
+ expect(isValidPrivateKey(testKeyPair.publicKey)).toBe(false);
252
+ });
253
+ });
254
+ describe('getKeySize', () => {
255
+ it('should return correct key size for 2048-bit key', () => {
256
+ const keyPair = generateKeyPairSync({ keySize: 2048 });
257
+ expect(getKeySize(keyPair.publicKey)).toBe(2048);
258
+ expect(getKeySize(keyPair.privateKey)).toBe(2048);
259
+ });
260
+ it('should return correct key size for 3072-bit key', () => {
261
+ const keyPair = generateKeyPairSync({ keySize: 3072 });
262
+ expect(getKeySize(keyPair.publicKey)).toBe(3072);
263
+ expect(getKeySize(keyPair.privateKey)).toBe(3072);
264
+ });
265
+ it('should return correct key size for 4096-bit key', () => {
266
+ const keyPair = generateKeyPairSync({ keySize: 4096 });
267
+ expect(getKeySize(keyPair.publicKey)).toBe(4096);
268
+ expect(getKeySize(keyPair.privateKey)).toBe(4096);
269
+ });
270
+ it('should handle base64 encoded keys', () => {
271
+ const base64KeyPair = generateKeyPairSync({
272
+ keySize: 2048,
273
+ format: 'base64',
274
+ });
275
+ expect(getKeySize(base64KeyPair.publicKey)).toBe(2048);
276
+ expect(getKeySize(base64KeyPair.privateKey)).toBe(2048);
277
+ });
278
+ it('should handle raw base64 keys without PEM headers', () => {
279
+ const pemKeyPair = generateKeyPairSync({ keySize: 2048, format: 'pem' });
280
+ const rawPublicKey = pemKeyPair.publicKey
281
+ .replace('-----BEGIN PUBLIC KEY-----', '')
282
+ .replace('-----END PUBLIC KEY-----', '')
283
+ .replace(/\s/g, '');
284
+ const rawPrivateKey = pemKeyPair.privateKey
285
+ .replace('-----BEGIN PRIVATE KEY-----', '')
286
+ .replace('-----END PRIVATE KEY-----', '')
287
+ .replace(/\s/g, '');
288
+ expect(getKeySize(rawPublicKey)).toBe(2048);
289
+ expect(getKeySize(rawPrivateKey)).toBe(2048);
290
+ });
291
+ });
292
+ describe('Edge cases and error handling', () => {
293
+ it('should handle empty string encryption', () => {
294
+ const encrypted = encryptWithPublicKey('', testKeyPair.publicKey);
295
+ const decrypted = decryptWithPrivateKey(encrypted, testKeyPair.privateKey);
296
+ expect(decrypted).toBe('');
297
+ });
298
+ it('should handle special characters', () => {
299
+ const specialChars = '!@#$%^&*()_+-=[]{}|;\':",./<>?`~\n\t\r';
300
+ const encrypted = encryptWithPublicKey(specialChars, testKeyPair.publicKey);
301
+ const decrypted = decryptWithPrivateKey(encrypted, testKeyPair.privateKey);
302
+ expect(decrypted).toBe(specialChars);
303
+ });
304
+ it('should handle Unicode characters', () => {
305
+ const unicode = '你好世界 🌍 مرحبا بالعالم';
306
+ const encrypted = encryptWithPublicKey(unicode, testKeyPair.publicKey);
307
+ const decrypted = decryptWithPrivateKey(encrypted, testKeyPair.privateKey);
308
+ expect(decrypted).toBe(unicode);
309
+ });
310
+ it('should handle null values in objects', () => {
311
+ const dataWithNull = { key: null, value: 'test' };
312
+ const encrypted = encryptWithPublicKey(dataWithNull, testKeyPair.publicKey);
313
+ const decrypted = decryptWithPrivateKey(encrypted, testKeyPair.privateKey);
314
+ expect(decrypted).toEqual(dataWithNull);
315
+ });
316
+ it('should handle arrays', () => {
317
+ const arrayData = [1, 2, 3, 'test', { nested: true }];
318
+ const encrypted = encryptWithPublicKey(arrayData, testKeyPair.publicKey);
319
+ const decrypted = decryptWithPrivateKey(encrypted, testKeyPair.privateKey);
320
+ expect(decrypted).toEqual(arrayData);
321
+ });
322
+ });
323
+ }, 30000);
324
+ //# sourceMappingURL=rsa-encryption.test.mjs.map
@@ -0,0 +1 @@
1
+ {"version":3,"file":"rsa-encryption.test.mjs","sourceRoot":"","sources":["../../src/encryption/rsa-encryption.test.mts"],"names":[],"mappings":"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"}
package/package.json CHANGED
@@ -1,7 +1,7 @@
1
1
  {
2
2
  "name": "@nr1e/commons",
3
3
  "description": "Common utilities for TypeScript projects",
4
- "version": "0.0.0-snapshot-20251228031344",
4
+ "version": "0.0.0-snapshot-20251228033901",
5
5
  "type": "module",
6
6
  "author": "NR1E, Inc.",
7
7
  "publishConfig": {
@@ -35,6 +35,10 @@
35
35
  "import": "./dist/bitsnbytes/index.mjs",
36
36
  "types": "./dist/bitsnbytes/index.d.mts"
37
37
  },
38
+ "./encryption": {
39
+ "import": "./dist/encryption/index.mjs",
40
+ "types": "./dist/encryption/index.d.mts"
41
+ },
38
42
  "./errors": {
39
43
  "import": "./dist/errors/index.mjs",
40
44
  "types": "./dist/errors/index.d.mts"