You cannot select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
session-desktop/ts/test/session/unit/padding/Padding_test.ts

91 lines
2.8 KiB
TypeScript

// tslint:disable: no-implicit-dependencies max-func-body-length no-unused-expression
import chai from 'chai';
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));
});
});
});