mirror of
https://github.com/usebruno/bruno.git
synced 2026-06-15 20:01:28 +00:00
114 lines
4.4 KiB
JavaScript
114 lines
4.4 KiB
JavaScript
const { encryptString, decryptString, encryptStringSafe, decryptStringSafe } = require('../../src/utils/encryption');
|
|
|
|
// We can only unit test aes 256 fallback as safeStorage is only available
|
|
// in the main process
|
|
|
|
describe('Encryption and Decryption Tests', () => {
|
|
it('should encrypt and decrypt using AES-256', () => {
|
|
const plaintext = 'bruno is awesome';
|
|
const encrypted = encryptString(plaintext);
|
|
const decrypted = decryptString(encrypted);
|
|
|
|
expect(decrypted).toBe(plaintext);
|
|
});
|
|
|
|
it('should handle empty strings in encryptString', () => {
|
|
const result = encryptString('');
|
|
expect(result).toBe('');
|
|
});
|
|
|
|
it('should handle empty strings in decryptString', () => {
|
|
const result = decryptString('');
|
|
expect(result).toBe('');
|
|
});
|
|
|
|
it('encrypt should throw an error for invalid string', () => {
|
|
expect(() => encryptString(null)).toThrow('Encrypt failed: invalid string');
|
|
expect(() => encryptString(undefined)).toThrow('Encrypt failed: invalid string');
|
|
});
|
|
|
|
it('decrypt should throw an error for invalid string', () => {
|
|
expect(() => decryptString(null)).toThrow('Decrypt failed: unrecognized string format');
|
|
expect(() => decryptString('garbage')).toThrow('Decrypt failed: unrecognized string format');
|
|
});
|
|
|
|
it.skip('string encrypted using createCipher (< node 20) should be decrypted properly', () => {
|
|
const encryptedString = '$01:2738e0e6a38bcde5fd80141ceadc9b67bc7b1fca7e398c552c1ca2bace28eb57';
|
|
const decryptedValue = decryptString(encryptedString);
|
|
|
|
expect(decryptedValue).toBe('bruno is awesome');
|
|
});
|
|
|
|
it('decrypt should throw an error for invalid algorithm', () => {
|
|
const invalidAlgo = '$99:abcdefg';
|
|
|
|
expect(() => decryptString(invalidAlgo)).toThrow('Decrypt failed: Invalid algo');
|
|
});
|
|
});
|
|
|
|
describe('Safe Encryption and Decryption Tests', () => {
|
|
it('should encrypt and decrypt successfully using encryptStringSafe and decryptStringSafe', () => {
|
|
const plaintext = 'bruno is awesome';
|
|
const encryptionResult = encryptStringSafe(plaintext);
|
|
const decryptionResult = decryptStringSafe(encryptionResult.value);
|
|
|
|
expect(encryptionResult.success).toBe(true);
|
|
expect(decryptionResult.success).toBe(true);
|
|
expect(decryptionResult.value).toBe(plaintext);
|
|
});
|
|
|
|
it('should handle empty strings in encryptStringSafe', () => {
|
|
const result = encryptStringSafe('');
|
|
expect(result.success).toBe(true);
|
|
expect(result.value).toBe('');
|
|
});
|
|
|
|
it('should handle empty strings in decryptStringSafe', () => {
|
|
const result = decryptStringSafe('');
|
|
expect(result.success).toBe(true);
|
|
expect(result.value).toBe('');
|
|
});
|
|
|
|
it('should handle invalid string format in decryptStringSafe', () => {
|
|
const result = decryptStringSafe('garbage');
|
|
expect(result.success).toBe(false);
|
|
expect(result.error).toBe('Decrypt failed: unrecognized string format');
|
|
expect(result.value).toBe('');
|
|
});
|
|
|
|
it('should handle invalid algorithm in decryptStringSafe', () => {
|
|
const invalidAlgo = '$99:abcdefg';
|
|
const result = decryptStringSafe(invalidAlgo);
|
|
expect(result.success).toBe(false);
|
|
expect(result.error).toBe('Decrypt failed: Invalid algo');
|
|
expect(result.value).toBe('');
|
|
});
|
|
|
|
it('should handle malformed encrypted string in decryptStringSafe', () => {
|
|
const malformedString = '$01:invalid-hex-string';
|
|
const result = decryptStringSafe(malformedString);
|
|
expect(result.success).toBe(false);
|
|
expect(result.error).toContain('AES256 decryption failed');
|
|
expect(result.value).toBe('');
|
|
});
|
|
|
|
it('should handle special characters in encryptStringSafe and decryptStringSafe', () => {
|
|
const specialText = 'bruno@#$%^&*()_+-=[]{}|;:,.<>?';
|
|
const encryptionResult = encryptStringSafe(specialText);
|
|
const decryptionResult = decryptStringSafe(encryptionResult.value);
|
|
|
|
expect(encryptionResult.success).toBe(true);
|
|
expect(decryptionResult.success).toBe(true);
|
|
expect(decryptionResult.value).toBe(specialText);
|
|
});
|
|
|
|
it('decrypt-safe should not throw error for invalid inputs', () => {
|
|
expect(() => decryptStringSafe(null)).not.toThrow();
|
|
expect(() => decryptStringSafe(undefined)).not.toThrow();
|
|
expect(() => decryptStringSafe('garbage')).not.toThrow();
|
|
expect(() => decryptStringSafe(123456789)).not.toThrow();
|
|
expect(() => decryptStringSafe('aes256:')).not.toThrow();
|
|
expect(() => decryptStringSafe('aes256:invalid_base64')).not.toThrow();
|
|
});
|
|
});
|