tenebrous-dicebot/api/node_modules/webpack/lib/util/StringXor.js

50 lines
1.0 KiB
JavaScript

/*
MIT License http://www.opensource.org/licenses/mit-license.php
Author Tobias Koppers @sokra
*/
"use strict";
class StringXor {
constructor() {
this._value = undefined;
this._buffer = undefined;
}
add(str) {
let buf = this._buffer;
let value;
if (buf === undefined) {
buf = this._buffer = Buffer.from(str, "latin1");
this._value = Buffer.from(buf);
return;
} else if (buf.length !== str.length) {
value = this._value;
buf = this._buffer = Buffer.from(str, "latin1");
if (value.length < buf.length) {
this._value = Buffer.allocUnsafe(buf.length);
value.copy(this._value);
this._value.fill(0, value.length);
value = this._value;
}
} else {
value = this._value;
buf.write(str, "latin1");
}
const len = buf.length;
for (let i = 0; i < len; i++) {
value[i] = value[i] ^ buf[i];
}
}
toString() {
return this._value === undefined ? "" : this._value.toString("latin1");
}
updateHash(hash) {
if (this._value !== undefined) hash.update(this._value);
}
}
module.exports = StringXor;