diff --git a/briar-core/src/org/briarproject/crypto/AuthenticatedCipher.java b/briar-core/src/org/briarproject/crypto/AuthenticatedCipher.java index 5ee21e3e4ca1047f67f40a2b427d1e37ae7005ce..fe4f8bee006711dfd0ad12ec5d1298eaf5e4508d 100644 --- a/briar-core/src/org/briarproject/crypto/AuthenticatedCipher.java +++ b/briar-core/src/org/briarproject/crypto/AuthenticatedCipher.java @@ -26,14 +26,14 @@ interface AuthenticatedCipher { * including the MAC. * @param inputOff the offset into the input array where the data to be * processed starts. - * @param len the number of bytes to be processed. If decrypting, includes - * the MAC length. - * @param output the output buffer the processed bytes go into. If - * encrypting, the ciphertext including the MAC. If - * decrypting, the plaintext. - * @param outputOff the offset into the output byte array the processed - * data starts at. - * @return the number of bytes processed. + * @param len the length of the input. If decrypting, includes the MAC + * length. + * @param output the output byte array. If encrypting, the ciphertext + * including the MAC. If decrypting, the plaintext. + * @param outputOff the offset into the output byte array where the + * processed data starts. + * @return the length of the output. If encrypting, includes the MAC + * length. * @throws GeneralSecurityException on invalid input. */ int process(byte[] input, int inputOff, int len, byte[] output, diff --git a/briar-core/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipher.java b/briar-core/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipher.java index bdfe3616976f60aff95c5c11dfa63d5392109d4e..8143b696ad334c6447c48f34d2eba35eb8f737c1 100644 --- a/briar-core/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipher.java +++ b/briar-core/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipher.java @@ -112,7 +112,7 @@ public class XSalsa20Poly1305AuthenticatedCipher poly1305.doFinal(output, outputOff); } - return processed; + return encrypting ? processed + MAC_LENGTH : processed; } catch (DataLengthException e) { throw new GeneralSecurityException(e.getMessage()); } diff --git a/briar-tests/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java b/briar-tests/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java index 8828667699212a33c3862b101fa4252f002379b9..6d45fc975769459c7cd45207260ac5538fa81f21 100644 --- a/briar-tests/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java +++ b/briar-tests/src/org/briarproject/crypto/XSalsa20Poly1305AuthenticatedCipherTest.java @@ -9,6 +9,7 @@ import java.security.GeneralSecurityException; import java.util.Random; import static org.junit.Assert.assertArrayEquals; +import static org.junit.Assert.assertEquals; public class XSalsa20Poly1305AuthenticatedCipherTest extends BriarTestCase { @@ -51,7 +52,8 @@ public class XSalsa20Poly1305AuthenticatedCipherTest extends BriarTestCase { AuthenticatedCipher cipher = new XSalsa20Poly1305AuthenticatedCipher(); cipher.init(true, k, TEST_IV); byte[] output = new byte[TEST_CIPHERTEXT.length]; - cipher.process(TEST_PLAINTEXT, 0, TEST_PLAINTEXT.length, output, 0); + assertEquals(TEST_CIPHERTEXT.length, cipher.process(TEST_PLAINTEXT, 0, + TEST_PLAINTEXT.length, output, 0)); assertArrayEquals(TEST_CIPHERTEXT, output); } @@ -61,7 +63,8 @@ public class XSalsa20Poly1305AuthenticatedCipherTest extends BriarTestCase { AuthenticatedCipher cipher = new XSalsa20Poly1305AuthenticatedCipher(); cipher.init(false, k, TEST_IV); byte[] output = new byte[TEST_PLAINTEXT.length]; - cipher.process(TEST_CIPHERTEXT, 0, TEST_CIPHERTEXT.length, output, 0); + assertEquals(TEST_PLAINTEXT.length, cipher.process(TEST_CIPHERTEXT, 0, + TEST_CIPHERTEXT.length, output, 0)); assertArrayEquals(TEST_PLAINTEXT, output); }