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
		
	
| // 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));
 | |
|     });
 | |
|   });
 | |
| });
 |