* padd Message buffer for all outgoing messages (even opengroupv2)

* pad and unpad message everywhere

attachment not padded for opengroup only

* lint

* enable fileserver v2 sending side

* removed all en unused local strings

* remove all unused keys for other locales

* update displayname even if we dont have avatar on incoming profile

* redesign group invitation message type

* ask confirmation before joining opengroup invitation

* remove the channelId from groupInvitation

* fallback to envelope timestamp if dataMessage.timestamp is 0

* match group invitation design with ios

* speed up first load of room message by prefetching token

* create convo for members if they don't exist

also, removing a private convo does not remove it entirely as we need
the convo to be able to remove members

* fix avatar download on restore when linking device

Fixes  #1601

* make sure the left member convo exist in rendering GroupUpdate

* Reply attachments (#1591)

* First attachment showing in reply composition.

* WIP: Adding thumbnail to quote response composition component.

* Added icon for voice recording attachment

* Updated formatting.

* Formatting.

* removed duplicate styling.

* WIP: Converting quote component to functional components.

* Fix bug where thumbnails for attachment replies wasn't showing.

* yarn Formatting.

* Removed old quote component.

* Add type to contentTypeSupported method.

* Moved  quote subcomponents out of Quote component.

* yarn format

* Add export to quote subcomponents.

* Fixing linting errors.

* remove commented line.

* Addressing PR comments.

* Allow pasting images into composition box as attachments (#1616)

* Allow pasting images into composition box as attachments

* Fix linter errors

* Fix typo

* Get snode from snode (#1614)

* force deleteAccount after 10sec timeout waiting for configMessage

* move some constants to file where they are used

* add a way to fetch snodes from snodes

* remove a snode from a pubkey's swarm if we get 421 without valid content

* remove getVersion from snodes

* hide groupMembers in right panel for non-group convo

* Fix fonts sans serif (#1619)

* force deleteAccount after 10sec timeout waiting for configMessage

* move some constants to file where they are used

* add a way to fetch snodes from snodes

* remove a snode from a pubkey's swarm if we get 421 without valid content

* remove getVersion from snodes

* hide groupMembers in right panel for non-group convo

* fix font sans serif by using roboto instead

Fixes #1617

* WIP: User nicknames (#1618)

* WIP Adding change nickname dialog.

* WIP adding nickname change dialog.

* WIP nickname dialog.

* WIP: Able to set conversation nicknames. Next step cleaning and adding to conversation list menu.

* Fix message capitilisations.

* Add change nickname to conversation list menu.

* Enable clear nickname menu item.

* Added messages for changing nicknames.

* Clearing nicknames working from header and message list.

* Adding modal styling to nickname modal.

* Reorder nickname menu item positions.

* Add group based conditional nickname menu options to conversation header menu.

* minor tidying.

* Remove unused error causing el option.

* Formatting.

* Linting fixes.

* Made PR fixes

* Prioritise displaying nicknames for inviting new closed group members
and updating closed group members.

* Fix app image start for non-debian based distribs (#1622)

Fixes #1620

* fixup nickname dialog for enter key pressed event (#1623)

also add some type for it and remove unused props

* Fix attachment extension vnd (#1628)

* allow openoffice document extension and don't use

* allow opendocument to be shared with the extension rather than mimetype

Fixes #1593

* allow message without padding

* add test for odt files

* More Japanese translations (#1632)

* Translate some untranslated strings into Japanese

* Tweak some Japanese translations

* Add new Japanese translations

* WIP: Closed group reliability (#1630)

* WIP: added non-durable messaging function.

* WIP: Non-durable sending

* WIP: adding dialog box.

* Creating dialog if group invite message promises don't return true.

* removed console log

* applied PR changes, linting and formatting.

* WIP: allowing resend invite to failures.

* using lookup.

* WIP: recursively opening dialog.

* WIP: debugging reject triggering on confirmation modal.

* register events fix.

* Closed group invite retry dialog working.

* Added english text to messages.

* Prevent saving of hexkey pair if it already exists.

* Fixed nickname edit
input trimming end letter.

* Don't show closed group invite dialog unless it has failed at least once.

* Fix linting error.

* Fix plurality.

* Ensure admin members are included in all invite reattempts, mixed plurality.

* test fixing windows build

* Revert "test fixing windows build"

This reverts commit 8ed2e0891d.

* attachment padding not enforced to be 0x00 (#1640)

* Consider anything padding (#1641)

* Session v1.6.2 (#1639)

* padd Message buffer for all outgoing messages (even opengroupv2)

* pad and unpad message everywhere

attachment not padded for opengroup only

* lint

* enable fileserver v2 sending side

* removed all en unused local strings

* remove all unused keys for other locales

* update displayname even if we dont have avatar on incoming profile

* redesign group invitation message type

* ask confirmation before joining opengroup invitation

* remove the channelId from groupInvitation

* fallback to envelope timestamp if dataMessage.timestamp is 0

* match group invitation design with ios

* speed up first load of room message by prefetching token

* create convo for members if they don't exist

also, removing a private convo does not remove it entirely as we need
the convo to be able to remove members

* fix avatar download on restore when linking device

Fixes  #1601

* make sure the left member convo exist in rendering GroupUpdate

* Reply attachments (#1591)

* First attachment showing in reply composition.

* WIP: Adding thumbnail to quote response composition component.

* Added icon for voice recording attachment

* Updated formatting.

* Formatting.

* removed duplicate styling.

* WIP: Converting quote component to functional components.

* Fix bug where thumbnails for attachment replies wasn't showing.

* yarn Formatting.

* Removed old quote component.

* Add type to contentTypeSupported method.

* Moved  quote subcomponents out of Quote component.

* yarn format

* Add export to quote subcomponents.

* Fixing linting errors.

* remove commented line.

* Addressing PR comments.

* Allow pasting images into composition box as attachments (#1616)

* Allow pasting images into composition box as attachments

* Fix linter errors

* Fix typo

* Get snode from snode (#1614)

* force deleteAccount after 10sec timeout waiting for configMessage

* move some constants to file where they are used

* add a way to fetch snodes from snodes

* remove a snode from a pubkey's swarm if we get 421 without valid content

* remove getVersion from snodes

* hide groupMembers in right panel for non-group convo

* Fix fonts sans serif (#1619)

* force deleteAccount after 10sec timeout waiting for configMessage

* move some constants to file where they are used

* add a way to fetch snodes from snodes

* remove a snode from a pubkey's swarm if we get 421 without valid content

* remove getVersion from snodes

* hide groupMembers in right panel for non-group convo

* fix font sans serif by using roboto instead

Fixes #1617

* WIP: User nicknames (#1618)

* WIP Adding change nickname dialog.

* WIP adding nickname change dialog.

* WIP nickname dialog.

* WIP: Able to set conversation nicknames. Next step cleaning and adding to conversation list menu.

* Fix message capitilisations.

* Add change nickname to conversation list menu.

* Enable clear nickname menu item.

* Added messages for changing nicknames.

* Clearing nicknames working from header and message list.

* Adding modal styling to nickname modal.

* Reorder nickname menu item positions.

* Add group based conditional nickname menu options to conversation header menu.

* minor tidying.

* Remove unused error causing el option.

* Formatting.

* Linting fixes.

* Made PR fixes

* Prioritise displaying nicknames for inviting new closed group members
and updating closed group members.

* Fix app image start for non-debian based distribs (#1622)

Fixes #1620

* fixup nickname dialog for enter key pressed event (#1623)

also add some type for it and remove unused props

* Fix attachment extension vnd (#1628)

* allow openoffice document extension and don't use

* allow opendocument to be shared with the extension rather than mimetype

Fixes #1593

* allow message without padding

* add test for odt files

* More Japanese translations (#1632)

* Translate some untranslated strings into Japanese

* Tweak some Japanese translations

* Add new Japanese translations

* WIP: Closed group reliability (#1630)

* WIP: added non-durable messaging function.

* WIP: Non-durable sending

* WIP: adding dialog box.

* Creating dialog if group invite message promises don't return true.

* removed console log

* applied PR changes, linting and formatting.

* WIP: allowing resend invite to failures.

* using lookup.

* WIP: recursively opening dialog.

* WIP: debugging reject triggering on confirmation modal.

* register events fix.

* Closed group invite retry dialog working.

* Added english text to messages.

* Prevent saving of hexkey pair if it already exists.

* Fixed nickname edit
input trimming end letter.

* Don't show closed group invite dialog unless it has failed at least once.

* Fix linting error.

* Fix plurality.

* Ensure admin members are included in all invite reattempts, mixed plurality.

* test fixing windows build

* Revert "test fixing windows build"

This reverts commit 8ed2e0891d.

Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
Co-authored-by: shellhazard <unva1idated@protonmail.com>
Co-authored-by: beantaco <64012487+beantaco@users.noreply.github.com>

* attachment padding not enforced to be 0x00

* add message an attachment padding test

Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
Co-authored-by: shellhazard <unva1idated@protonmail.com>
Co-authored-by: beantaco <64012487+beantaco@users.noreply.github.com>

* Consider anything padding (#1643)

* Session v1.6.2 (#1639)

* padd Message buffer for all outgoing messages (even opengroupv2)

* pad and unpad message everywhere

attachment not padded for opengroup only

* lint

* enable fileserver v2 sending side

* removed all en unused local strings

* remove all unused keys for other locales

* update displayname even if we dont have avatar on incoming profile

* redesign group invitation message type

* ask confirmation before joining opengroup invitation

* remove the channelId from groupInvitation

* fallback to envelope timestamp if dataMessage.timestamp is 0

* match group invitation design with ios

* speed up first load of room message by prefetching token

* create convo for members if they don't exist

also, removing a private convo does not remove it entirely as we need
the convo to be able to remove members

* fix avatar download on restore when linking device

Fixes  #1601

* make sure the left member convo exist in rendering GroupUpdate

* Reply attachments (#1591)

* First attachment showing in reply composition.

* WIP: Adding thumbnail to quote response composition component.

* Added icon for voice recording attachment

* Updated formatting.

* Formatting.

* removed duplicate styling.

* WIP: Converting quote component to functional components.

* Fix bug where thumbnails for attachment replies wasn't showing.

* yarn Formatting.

* Removed old quote component.

* Add type to contentTypeSupported method.

* Moved  quote subcomponents out of Quote component.

* yarn format

* Add export to quote subcomponents.

* Fixing linting errors.

* remove commented line.

* Addressing PR comments.

* Allow pasting images into composition box as attachments (#1616)

* Allow pasting images into composition box as attachments

* Fix linter errors

* Fix typo

* Get snode from snode (#1614)

* force deleteAccount after 10sec timeout waiting for configMessage

* move some constants to file where they are used

* add a way to fetch snodes from snodes

* remove a snode from a pubkey's swarm if we get 421 without valid content

* remove getVersion from snodes

* hide groupMembers in right panel for non-group convo

* Fix fonts sans serif (#1619)

* force deleteAccount after 10sec timeout waiting for configMessage

* move some constants to file where they are used

* add a way to fetch snodes from snodes

* remove a snode from a pubkey's swarm if we get 421 without valid content

* remove getVersion from snodes

* hide groupMembers in right panel for non-group convo

* fix font sans serif by using roboto instead

Fixes #1617

* WIP: User nicknames (#1618)

* WIP Adding change nickname dialog.

* WIP adding nickname change dialog.

* WIP nickname dialog.

* WIP: Able to set conversation nicknames. Next step cleaning and adding to conversation list menu.

* Fix message capitilisations.

* Add change nickname to conversation list menu.

* Enable clear nickname menu item.

* Added messages for changing nicknames.

* Clearing nicknames working from header and message list.

* Adding modal styling to nickname modal.

* Reorder nickname menu item positions.

* Add group based conditional nickname menu options to conversation header menu.

* minor tidying.

* Remove unused error causing el option.

* Formatting.

* Linting fixes.

* Made PR fixes

* Prioritise displaying nicknames for inviting new closed group members
and updating closed group members.

* Fix app image start for non-debian based distribs (#1622)

Fixes #1620

* fixup nickname dialog for enter key pressed event (#1623)

also add some type for it and remove unused props

* Fix attachment extension vnd (#1628)

* allow openoffice document extension and don't use

* allow opendocument to be shared with the extension rather than mimetype

Fixes #1593

* allow message without padding

* add test for odt files

* More Japanese translations (#1632)

* Translate some untranslated strings into Japanese

* Tweak some Japanese translations

* Add new Japanese translations

* WIP: Closed group reliability (#1630)

* WIP: added non-durable messaging function.

* WIP: Non-durable sending

* WIP: adding dialog box.

* Creating dialog if group invite message promises don't return true.

* removed console log

* applied PR changes, linting and formatting.

* WIP: allowing resend invite to failures.

* using lookup.

* WIP: recursively opening dialog.

* WIP: debugging reject triggering on confirmation modal.

* register events fix.

* Closed group invite retry dialog working.

* Added english text to messages.

* Prevent saving of hexkey pair if it already exists.

* Fixed nickname edit
input trimming end letter.

* Don't show closed group invite dialog unless it has failed at least once.

* Fix linting error.

* Fix plurality.

* Ensure admin members are included in all invite reattempts, mixed plurality.

* test fixing windows build

* Revert "test fixing windows build"

This reverts commit 8ed2e0891d.

Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
Co-authored-by: shellhazard <unva1idated@protonmail.com>
Co-authored-by: beantaco <64012487+beantaco@users.noreply.github.com>

* attachment padding not enforced to be 0x00

* add message an attachment padding test

Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
Co-authored-by: shellhazard <unva1idated@protonmail.com>
Co-authored-by: beantaco <64012487+beantaco@users.noreply.github.com>

Co-authored-by: Warrick <wcor690@aucklanduni.ac.nz>
Co-authored-by: shellhazard <unva1idated@protonmail.com>
Co-authored-by: beantaco <64012487+beantaco@users.noreply.github.com>
pull/1666/head
Audric Ackermann 4 years ago committed by GitHub
parent ed461b8f18
commit 72ddbb7db2
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23

@ -12,14 +12,14 @@ const PADDING_BYTE = 0x00;
*/
export function removeMessagePadding(paddedData: ArrayBuffer): ArrayBuffer {
const paddedPlaintext = new Uint8Array(paddedData);
window.log.info('Removing message padding...');
window?.log.info('Removing message padding...');
for (let i = paddedPlaintext.length - 1; i >= 0; i -= 1) {
if (paddedPlaintext[i] === 0x80) {
const plaintext = new Uint8Array(i);
plaintext.set(paddedPlaintext.subarray(0, i));
return plaintext.buffer;
} else if (paddedPlaintext[i] !== PADDING_BYTE) {
window.log.warn('got a message without padding... Letting it through for now');
window?.log.warn('got a message without padding... Letting it through for now');
return paddedPlaintext;
}
}
@ -32,7 +32,7 @@ export function removeMessagePadding(paddedData: ArrayBuffer): ArrayBuffer {
* @param messageBuffer The buffer to add padding to.
*/
export function addMessagePadding(messageBuffer: Uint8Array): Uint8Array {
window.log?.info('Adding message padding...');
window?.log?.info('Adding message padding...');
const plaintext = new Uint8Array(getPaddedMessageLength(messageBuffer.byteLength + 1) - 1);
plaintext.set(new Uint8Array(messageBuffer));
@ -59,25 +59,19 @@ export function getUnpaddedAttachment(
data: ArrayBuffer,
unpaddedExpectedSize: number
): ArrayBuffer | null {
window.log?.info('Removing attachment padding...');
window?.log?.info('Removing attachment padding...');
// to have a padding we must have a strictly longer length expected
if (data.byteLength <= unpaddedExpectedSize) {
return null;
}
const dataUint = new Uint8Array(data);
for (let i = unpaddedExpectedSize; i < data.byteLength; i++) {
if (dataUint[i] !== PADDING_BYTE) {
return null;
}
}
// we now consider that anything coming after the expected size is padding, no matter what there is there
return data.slice(0, unpaddedExpectedSize);
}
export function addAttachmentPadding(data: ArrayBuffer): ArrayBuffer {
const originalUInt = new Uint8Array(data);
window.log.info('Adding attchment padding...');
window?.log.info('Adding attchment padding...');
const paddedSize = Math.max(
541,

@ -0,0 +1,92 @@
// tslint:disable: no-implicit-dependencies max-func-body-length no-unused-expression
import chai from 'chai';
import * as sinon from 'sinon';
import _ from 'lodash';
import { describe } from 'mocha';
import chaiAsPromised from 'chai-as-promised';
import {
addAttachmentPadding,
addMessagePadding,
getUnpaddedAttachment,
removeMessagePadding,
} from '../../../../session/crypto/BufferPadding';
chai.use(chaiAsPromised as any);
chai.should();
const { expect } = chai;
// tslint:disable-next-line: max-func-body-length
describe('Padding', () => {
describe('Attachment padding', () => {
it('add padding', () => {
const bufferIn = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
const paddedBuffer = addAttachmentPadding(bufferIn);
expect(paddedBuffer.byteLength).to.equal(541);
expect(new Uint8Array(paddedBuffer.slice(0, bufferIn.length))).to.equalBytes(bufferIn);
// this makes sure that the padding is just the 0 bytes
expect(new Uint8Array(paddedBuffer.slice(bufferIn.length))).to.equalBytes(
new Uint8Array(541 - bufferIn.length)
);
});
it('remove padding', () => {
// padding can be anything after the expected size
const expectedSize = 10;
const paddedBuffer = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 0, 1, 2, 3, 4, 5, 5]);
const paddingRemoveBuffer = getUnpaddedAttachment(paddedBuffer, expectedSize);
expect(paddingRemoveBuffer?.byteLength).to.equal(expectedSize);
expect(paddingRemoveBuffer).to.equalBytes(paddedBuffer.slice(0, expectedSize));
});
});
describe('Message padding', () => {
it('add padding', () => {
const bufferIn = new Uint8Array([0, 1, 2, 3, 4, 5, 6, 7, 8, 9]);
const paddedMessage = addMessagePadding(bufferIn);
expect(paddedMessage.byteLength).to.equal(159);
// for message padding, we have [bufferIn, 0x80, 0x00, 0x00, 0x00, ...]
expect(new Uint8Array(paddedMessage.slice(0, bufferIn.length))).to.equalBytes(bufferIn);
expect(paddedMessage[bufferIn.length]).to.equal(0x80);
// this makes sure that the padding is just the 0 bytes
expect(new Uint8Array(paddedMessage.slice(bufferIn.length + 1))).to.equalBytes(
new Uint8Array(159 - bufferIn.length - 1)
);
});
it('remove padding', () => {
const expectedSize = 10;
const paddedBuffer = new Uint8Array([
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
128,
0,
0,
0,
0,
0,
0,
0,
0,
]);
const unpaddedMessage = removeMessagePadding(paddedBuffer);
// for message padding, we have [paddedBuffer, 0x80, 0x00, 0x00, 0x00, ...]
expect(unpaddedMessage?.byteLength).to.equal(expectedSize);
expect(new Uint8Array(unpaddedMessage)).to.equalBytes(paddedBuffer.slice(0, expectedSize));
});
});
});
Loading…
Cancel
Save