pkcs7.test.js 1.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364
  1. /* eslint-disable object-shorthand */
  2. import {pad, unpad} from '../src/pkcs7.js';
  3. import QUnit from 'qunit';
  4. const pkcs7 = {pad, unpad};
  5. QUnit.module('pkcs7');
  6. QUnit.test('pads empty buffers', function(assert) {
  7. assert.expect(1);
  8. const result = pkcs7.unpad(pkcs7.pad(new Uint8Array([])));
  9. assert.deepEqual(
  10. new Uint8Array(result, result.byteOffset, result.byteLength),
  11. new Uint8Array(0),
  12. 'accepts an empty buffer'
  13. );
  14. });
  15. QUnit.test('pads non-empty buffers', function(assert) {
  16. let i = 16;
  17. assert.expect(i * 3);
  18. while (i--) {
  19. // build the test buffer
  20. const buffer = new Uint8Array(i + 1);
  21. let result;
  22. result = pkcs7.pad(buffer);
  23. assert.equal(result.length % 16, 0, 'padded length is a multiple of 16');
  24. assert.equal(result.slice(-1)[0], 16 - ((i + 1) % 16), 'appended the correct value');
  25. result = pkcs7.unpad(result);
  26. assert.deepEqual(
  27. new Uint8Array(result, result.byteOffset, result.byteLength),
  28. buffer,
  29. 'padding is reversible'
  30. );
  31. }
  32. });
  33. QUnit.test('works on buffers greater than sixteen bytes', function(assert) {
  34. const buffer = new Uint8Array(16 * 3 + 9);
  35. assert.expect(2);
  36. assert.equal(
  37. pkcs7.pad(buffer).length - buffer.length,
  38. 16 - 9,
  39. 'adds the correct amount of padding'
  40. );
  41. const result = pkcs7.unpad(pkcs7.pad(buffer));
  42. assert.deepEqual(
  43. new Uint8Array(result, result.byteOffset, result.byteLength),
  44. buffer,
  45. 'is reversible'
  46. );
  47. });