diff --git a/src/decrypt.ts b/src/decrypt.ts index d50328d..42e1012 100644 --- a/src/decrypt.ts +++ b/src/decrypt.ts @@ -2,7 +2,7 @@ import { cryptoAeadDecrypt } from './romulus-m' interface DecryptResult { success: boolean - plaintext: Buffer + plaintext: Uint8Array } /** @@ -13,7 +13,7 @@ interface DecryptResult { * @param key The encryption key. * @returns A decrypted DecryptResult object. */ -export function decrypt (buffer: Buffer, associatedData: Buffer, key: Buffer): DecryptResult { +export function decrypt (buffer: Uint8Array, associatedData: Uint8Array, key: Uint8Array): DecryptResult { // Split nonce from ciphertext. const nonce = Array.from(buffer.slice(0, 16)) const ciphertext = Array.from(buffer.slice(16)) @@ -24,6 +24,6 @@ export function decrypt (buffer: Buffer, associatedData: Buffer, key: Buffer): D // Return the ciphertext and decryption status. return { success: result.success, - plaintext: Buffer.from(result.plaintext) + plaintext: Uint8Array.from(result.plaintext) } } diff --git a/src/encrypt.ts b/src/encrypt.ts index 5060e57..dd54a70 100644 --- a/src/encrypt.ts +++ b/src/encrypt.ts @@ -9,14 +9,14 @@ import { v4 as uuidv4 } from 'uuid' * @param key The encryption key. * @returns The nonce-prepended ciphertext. */ -export function encrypt (message: Buffer, associatedData: Buffer, key: Buffer): Buffer { +export function encrypt (message: Uint8Array, associatedData: Uint8Array, key: Uint8Array): Uint8Array { // Generate a nonce. - const nonce = Buffer.alloc(16) + const nonce = new Uint8Array(16) uuidv4({}, nonce) // Encrypt the data using the associated data, newly generated nonce and encryption key. - const ciphertext = Buffer.from(cryptoAeadEncrypt(Array.from(message), Array.from(associatedData), Array.from(nonce), Array.from(key))) + const ciphertext = Uint8Array.from(cryptoAeadEncrypt(Array.from(message), Array.from(associatedData), Array.from(nonce), Array.from(key))) // Return the nonce-prepended ciphertext. - return Buffer.concat([nonce, ciphertext]) + return new Uint8Array([...nonce, ...ciphertext]) } diff --git a/tests/decrypt.test.ts b/tests/decrypt.test.ts index 5c4f7b8..0d97eca 100644 --- a/tests/decrypt.test.ts +++ b/tests/decrypt.test.ts @@ -2,7 +2,7 @@ import { decrypt } from '../src/decrypt' test('Test nonce parsing by public decrypt function.', () => { // Given - const ciphertext = Buffer.from([ + const ciphertext = Uint8Array.from([ // Nonce 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // Ciphertext @@ -10,21 +10,21 @@ test('Test nonce parsing by public decrypt function.', () => { 25, 202, 255, 201, 206, 49, 60, 58, 82, 216, 72, 116, 106, 129, 162, 142, 69, 40, 167, 88, 94, 195, 174, 217, 242, 149, 224, 125, 196, 237, 172, 165, 116, 119, 128 ]) - const associatedData = Buffer.from('Some associated data.') - const key = Buffer.from('\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f') + const associatedData = new TextEncoder().encode('Some associated data.') + const key = Uint8Array.from([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f]) // When const result = decrypt(ciphertext, associatedData, key) // Then - const expectedResult = Buffer.from('Hello, World! This is a test message.') + const expectedResult = new TextEncoder().encode('Hello, World! This is a test message.') expect(result.success).toBe(true) expect(result.plaintext).toMatchObject(expectedResult) }) test('Test decryption with an invalid key.', () => { // Given - const ciphertext = Buffer.from([ + const ciphertext = Uint8Array.from([ // Nonce 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, // Ciphertext @@ -32,13 +32,13 @@ test('Test decryption with an invalid key.', () => { 25, 202, 255, 201, 206, 49, 60, 58, 82, 216, 72, 116, 106, 129, 162, 142, 69, 40, 167, 88, 94, 195, 174, 217, 242, 149, 224, 125, 196, 237, 172, 165, 116, 119, 128 ]) - const associatedData = Buffer.from('Some associated data.') - const key = Buffer.from('\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f\x00') + const associatedData = new TextEncoder().encode('Some associated data.') + const key = Uint8Array.from([0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00, 0x00]) // When const result = decrypt(ciphertext, associatedData, key) // Then expect(result.success).toBe(false) - expect(result.plaintext).toMatchObject(Buffer.alloc(0)) + expect(result.plaintext).toMatchObject(new Uint8Array()) }) diff --git a/tests/encrypt.test.ts b/tests/encrypt.test.ts index c57cc4d..330c17e 100644 --- a/tests/encrypt.test.ts +++ b/tests/encrypt.test.ts @@ -3,9 +3,9 @@ import { encrypt } from '../src/encrypt' test('Test nonce generation by public encrypt function.', () => { // Given - const message = Buffer.from('Hello, World! This is a test message.') - const associatedData = Buffer.from('Some associated data.') - const key = Buffer.from('\x00\x01\x02\x03\x04\x05\x06\x07\x08\x09\x0a\x0b\x0c\x0d\x0e\x0f') + const message = new TextEncoder().encode('Hello, World! This is a test message.') + const associatedData = new TextEncoder().encode('Some associated data.') + const key = Uint8Array.from([0x00, 0x01, 0x02, 0x03, 0x04, 0x05, 0x06, 0x07, 0x08, 0x09, 0x0a, 0x0b, 0x0c, 0x0d, 0x0e, 0x0f]) // When const ciphertext = encrypt(message, associatedData, key)