buffer-util.js 1.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465
  1. 'use strict';
  2. const safeBuffer = require('safe-buffer');
  3. const Buffer = safeBuffer.Buffer;
  4. /**
  5. * Merges an array of buffers into a new buffer.
  6. *
  7. * @param {Buffer[]} list The array of buffers to concat
  8. * @param {Number} totalLength The total length of buffers in the list
  9. * @return {Buffer} The resulting buffer
  10. * @public
  11. */
  12. const concat = (list, totalLength) => {
  13. const target = Buffer.allocUnsafe(totalLength);
  14. var offset = 0;
  15. for (var i = 0; i < list.length; i++) {
  16. const buf = list[i];
  17. buf.copy(target, offset);
  18. offset += buf.length;
  19. }
  20. return target;
  21. };
  22. try {
  23. const bufferUtil = require('bufferutil');
  24. module.exports = Object.assign({ concat }, bufferUtil.BufferUtil || bufferUtil);
  25. } catch (e) /* istanbul ignore next */ {
  26. /**
  27. * Masks a buffer using the given mask.
  28. *
  29. * @param {Buffer} source The buffer to mask
  30. * @param {Buffer} mask The mask to use
  31. * @param {Buffer} output The buffer where to store the result
  32. * @param {Number} offset The offset at which to start writing
  33. * @param {Number} length The number of bytes to mask.
  34. * @public
  35. */
  36. const mask = (source, mask, output, offset, length) => {
  37. for (var i = 0; i < length; i++) {
  38. output[offset + i] = source[i] ^ mask[i & 3];
  39. }
  40. };
  41. /**
  42. * Unmasks a buffer using the given mask.
  43. *
  44. * @param {Buffer} buffer The buffer to unmask
  45. * @param {Buffer} mask The mask to use
  46. * @public
  47. */
  48. const unmask = (buffer, mask) => {
  49. // Required until https://github.com/nodejs/node/issues/9006 is resolved.
  50. const length = buffer.length;
  51. for (var i = 0; i < length; i++) {
  52. buffer[i] ^= mask[i & 3];
  53. }
  54. };
  55. module.exports = { concat, mask, unmask };
  56. }