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.
		
		
		
		
		
			
		
			
	
	
		
			91 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
		
		
			
		
	
	
			91 lines
		
	
	
		
			2.8 KiB
		
	
	
	
		
			TypeScript
		
	
| 
								 
											5 years ago
										 
									 | 
							
								// 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));
							 | 
						||
| 
								 | 
							
								    });
							 | 
						||
| 
								 | 
							
								  });
							 | 
						||
| 
								 | 
							
								});
							 |