{"version":3,"file":"rabin-uncached.cjs","sources":["../hash/rabin-uncached.js"],"sourcesContent":["/**\n * It is not recommended to use this package. This is the uncached implementation of the rabin\n * fingerprint algorithm. However, it can be used to verify the `rabin.js` implementation.\n *\n * @module rabin-uncached\n */\n\nimport * as math from '../math.js'\nimport * as buffer from '../buffer.js'\n\nexport class RabinUncachedEncoder {\n  /**\n   * @param {Uint8Array} m assert(m[0] === 1)\n   */\n  constructor (m) {\n    this.m = m\n    this.blen = m.byteLength\n    this.bs = new Uint8Array(this.blen)\n    /**\n     * This describes the position of the most significant byte (starts with 0 and increases with\n     * shift)\n     */\n    this.bpos = 0\n  }\n\n  /**\n   * Add/Xor/Substract bytes.\n   *\n   * Discards bytes that are out of range.\n   * @todo put this in function or inline\n   *\n   * @param {Uint8Array} cs\n   */\n  add (cs) {\n    const copyLen = math.min(this.blen, cs.byteLength)\n    // copy from right to left until max is reached\n    for (let i = 0; i < copyLen; i++) {\n      this.bs[(this.bpos + this.blen - i - 1) % this.blen] ^= cs[cs.byteLength - i - 1]\n    }\n  }\n\n  /**\n   * @param {number} byte\n   */\n  write (byte) {\n    // [0,m1,m2,b]\n    //  x            <- bpos\n    // Shift one byte to the left, add b\n    this.bs[this.bpos] = byte\n    this.bpos = (this.bpos + 1) % this.blen\n    // mod\n    for (let i = 7; i >= 0; i--) {\n      if (((this.bs[this.bpos] >>> i) & 1) === 1) {\n        this.add(buffer.shiftNBitsLeft(this.m, i))\n      }\n    }\n    // if (this.bs[this.bpos] !== 0) { error.unexpectedCase() }\n    // assert(this.bs[this.bpos] === 0)\n  }\n\n  getFingerprint () {\n    const result = new Uint8Array(this.blen - 1)\n    for (let i = 0; i < result.byteLength; i++) {\n      result[i] = this.bs[(this.bpos + i + 1) % this.blen]\n    }\n    return result\n  }\n}\n"],"names":["math.min","buffer.shiftNBitsLeft"],"mappings":";;;;;;;;;;;;;;;;;;;;;;AAAA;AACA;AACA;AACA;AACA;AACA;AAIA;AACO,MAAM,oBAAoB,CAAC;AAClC;AACA;AACA;AACA,EAAE,WAAW,CAAC,CAAC,CAAC,EAAE;AAClB,IAAI,IAAI,CAAC,CAAC,GAAG,EAAC;AACd,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,CAAC,WAAU;AAC5B,IAAI,IAAI,CAAC,EAAE,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,EAAC;AACvC;AACA;AACA;AACA;AACA,IAAI,IAAI,CAAC,IAAI,GAAG,EAAC;AACjB,GAAG;AACH;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA;AACA,EAAE,GAAG,CAAC,CAAC,EAAE,EAAE;AACX,IAAI,MAAM,OAAO,GAAGA,QAAQ,CAAC,IAAI,CAAC,IAAI,EAAE,EAAE,CAAC,UAAU,EAAC;AACtD;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,OAAO,EAAE,CAAC,EAAE,EAAE;AACtC,MAAM,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,CAAC,IAAI,EAAE,CAAC,EAAE,CAAC,UAAU,GAAG,CAAC,GAAG,CAAC,EAAC;AACvF,KAAK;AACL,GAAG;AACH;AACA;AACA;AACA;AACA,EAAE,KAAK,CAAC,CAAC,IAAI,EAAE;AACf;AACA;AACA;AACA,IAAI,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,GAAG,KAAI;AAC7B,IAAI,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,IAAI,IAAI,CAAC,KAAI;AAC3C;AACA,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,IAAI,CAAC,EAAE,CAAC,EAAE,EAAE;AACjC,MAAM,IAAI,CAAC,CAAC,IAAI,CAAC,EAAE,CAAC,IAAI,CAAC,IAAI,CAAC,KAAK,CAAC,IAAI,CAAC,MAAM,CAAC,EAAE;AAClD,QAAQ,IAAI,CAAC,GAAG,CAACC,qBAAqB,CAAC,IAAI,CAAC,CAAC,EAAE,CAAC,CAAC,EAAC;AAClD,OAAO;AACP,KAAK;AACL;AACA;AACA,GAAG;AACH;AACA,EAAE,cAAc,CAAC,GAAG;AACpB,IAAI,MAAM,MAAM,GAAG,IAAI,UAAU,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,EAAC;AAChD,IAAI,KAAK,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,UAAU,EAAE,CAAC,EAAE,EAAE;AAChD,MAAM,MAAM,CAAC,CAAC,CAAC,GAAG,IAAI,CAAC,EAAE,CAAC,CAAC,IAAI,CAAC,IAAI,GAAG,CAAC,GAAG,CAAC,IAAI,IAAI,CAAC,IAAI,EAAC;AAC1D,KAAK;AACL,IAAI,OAAO,MAAM;AACjB,GAAG;AACH;;;;"}