Your IP : 216.73.216.189


Current Path : /var/www/recommendations/www/node_modules/pkcs7-padding/
Upload File :
Current File : /var/www/recommendations/www/node_modules/pkcs7-padding/index.js

var DEF_PAD_LENGTH = 16;

/**
 * Append PKCS#7 padding to a buffer or a string.
 *
 * @see {@link http://tools.ietf.org/html/rfc5652|RFC 5652 section 6.3}
 *
 * @param {!(string|Uint8Array|Uint8ClampedArray)} data - the data to be padded
 * @param {number=} size - the block size to pad for
 * @return {!(string|Uint8Array|Uint8ClampedArray)} the padded data, if the function succeed
 */
function pad(data, size) {
  var out = data;
  if (typeof size !== 'number') {
    size = DEF_PAD_LENGTH;
  } else if (size > 255) {
    throw new RangeError('pad(): PKCS#7 padding cannot be longer than 255 bytes');
  } else if (size < 0) {
    throw new RangeError('pad(): PKCS#7 padding size must be positive');
  }
  if (typeof data === 'string') {
    var padLen = size - data.length % size;
    if (isNaN(padLen)) padLen = 0;
    var padChar = String.fromCharCode(padLen);
    for (var i = 0; i < padLen; i++) {
      out += padChar;
    }
  } else if (data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
    var baseLen = data.byteLength;
    padLen = size - baseLen % size;
    if (isNaN(padLen)) padLen = 0;
    var newLen = baseLen + padLen;
    out = new data.constructor(newLen);
    out.set(data);
    for (i = baseLen; i < newLen; i++) {
      out[i] = padLen;
    }
  } else {
    throw new TypeError('pad(): data could not be padded');
  }
  return out;
}

/**
 * Remove the PKCS#7 padding from a buffer or a string.
 *
 * @see {@link http://tools.ietf.org/html/rfc5652|RFC 5652 section 6.3}
 *
 * @param {!(string|Uint8Array|Uint8ClampedArray)} data - the data to be unpadded
 * @return {!(string|Uint8Array|Uint8ClampedArray)} the unpadded data, if the function succeed
 */
function unpad(data) {
  var out = data;
  if (typeof data === 'string' && data.length > 0) {
    var padLen = data.charCodeAt(data.length - 1);
    if (padLen > data.length) {
      throw new Error('unpad(): cannot remove ' + padLen + ' bytes from a ' +
        data.length + '-byte(s) string');
    }
    for (var i = data.length - 2, end = data.length - padLen; i >= end; i--) {
      if (data.charCodeAt(i) !== padLen) {
        throw new Error('unpad(): found a padding byte of ' + data.charCodeAt(i) +
          ' instead of ' + padLen + ' at position ' + i);
      }
    }
    out = data.substring(0, end);
  } else if (data instanceof Uint8Array || data instanceof Uint8ClampedArray) {
    var baseLen = data.byteLength;
    padLen = data[baseLen - 1];
    var newLen = baseLen - padLen;
    if (newLen < 0) {
      throw new Error('unpad(): cannot remove ' + padLen + ' bytes from a ' +
        baseLen + '-byte(s) string');
    }
    for (i = baseLen - 2; i >= newLen; i--) {
      if (data[i] !== padLen) {
        throw new Error('unpad(): found a padding byte of ' + data[i] +
          ' instead of ' + padLen + ' at position ' + i);
      }
    }
    out = data.slice(0, newLen);
  }
  return out;
}

module.exports = { pad: pad, unpad: unpad };