ssh-terminal
Version:
SSH Terminal component based on xterm.js for multiple frontend frameworks
11,672 lines • 394 kB
JavaScript
function Vi(e, t) {
for (var a = 0; a < t.length; a++) {
const r = t[a];
if (typeof r != "string" && !Array.isArray(r)) {
for (const i in r)
if (i !== "default" && !(i in e)) {
const s = Object.getOwnPropertyDescriptor(r, i);
s && Object.defineProperty(e, i, s.get ? s : {
enumerable: !0,
get: () => r[i]
});
}
}
}
return Object.freeze(Object.defineProperty(e, Symbol.toStringTag, { value: "Module" }));
}
var Oi = typeof globalThis < "u" ? globalThis : typeof window < "u" ? window : typeof global < "u" ? global : typeof self < "u" ? self : {};
function Fi(e) {
return e && e.__esModule && Object.prototype.hasOwnProperty.call(e, "default") ? e.default : e;
}
function Ki(e) {
if (e.__esModule)
return e;
var t = e.default;
if (typeof t == "function") {
var a = function r() {
return this instanceof r ? Reflect.construct(t, arguments, this.constructor) : t.apply(this, arguments);
};
a.prototype = t.prototype;
} else
a = {};
return Object.defineProperty(a, "__esModule", { value: !0 }), Object.keys(e).forEach(function(r) {
var i = Object.getOwnPropertyDescriptor(e, r);
Object.defineProperty(a, r, i.get ? i : {
enumerable: !0,
get: function() {
return e[r];
}
});
}), a;
}
var z = {
// default options
options: {
usePureJavaScript: !1
}
}, ea = {}, Mi = ea, ma = {};
ea.encode = function(e, t, a) {
if (typeof t != "string")
throw new TypeError('"alphabet" must be a string.');
if (a !== void 0 && typeof a != "number")
throw new TypeError('"maxline" must be a number.');
var r = "";
if (!(e instanceof Uint8Array))
r = Hi(e, t);
else {
var i = 0, s = t.length, n = t.charAt(0), o = [0];
for (i = 0; i < e.length; ++i) {
for (var f = 0, u = e[i]; f < o.length; ++f)
u += o[f] << 8, o[f] = u % s, u = u / s | 0;
for (; u > 0; )
o.push(u % s), u = u / s | 0;
}
for (i = 0; e[i] === 0 && i < e.length - 1; ++i)
r += n;
for (i = o.length - 1; i >= 0; --i)
r += t[o[i]];
}
if (a) {
var l = new RegExp(".{1," + a + "}", "g");
r = r.match(l).join(`\r
`);
}
return r;
};
ea.decode = function(e, t) {
if (typeof e != "string")
throw new TypeError('"input" must be a string.');
if (typeof t != "string")
throw new TypeError('"alphabet" must be a string.');
var a = ma[t];
if (!a) {
a = ma[t] = [];
for (var r = 0; r < t.length; ++r)
a[t.charCodeAt(r)] = r;
}
e = e.replace(/\s/g, "");
for (var i = t.length, s = t.charAt(0), n = [0], r = 0; r < e.length; r++) {
var o = a[e.charCodeAt(r)];
if (o === void 0)
return;
for (var f = 0, u = o; f < n.length; ++f)
u += n[f] * i, n[f] = u & 255, u >>= 8;
for (; u > 0; )
n.push(u & 255), u >>= 8;
}
for (var l = 0; e[l] === s && l < e.length - 1; ++l)
n.push(0);
return typeof Buffer < "u" ? Buffer.from(n.reverse()) : new Uint8Array(n.reverse());
};
function Hi(e, t) {
var a = 0, r = t.length, i = t.charAt(0), s = [0];
for (a = 0; a < e.length(); ++a) {
for (var n = 0, o = e.at(a); n < s.length; ++n)
o += s[n] << 8, s[n] = o % r, o = o / r | 0;
for (; o > 0; )
s.push(o % r), o = o / r | 0;
}
var f = "";
for (a = 0; e.at(a) === 0 && a < e.length() - 1; ++a)
f += i;
for (a = s.length - 1; a >= 0; --a)
f += t[s[a]];
return f;
}
var Ea = z, xa = Mi, E = Ea.util = Ea.util || {};
(function() {
if (typeof process < "u" && process.nextTick && !process.browser) {
E.nextTick = process.nextTick, typeof setImmediate == "function" ? E.setImmediate = setImmediate : E.setImmediate = E.nextTick;
return;
}
if (typeof setImmediate == "function") {
E.setImmediate = function() {
return setImmediate.apply(void 0, arguments);
}, E.nextTick = function(n) {
return setImmediate(n);
};
return;
}
if (E.setImmediate = function(n) {
setTimeout(n, 0);
}, typeof window < "u" && typeof window.postMessage == "function") {
let n = function(o) {
if (o.source === window && o.data === e) {
o.stopPropagation();
var f = t.slice();
t.length = 0, f.forEach(function(u) {
u();
});
}
};
var e = "forge.setImmediate", t = [];
E.setImmediate = function(o) {
t.push(o), t.length === 1 && window.postMessage(e, "*");
}, window.addEventListener("message", n, !0);
}
if (typeof MutationObserver < "u") {
var a = Date.now(), r = !0, i = document.createElement("div"), t = [];
new MutationObserver(function() {
var o = t.slice();
t.length = 0, o.forEach(function(f) {
f();
});
}).observe(i, { attributes: !0 });
var s = E.setImmediate;
E.setImmediate = function(o) {
Date.now() - a > 15 ? (a = Date.now(), s(o)) : (t.push(o), t.length === 1 && i.setAttribute("a", r = !r));
};
}
E.nextTick = E.setImmediate;
})();
E.isNodejs = typeof process < "u" && process.versions && process.versions.node;
E.globalScope = function() {
return E.isNodejs ? Oi : typeof self > "u" ? window : self;
}();
E.isArray = Array.isArray || function(e) {
return Object.prototype.toString.call(e) === "[object Array]";
};
E.isArrayBuffer = function(e) {
return typeof ArrayBuffer < "u" && e instanceof ArrayBuffer;
};
E.isArrayBufferView = function(e) {
return e && E.isArrayBuffer(e.buffer) && e.byteLength !== void 0;
};
function er(e) {
if (!(e === 8 || e === 16 || e === 24 || e === 32))
throw new Error("Only 8, 16, 24, or 32 bits supported: " + e);
}
E.ByteBuffer = ta;
function ta(e) {
if (this.data = "", this.read = 0, typeof e == "string")
this.data = e;
else if (E.isArrayBuffer(e) || E.isArrayBufferView(e))
if (typeof Buffer < "u" && e instanceof Buffer)
this.data = e.toString("binary");
else {
var t = new Uint8Array(e);
try {
this.data = String.fromCharCode.apply(null, t);
} catch {
for (var a = 0; a < t.length; ++a)
this.putByte(t[a]);
}
}
else
(e instanceof ta || typeof e == "object" && typeof e.data == "string" && typeof e.read == "number") && (this.data = e.data, this.read = e.read);
this._constructedStringLength = 0;
}
E.ByteStringBuffer = ta;
var Gi = 4096;
E.ByteStringBuffer.prototype._optimizeConstructedString = function(e) {
this._constructedStringLength += e, this._constructedStringLength > Gi && (this.data.substr(0, 1), this._constructedStringLength = 0);
};
E.ByteStringBuffer.prototype.length = function() {
return this.data.length - this.read;
};
E.ByteStringBuffer.prototype.isEmpty = function() {
return this.length() <= 0;
};
E.ByteStringBuffer.prototype.putByte = function(e) {
return this.putBytes(String.fromCharCode(e));
};
E.ByteStringBuffer.prototype.fillWithByte = function(e, t) {
e = String.fromCharCode(e);
for (var a = this.data; t > 0; )
t & 1 && (a += e), t >>>= 1, t > 0 && (e += e);
return this.data = a, this._optimizeConstructedString(t), this;
};
E.ByteStringBuffer.prototype.putBytes = function(e) {
return this.data += e, this._optimizeConstructedString(e.length), this;
};
E.ByteStringBuffer.prototype.putString = function(e) {
return this.putBytes(E.encodeUtf8(e));
};
E.ByteStringBuffer.prototype.putInt16 = function(e) {
return this.putBytes(
String.fromCharCode(e >> 8 & 255) + String.fromCharCode(e & 255)
);
};
E.ByteStringBuffer.prototype.putInt24 = function(e) {
return this.putBytes(
String.fromCharCode(e >> 16 & 255) + String.fromCharCode(e >> 8 & 255) + String.fromCharCode(e & 255)
);
};
E.ByteStringBuffer.prototype.putInt32 = function(e) {
return this.putBytes(
String.fromCharCode(e >> 24 & 255) + String.fromCharCode(e >> 16 & 255) + String.fromCharCode(e >> 8 & 255) + String.fromCharCode(e & 255)
);
};
E.ByteStringBuffer.prototype.putInt16Le = function(e) {
return this.putBytes(
String.fromCharCode(e & 255) + String.fromCharCode(e >> 8 & 255)
);
};
E.ByteStringBuffer.prototype.putInt24Le = function(e) {
return this.putBytes(
String.fromCharCode(e & 255) + String.fromCharCode(e >> 8 & 255) + String.fromCharCode(e >> 16 & 255)
);
};
E.ByteStringBuffer.prototype.putInt32Le = function(e) {
return this.putBytes(
String.fromCharCode(e & 255) + String.fromCharCode(e >> 8 & 255) + String.fromCharCode(e >> 16 & 255) + String.fromCharCode(e >> 24 & 255)
);
};
E.ByteStringBuffer.prototype.putInt = function(e, t) {
er(t);
var a = "";
do
t -= 8, a += String.fromCharCode(e >> t & 255);
while (t > 0);
return this.putBytes(a);
};
E.ByteStringBuffer.prototype.putSignedInt = function(e, t) {
return e < 0 && (e += 2 << t - 1), this.putInt(e, t);
};
E.ByteStringBuffer.prototype.putBuffer = function(e) {
return this.putBytes(e.getBytes());
};
E.ByteStringBuffer.prototype.getByte = function() {
return this.data.charCodeAt(this.read++);
};
E.ByteStringBuffer.prototype.getInt16 = function() {
var e = this.data.charCodeAt(this.read) << 8 ^ this.data.charCodeAt(this.read + 1);
return this.read += 2, e;
};
E.ByteStringBuffer.prototype.getInt24 = function() {
var e = this.data.charCodeAt(this.read) << 16 ^ this.data.charCodeAt(this.read + 1) << 8 ^ this.data.charCodeAt(this.read + 2);
return this.read += 3, e;
};
E.ByteStringBuffer.prototype.getInt32 = function() {
var e = this.data.charCodeAt(this.read) << 24 ^ this.data.charCodeAt(this.read + 1) << 16 ^ this.data.charCodeAt(this.read + 2) << 8 ^ this.data.charCodeAt(this.read + 3);
return this.read += 4, e;
};
E.ByteStringBuffer.prototype.getInt16Le = function() {
var e = this.data.charCodeAt(this.read) ^ this.data.charCodeAt(this.read + 1) << 8;
return this.read += 2, e;
};
E.ByteStringBuffer.prototype.getInt24Le = function() {
var e = this.data.charCodeAt(this.read) ^ this.data.charCodeAt(this.read + 1) << 8 ^ this.data.charCodeAt(this.read + 2) << 16;
return this.read += 3, e;
};
E.ByteStringBuffer.prototype.getInt32Le = function() {
var e = this.data.charCodeAt(this.read) ^ this.data.charCodeAt(this.read + 1) << 8 ^ this.data.charCodeAt(this.read + 2) << 16 ^ this.data.charCodeAt(this.read + 3) << 24;
return this.read += 4, e;
};
E.ByteStringBuffer.prototype.getInt = function(e) {
er(e);
var t = 0;
do
t = (t << 8) + this.data.charCodeAt(this.read++), e -= 8;
while (e > 0);
return t;
};
E.ByteStringBuffer.prototype.getSignedInt = function(e) {
var t = this.getInt(e), a = 2 << e - 2;
return t >= a && (t -= a << 1), t;
};
E.ByteStringBuffer.prototype.getBytes = function(e) {
var t;
return e ? (e = Math.min(this.length(), e), t = this.data.slice(this.read, this.read + e), this.read += e) : e === 0 ? t = "" : (t = this.read === 0 ? this.data : this.data.slice(this.read), this.clear()), t;
};
E.ByteStringBuffer.prototype.bytes = function(e) {
return typeof e > "u" ? this.data.slice(this.read) : this.data.slice(this.read, this.read + e);
};
E.ByteStringBuffer.prototype.at = function(e) {
return this.data.charCodeAt(this.read + e);
};
E.ByteStringBuffer.prototype.setAt = function(e, t) {
return this.data = this.data.substr(0, this.read + e) + String.fromCharCode(t) + this.data.substr(this.read + e + 1), this;
};
E.ByteStringBuffer.prototype.last = function() {
return this.data.charCodeAt(this.data.length - 1);
};
E.ByteStringBuffer.prototype.copy = function() {
var e = E.createBuffer(this.data);
return e.read = this.read, e;
};
E.ByteStringBuffer.prototype.compact = function() {
return this.read > 0 && (this.data = this.data.slice(this.read), this.read = 0), this;
};
E.ByteStringBuffer.prototype.clear = function() {
return this.data = "", this.read = 0, this;
};
E.ByteStringBuffer.prototype.truncate = function(e) {
var t = Math.max(0, this.length() - e);
return this.data = this.data.substr(this.read, t), this.read = 0, this;
};
E.ByteStringBuffer.prototype.toHex = function() {
for (var e = "", t = this.read; t < this.data.length; ++t) {
var a = this.data.charCodeAt(t);
a < 16 && (e += "0"), e += a.toString(16);
}
return e;
};
E.ByteStringBuffer.prototype.toString = function() {
return E.decodeUtf8(this.bytes());
};
function qi(e, t) {
t = t || {}, this.read = t.readOffset || 0, this.growSize = t.growSize || 1024;
var a = E.isArrayBuffer(e), r = E.isArrayBufferView(e);
if (a || r) {
a ? this.data = new DataView(e) : this.data = new DataView(e.buffer, e.byteOffset, e.byteLength), this.write = "writeOffset" in t ? t.writeOffset : this.data.byteLength;
return;
}
this.data = new DataView(new ArrayBuffer(0)), this.write = 0, e != null && this.putBytes(e), "writeOffset" in t && (this.write = t.writeOffset);
}
E.DataBuffer = qi;
E.DataBuffer.prototype.length = function() {
return this.write - this.read;
};
E.DataBuffer.prototype.isEmpty = function() {
return this.length() <= 0;
};
E.DataBuffer.prototype.accommodate = function(e, t) {
if (this.length() >= e)
return this;
t = Math.max(t || this.growSize, e);
var a = new Uint8Array(
this.data.buffer,
this.data.byteOffset,
this.data.byteLength
), r = new Uint8Array(this.length() + t);
return r.set(a), this.data = new DataView(r.buffer), this;
};
E.DataBuffer.prototype.putByte = function(e) {
return this.accommodate(1), this.data.setUint8(this.write++, e), this;
};
E.DataBuffer.prototype.fillWithByte = function(e, t) {
this.accommodate(t);
for (var a = 0; a < t; ++a)
this.data.setUint8(e);
return this;
};
E.DataBuffer.prototype.putBytes = function(e, t) {
if (E.isArrayBufferView(e)) {
var a = new Uint8Array(e.buffer, e.byteOffset, e.byteLength), r = a.byteLength - a.byteOffset;
this.accommodate(r);
var i = new Uint8Array(this.data.buffer, this.write);
return i.set(a), this.write += r, this;
}
if (E.isArrayBuffer(e)) {
var a = new Uint8Array(e);
this.accommodate(a.byteLength);
var i = new Uint8Array(this.data.buffer);
return i.set(a, this.write), this.write += a.byteLength, this;
}
if (e instanceof E.DataBuffer || typeof e == "object" && typeof e.read == "number" && typeof e.write == "number" && E.isArrayBufferView(e.data)) {
var a = new Uint8Array(e.data.byteLength, e.read, e.length());
this.accommodate(a.byteLength);
var i = new Uint8Array(e.data.byteLength, this.write);
return i.set(a), this.write += a.byteLength, this;
}
if (e instanceof E.ByteStringBuffer && (e = e.data, t = "binary"), t = t || "binary", typeof e == "string") {
var s;
if (t === "hex")
return this.accommodate(Math.ceil(e.length / 2)), s = new Uint8Array(this.data.buffer, this.write), this.write += E.binary.hex.decode(e, s, this.write), this;
if (t === "base64")
return this.accommodate(Math.ceil(e.length / 4) * 3), s = new Uint8Array(this.data.buffer, this.write), this.write += E.binary.base64.decode(e, s, this.write), this;
if (t === "utf8" && (e = E.encodeUtf8(e), t = "binary"), t === "binary" || t === "raw")
return this.accommodate(e.length), s = new Uint8Array(this.data.buffer, this.write), this.write += E.binary.raw.decode(s), this;
if (t === "utf16")
return this.accommodate(e.length * 2), s = new Uint16Array(this.data.buffer, this.write), this.write += E.text.utf16.encode(s), this;
throw new Error("Invalid encoding: " + t);
}
throw Error("Invalid parameter: " + e);
};
E.DataBuffer.prototype.putBuffer = function(e) {
return this.putBytes(e), e.clear(), this;
};
E.DataBuffer.prototype.putString = function(e) {
return this.putBytes(e, "utf16");
};
E.DataBuffer.prototype.putInt16 = function(e) {
return this.accommodate(2), this.data.setInt16(this.write, e), this.write += 2, this;
};
E.DataBuffer.prototype.putInt24 = function(e) {
return this.accommodate(3), this.data.setInt16(this.write, e >> 8 & 65535), this.data.setInt8(this.write, e >> 16 & 255), this.write += 3, this;
};
E.DataBuffer.prototype.putInt32 = function(e) {
return this.accommodate(4), this.data.setInt32(this.write, e), this.write += 4, this;
};
E.DataBuffer.prototype.putInt16Le = function(e) {
return this.accommodate(2), this.data.setInt16(this.write, e, !0), this.write += 2, this;
};
E.DataBuffer.prototype.putInt24Le = function(e) {
return this.accommodate(3), this.data.setInt8(this.write, e >> 16 & 255), this.data.setInt16(this.write, e >> 8 & 65535, !0), this.write += 3, this;
};
E.DataBuffer.prototype.putInt32Le = function(e) {
return this.accommodate(4), this.data.setInt32(this.write, e, !0), this.write += 4, this;
};
E.DataBuffer.prototype.putInt = function(e, t) {
er(t), this.accommodate(t / 8);
do
t -= 8, this.data.setInt8(this.write++, e >> t & 255);
while (t > 0);
return this;
};
E.DataBuffer.prototype.putSignedInt = function(e, t) {
return er(t), this.accommodate(t / 8), e < 0 && (e += 2 << t - 1), this.putInt(e, t);
};
E.DataBuffer.prototype.getByte = function() {
return this.data.getInt8(this.read++);
};
E.DataBuffer.prototype.getInt16 = function() {
var e = this.data.getInt16(this.read);
return this.read += 2, e;
};
E.DataBuffer.prototype.getInt24 = function() {
var e = this.data.getInt16(this.read) << 8 ^ this.data.getInt8(this.read + 2);
return this.read += 3, e;
};
E.DataBuffer.prototype.getInt32 = function() {
var e = this.data.getInt32(this.read);
return this.read += 4, e;
};
E.DataBuffer.prototype.getInt16Le = function() {
var e = this.data.getInt16(this.read, !0);
return this.read += 2, e;
};
E.DataBuffer.prototype.getInt24Le = function() {
var e = this.data.getInt8(this.read) ^ this.data.getInt16(this.read + 1, !0) << 8;
return this.read += 3, e;
};
E.DataBuffer.prototype.getInt32Le = function() {
var e = this.data.getInt32(this.read, !0);
return this.read += 4, e;
};
E.DataBuffer.prototype.getInt = function(e) {
er(e);
var t = 0;
do
t = (t << 8) + this.data.getInt8(this.read++), e -= 8;
while (e > 0);
return t;
};
E.DataBuffer.prototype.getSignedInt = function(e) {
var t = this.getInt(e), a = 2 << e - 2;
return t >= a && (t -= a << 1), t;
};
E.DataBuffer.prototype.getBytes = function(e) {
var t;
return e ? (e = Math.min(this.length(), e), t = this.data.slice(this.read, this.read + e), this.read += e) : e === 0 ? t = "" : (t = this.read === 0 ? this.data : this.data.slice(this.read), this.clear()), t;
};
E.DataBuffer.prototype.bytes = function(e) {
return typeof e > "u" ? this.data.slice(this.read) : this.data.slice(this.read, this.read + e);
};
E.DataBuffer.prototype.at = function(e) {
return this.data.getUint8(this.read + e);
};
E.DataBuffer.prototype.setAt = function(e, t) {
return this.data.setUint8(e, t), this;
};
E.DataBuffer.prototype.last = function() {
return this.data.getUint8(this.write - 1);
};
E.DataBuffer.prototype.copy = function() {
return new E.DataBuffer(this);
};
E.DataBuffer.prototype.compact = function() {
if (this.read > 0) {
var e = new Uint8Array(this.data.buffer, this.read), t = new Uint8Array(e.byteLength);
t.set(e), this.data = new DataView(t), this.write -= this.read, this.read = 0;
}
return this;
};
E.DataBuffer.prototype.clear = function() {
return this.data = new DataView(new ArrayBuffer(0)), this.read = this.write = 0, this;
};
E.DataBuffer.prototype.truncate = function(e) {
return this.write = Math.max(0, this.length() - e), this.read = Math.min(this.read, this.write), this;
};
E.DataBuffer.prototype.toHex = function() {
for (var e = "", t = this.read; t < this.data.byteLength; ++t) {
var a = this.data.getUint8(t);
a < 16 && (e += "0"), e += a.toString(16);
}
return e;
};
E.DataBuffer.prototype.toString = function(e) {
var t = new Uint8Array(this.data, this.read, this.length());
if (e = e || "utf8", e === "binary" || e === "raw")
return E.binary.raw.encode(t);
if (e === "hex")
return E.binary.hex.encode(t);
if (e === "base64")
return E.binary.base64.encode(t);
if (e === "utf8")
return E.text.utf8.decode(t);
if (e === "utf16")
return E.text.utf16.decode(t);
throw new Error("Invalid encoding: " + e);
};
E.createBuffer = function(e, t) {
return t = t || "raw", e !== void 0 && t === "utf8" && (e = E.encodeUtf8(e)), new E.ByteBuffer(e);
};
E.fillString = function(e, t) {
for (var a = ""; t > 0; )
t & 1 && (a += e), t >>>= 1, t > 0 && (e += e);
return a;
};
E.xorBytes = function(e, t, a) {
for (var r = "", i = "", s = "", n = 0, o = 0; a > 0; --a, ++n)
i = e.charCodeAt(n) ^ t.charCodeAt(n), o >= 10 && (r += s, s = "", o = 0), s += String.fromCharCode(i), ++o;
return r += s, r;
};
E.hexToBytes = function(e) {
var t = "", a = 0;
for (e.length & !0 && (a = 1, t += String.fromCharCode(parseInt(e[0], 16))); a < e.length; a += 2)
t += String.fromCharCode(parseInt(e.substr(a, 2), 16));
return t;
};
E.bytesToHex = function(e) {
return E.createBuffer(e).toHex();
};
E.int32ToBytes = function(e) {
return String.fromCharCode(e >> 24 & 255) + String.fromCharCode(e >> 16 & 255) + String.fromCharCode(e >> 8 & 255) + String.fromCharCode(e & 255);
};
var yt = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=", gt = [
/*43 -43 = 0*/
/*'+', 1, 2, 3,'/' */
62,
-1,
-1,
-1,
63,
/*'0','1','2','3','4','5','6','7','8','9' */
52,
53,
54,
55,
56,
57,
58,
59,
60,
61,
/*15, 16, 17,'=', 19, 20, 21 */
-1,
-1,
-1,
64,
-1,
-1,
-1,
/*65 - 43 = 22*/
/*'A','B','C','D','E','F','G','H','I','J','K','L','M', */
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
/*'N','O','P','Q','R','S','T','U','V','W','X','Y','Z' */
13,
14,
15,
16,
17,
18,
19,
20,
21,
22,
23,
24,
25,
/*91 - 43 = 48 */
/*48, 49, 50, 51, 52, 53 */
-1,
-1,
-1,
-1,
-1,
-1,
/*97 - 43 = 54*/
/*'a','b','c','d','e','f','g','h','i','j','k','l','m' */
26,
27,
28,
29,
30,
31,
32,
33,
34,
35,
36,
37,
38,
/*'n','o','p','q','r','s','t','u','v','w','x','y','z' */
39,
40,
41,
42,
43,
44,
45,
46,
47,
48,
49,
50,
51
], za = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
E.encode64 = function(e, t) {
for (var a = "", r = "", i, s, n, o = 0; o < e.length; )
i = e.charCodeAt(o++), s = e.charCodeAt(o++), n = e.charCodeAt(o++), a += yt.charAt(i >> 2), a += yt.charAt((i & 3) << 4 | s >> 4), isNaN(s) ? a += "==" : (a += yt.charAt((s & 15) << 2 | n >> 6), a += isNaN(n) ? "=" : yt.charAt(n & 63)), t && a.length > t && (r += a.substr(0, t) + `\r
`, a = a.substr(t));
return r += a, r;
};
E.decode64 = function(e) {
e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
for (var t = "", a, r, i, s, n = 0; n < e.length; )
a = gt[e.charCodeAt(n++) - 43], r = gt[e.charCodeAt(n++) - 43], i = gt[e.charCodeAt(n++) - 43], s = gt[e.charCodeAt(n++) - 43], t += String.fromCharCode(a << 2 | r >> 4), i !== 64 && (t += String.fromCharCode((r & 15) << 4 | i >> 2), s !== 64 && (t += String.fromCharCode((i & 3) << 6 | s)));
return t;
};
E.encodeUtf8 = function(e) {
return unescape(encodeURIComponent(e));
};
E.decodeUtf8 = function(e) {
return decodeURIComponent(escape(e));
};
E.binary = {
raw: {},
hex: {},
base64: {},
base58: {},
baseN: {
encode: xa.encode,
decode: xa.decode
}
};
E.binary.raw.encode = function(e) {
return String.fromCharCode.apply(null, e);
};
E.binary.raw.decode = function(e, t, a) {
var r = t;
r || (r = new Uint8Array(e.length)), a = a || 0;
for (var i = a, s = 0; s < e.length; ++s)
r[i++] = e.charCodeAt(s);
return t ? i - a : r;
};
E.binary.hex.encode = E.bytesToHex;
E.binary.hex.decode = function(e, t, a) {
var r = t;
r || (r = new Uint8Array(Math.ceil(e.length / 2))), a = a || 0;
var i = 0, s = a;
for (e.length & 1 && (i = 1, r[s++] = parseInt(e[0], 16)); i < e.length; i += 2)
r[s++] = parseInt(e.substr(i, 2), 16);
return t ? s - a : r;
};
E.binary.base64.encode = function(e, t) {
for (var a = "", r = "", i, s, n, o = 0; o < e.byteLength; )
i = e[o++], s = e[o++], n = e[o++], a += yt.charAt(i >> 2), a += yt.charAt((i & 3) << 4 | s >> 4), isNaN(s) ? a += "==" : (a += yt.charAt((s & 15) << 2 | n >> 6), a += isNaN(n) ? "=" : yt.charAt(n & 63)), t && a.length > t && (r += a.substr(0, t) + `\r
`, a = a.substr(t));
return r += a, r;
};
E.binary.base64.decode = function(e, t, a) {
var r = t;
r || (r = new Uint8Array(Math.ceil(e.length / 4) * 3)), e = e.replace(/[^A-Za-z0-9\+\/\=]/g, ""), a = a || 0;
for (var i, s, n, o, f = 0, u = a; f < e.length; )
i = gt[e.charCodeAt(f++) - 43], s = gt[e.charCodeAt(f++) - 43], n = gt[e.charCodeAt(f++) - 43], o = gt[e.charCodeAt(f++) - 43], r[u++] = i << 2 | s >> 4, n !== 64 && (r[u++] = (s & 15) << 4 | n >> 2, o !== 64 && (r[u++] = (n & 3) << 6 | o));
return t ? u - a : r.subarray(0, u);
};
E.binary.base58.encode = function(e, t) {
return E.binary.baseN.encode(e, za, t);
};
E.binary.base58.decode = function(e, t) {
return E.binary.baseN.decode(e, za, t);
};
E.text = {
utf8: {},
utf16: {}
};
E.text.utf8.encode = function(e, t, a) {
e = E.encodeUtf8(e);
var r = t;
r || (r = new Uint8Array(e.length)), a = a || 0;
for (var i = a, s = 0; s < e.length; ++s)
r[i++] = e.charCodeAt(s);
return t ? i - a : r;
};
E.text.utf8.decode = function(e) {
return E.decodeUtf8(String.fromCharCode.apply(null, e));
};
E.text.utf16.encode = function(e, t, a) {
var r = t;
r || (r = new Uint8Array(e.length * 2));
var i = new Uint16Array(r.buffer);
a = a || 0;
for (var s = a, n = a, o = 0; o < e.length; ++o)
i[n++] = e.charCodeAt(o), s += 2;
return t ? s - a : r;
};
E.text.utf16.decode = function(e) {
return String.fromCharCode.apply(null, new Uint16Array(e.buffer));
};
E.deflate = function(e, t, a) {
if (t = E.decode64(e.deflate(E.encode64(t)).rval), a) {
var r = 2, i = t.charCodeAt(1);
i & 32 && (r = 6), t = t.substring(r, t.length - 4);
}
return t;
};
E.inflate = function(e, t, a) {
var r = e.inflate(E.encode64(t)).rval;
return r === null ? null : E.decode64(r);
};
var ra = function(e, t, a) {
if (!e)
throw new Error("WebStorage not available.");
var r;
if (a === null ? r = e.removeItem(t) : (a = E.encode64(JSON.stringify(a)), r = e.setItem(t, a)), typeof r < "u" && r.rval !== !0) {
var i = new Error(r.error.message);
throw i.id = r.error.id, i.name = r.error.name, i;
}
}, aa = function(e, t) {
if (!e)
throw new Error("WebStorage not available.");
var a = e.getItem(t);
if (e.init)
if (a.rval === null) {
if (a.error) {
var r = new Error(a.error.message);
throw r.id = a.error.id, r.name = a.error.name, r;
}
a = null;
} else
a = a.rval;
return a !== null && (a = JSON.parse(E.decode64(a))), a;
}, Qi = function(e, t, a, r) {
var i = aa(e, t);
i === null && (i = {}), i[a] = r, ra(e, t, i);
}, zi = function(e, t, a) {
var r = aa(e, t);
return r !== null && (r = a in r ? r[a] : null), r;
}, Yi = function(e, t, a) {
var r = aa(e, t);
if (r !== null && a in r) {
delete r[a];
var i = !0;
for (var s in r) {
i = !1;
break;
}
i && (r = null), ra(e, t, r);
}
}, Xi = function(e, t) {
ra(e, t, null);
}, Er = function(e, t, a) {
var r = null;
typeof a > "u" && (a = ["web", "flash"]);
var i, s = !1, n = null;
for (var o in a) {
i = a[o];
try {
if (i === "flash" || i === "both") {
if (t[0] === null)
throw new Error("Flash local storage not available.");
r = e.apply(this, t), s = i === "flash";
}
(i === "web" || i === "both") && (t[0] = localStorage, r = e.apply(this, t), s = !0);
} catch (f) {
n = f;
}
if (s)
break;
}
if (!s)
throw n;
return r;
};
E.setItem = function(e, t, a, r, i) {
Er(Qi, arguments, i);
};
E.getItem = function(e, t, a, r) {
return Er(zi, arguments, r);
};
E.removeItem = function(e, t, a, r) {
Er(Yi, arguments, r);
};
E.clearItems = function(e, t, a) {
Er(Xi, arguments, a);
};
E.isEmpty = function(e) {
for (var t in e)
if (e.hasOwnProperty(t))
return !1;
return !0;
};
E.format = function(e) {
for (var t = /%./g, a, r, i = 0, s = [], n = 0; a = t.exec(e); ) {
r = e.substring(n, t.lastIndex - 2), r.length > 0 && s.push(r), n = t.lastIndex;
var o = a[0][1];
switch (o) {
case "s":
case "o":
i < arguments.length ? s.push(arguments[i++ + 1]) : s.push("<?>");
break;
case "%":
s.push("%");
break;
default:
s.push("<%" + o + "?>");
}
}
return s.push(e.substring(n)), s.join("");
};
E.formatNumber = function(e, t, a, r) {
var i = e, s = isNaN(t = Math.abs(t)) ? 2 : t, n = a === void 0 ? "," : a, o = r === void 0 ? "." : r, f = i < 0 ? "-" : "", u = parseInt(i = Math.abs(+i || 0).toFixed(s), 10) + "", l = u.length > 3 ? u.length % 3 : 0;
return f + (l ? u.substr(0, l) + o : "") + u.substr(l).replace(/(\d{3})(?=\d)/g, "$1" + o) + (s ? n + Math.abs(i - u).toFixed(s).slice(2) : "");
};
E.formatSize = function(e) {
return e >= 1073741824 ? e = E.formatNumber(e / 1073741824, 2, ".", "") + " GiB" : e >= 1048576 ? e = E.formatNumber(e / 1048576, 2, ".", "") + " MiB" : e >= 1024 ? e = E.formatNumber(e / 1024, 0) + " KiB" : e = E.formatNumber(e, 0) + " bytes", e;
};
E.bytesFromIP = function(e) {
return e.indexOf(".") !== -1 ? E.bytesFromIPv4(e) : e.indexOf(":") !== -1 ? E.bytesFromIPv6(e) : null;
};
E.bytesFromIPv4 = function(e) {
if (e = e.split("."), e.length !== 4)
return null;
for (var t = E.createBuffer(), a = 0; a < e.length; ++a) {
var r = parseInt(e[a], 10);
if (isNaN(r))
return null;
t.putByte(r);
}
return t.getBytes();
};
E.bytesFromIPv6 = function(e) {
var t = 0;
e = e.split(":").filter(function(n) {
return n.length === 0 && ++t, !0;
});
for (var a = (8 - e.length + t) * 2, r = E.createBuffer(), i = 0; i < 8; ++i) {
if (!e[i] || e[i].length === 0) {
r.fillWithByte(0, a), a = 0;
continue;
}
var s = E.hexToBytes(e[i]);
s.length < 2 && r.putByte(0), r.putBytes(s);
}
return r.getBytes();
};
E.bytesToIP = function(e) {
return e.length === 4 ? E.bytesToIPv4(e) : e.length === 16 ? E.bytesToIPv6(e) : null;
};
E.bytesToIPv4 = function(e) {
if (e.length !== 4)
return null;
for (var t = [], a = 0; a < e.length; ++a)
t.push(e.charCodeAt(a));
return t.join(".");
};
E.bytesToIPv6 = function(e) {
if (e.length !== 16)
return null;
for (var t = [], a = [], r = 0, i = 0; i < e.length; i += 2) {
for (var s = E.bytesToHex(e[i] + e[i + 1]); s[0] === "0" && s !== "0"; )
s = s.substr(1);
if (s === "0") {
var n = a[a.length - 1], o = t.length;
!n || o !== n.end + 1 ? a.push({ start: o, end: o }) : (n.end = o, n.end - n.start > a[r].end - a[r].start && (r = a.length - 1));
}
t.push(s);
}
if (a.length > 0) {
var f = a[r];
f.end - f.start > 0 && (t.splice(f.start, f.end - f.start + 1, ""), f.start === 0 && t.unshift(""), f.end === 7 && t.push(""));
}
return t.join(":");
};
E.estimateCores = function(e, t) {
if (typeof e == "function" && (t = e, e = {}), e = e || {}, "cores" in E && !e.update)
return t(null, E.cores);
if (typeof navigator < "u" && "hardwareConcurrency" in navigator && navigator.hardwareConcurrency > 0)
return E.cores = navigator.hardwareConcurrency, t(null, E.cores);
if (typeof Worker > "u")
return E.cores = 1, t(null, E.cores);
if (typeof Blob > "u")
return E.cores = 2, t(null, E.cores);
var a = URL.createObjectURL(new Blob([
"(",
function() {
self.addEventListener("message", function(n) {
var o = Date.now(), f = o + 4;
self.postMessage({ st: o, et: f });
});
}.toString(),
")()"
], { type: "application/javascript" }));
r([], 5, 16);
function r(n, o, f) {
if (o === 0) {
var u = Math.floor(n.reduce(function(l, c) {
return l + c;
}, 0) / n.length);
return E.cores = Math.max(1, u), URL.revokeObjectURL(a), t(null, E.cores);
}
i(f, function(l, c) {
n.push(s(f, c)), r(n, o - 1, f);
});
}
function i(n, o) {
for (var f = [], u = [], l = 0; l < n; ++l) {
var c = new Worker(a);
c.addEventListener("message", function(v) {
if (u.push(v.data), u.length === n) {
for (var C = 0; C < n; ++C)
f[C].terminate();
o(null, u);
}
}), f.push(c);
}
for (var l = 0; l < n; ++l)
f[l].postMessage(l);
}
function s(n, o) {
for (var f = [], u = 0; u < n; ++u)
for (var l = o[u], c = f[u] = [], v = 0; v < n; ++v)
if (u !== v) {
var C = o[v];
(l.st > C.st && l.st < C.et || C.st > l.st && C.st < l.et) && c.push(v);
}
return f.reduce(function(y, x) {
return Math.max(y, x.length);
}, 0);
}
};
var Se = z;
Se.cipher = Se.cipher || {};
Se.cipher.algorithms = Se.cipher.algorithms || {};
Se.cipher.createCipher = function(e, t) {
var a = e;
if (typeof a == "string" && (a = Se.cipher.getAlgorithm(a), a && (a = a())), !a)
throw new Error("Unsupported algorithm: " + e);
return new Se.cipher.BlockCipher({
algorithm: a,
key: t,
decrypt: !1
});
};
Se.cipher.createDecipher = function(e, t) {
var a = e;
if (typeof a == "string" && (a = Se.cipher.getAlgorithm(a), a && (a = a())), !a)
throw new Error("Unsupported algorithm: " + e);
return new Se.cipher.BlockCipher({
algorithm: a,
key: t,
decrypt: !0
});
};
Se.cipher.registerAlgorithm = function(e, t) {
e = e.toUpperCase(), Se.cipher.algorithms[e] = t;
};
Se.cipher.getAlgorithm = function(e) {
return e = e.toUpperCase(), e in Se.cipher.algorithms ? Se.cipher.algorithms[e] : null;
};
var ia = Se.cipher.BlockCipher = function(e) {
this.algorithm = e.algorithm, this.mode = this.algorithm.mode, this.blockSize = this.mode.blockSize, this._finish = !1, this._input = null, this.output = null, this._op = e.decrypt ? this.mode.decrypt : this.mode.encrypt, this._decrypt = e.decrypt, this.algorithm.initialize(e);
};
ia.prototype.start = function(e) {
e = e || {};
var t = {};
for (var a in e)
t[a] = e[a];
t.decrypt = this._decrypt, this._finish = !1, this._input = Se.util.createBuffer(), this.output = e.output || Se.util.createBuffer(), this.mode.start(t);
};
ia.prototype.update = function(e) {
for (e && this._input.putBuffer(e); !this._op.call(this.mode, this._input, this.output, this._finish) && !this._finish; )
;
this._input.compact();
};
ia.prototype.finish = function(e) {
e && (this.mode.name === "ECB" || this.mode.name === "CBC") && (this.mode.pad = function(a) {
return e(this.blockSize, a, !1);
}, this.mode.unpad = function(a) {
return e(this.blockSize, a, !0);
});
var t = {};
return t.decrypt = this._decrypt, t.overflow = this._input.length() % this.blockSize, !(!this._decrypt && this.mode.pad && !this.mode.pad(this._input, t) || (this._finish = !0, this.update(), this._decrypt && this.mode.unpad && !this.mode.unpad(this.output, t)) || this.mode.afterFinish && !this.mode.afterFinish(this.output, t));
};
var xe = z;
xe.cipher = xe.cipher || {};
var j = xe.cipher.modes = xe.cipher.modes || {};
j.ecb = function(e) {
e = e || {}, this.name = "ECB", this.cipher = e.cipher, this.blockSize = e.blockSize || 16, this._ints = this.blockSize / 4, this._inBlock = new Array(this._ints), this._outBlock = new Array(this._ints);
};
j.ecb.prototype.start = function(e) {
};
j.ecb.prototype.encrypt = function(e, t, a) {
if (e.length() < this.blockSize && !(a && e.length() > 0))
return !0;
for (var r = 0; r < this._ints; ++r)
this._inBlock[r] = e.getInt32();
this.cipher.encrypt(this._inBlock, this._outBlock);
for (var r = 0; r < this._ints; ++r)
t.putInt32(this._outBlock[r]);
};
j.ecb.prototype.decrypt = function(e, t, a) {
if (e.length() < this.blockSize && !(a && e.length() > 0))
return !0;
for (var r = 0; r < this._ints; ++r)
this._inBlock[r] = e.getInt32();
this.cipher.decrypt(this._inBlock, this._outBlock);
for (var r = 0; r < this._ints; ++r)
t.putInt32(this._outBlock[r]);
};
j.ecb.prototype.pad = function(e, t) {
var a = e.length() === this.blockSize ? this.blockSize : this.blockSize - e.length();
return e.fillWithByte(a, a), !0;
};
j.ecb.prototype.unpad = function(e, t) {
if (t.overflow > 0)
return !1;
var a = e.length(), r = e.at(a - 1);
return r > this.blockSize << 2 ? !1 : (e.truncate(r), !0);
};
j.cbc = function(e) {
e = e || {}, this.name = "CBC", this.cipher = e.cipher, this.blockSize = e.blockSize || 16, this._ints = this.blockSize / 4, this._inBlock = new Array(this._ints), this._outBlock = new Array(this._ints);
};
j.cbc.prototype.start = function(e) {
if (e.iv === null) {
if (!this._prev)
throw new Error("Invalid IV parameter.");
this._iv = this._prev.slice(0);
} else if ("iv" in e)
this._iv = xr(e.iv, this.blockSize), this._prev = this._iv.slice(0);
else
throw new Error("Invalid IV parameter.");
};
j.cbc.prototype.encrypt = function(e, t, a) {
if (e.length() < this.blockSize && !(a && e.length() > 0))
return !0;
for (var r = 0; r < this._ints; ++r)
this._inBlock[r] = this._prev[r] ^ e.getInt32();
this.cipher.encrypt(this._inBlock, this._outBlock);
for (var r = 0; r < this._ints; ++r)
t.putInt32(this._outBlock[r]);
this._prev = this._outBlock;
};
j.cbc.prototype.decrypt = function(e, t, a) {
if (e.length() < this.blockSize && !(a && e.length() > 0))
return !0;
for (var r = 0; r < this._ints; ++r)
this._inBlock[r] = e.getInt32();
this.cipher.decrypt(this._inBlock, this._outBlock);
for (var r = 0; r < this._ints; ++r)
t.putInt32(this._prev[r] ^ this._outBlock[r]);
this._prev = this._inBlock.slice(0);
};
j.cbc.prototype.pad = function(e, t) {
var a = e.length() === this.blockSize ? this.blockSize : this.blockSize - e.length();
return e.fillWithByte(a, a), !0;
};
j.cbc.prototype.unpad = function(e, t) {
if (t.overflow > 0)
return !1;
var a = e.length(), r = e.at(a - 1);
return r > this.blockSize << 2 ? !1 : (e.truncate(r), !0);
};
j.cfb = function(e) {
e = e || {}, this.name = "CFB", this.cipher = e.cipher, this.blockSize = e.blockSize || 16, this._ints = this.blockSize / 4, this._inBlock = null, this._outBlock = new Array(this._ints), this._partialBlock = new Array(this._ints), this._partialOutput = xe.util.createBuffer(), this._partialBytes = 0;
};
j.cfb.prototype.start = function(e) {
if (!("iv" in e))
throw new Error("Invalid IV parameter.");
this._iv = xr(e.iv, this.blockSize), this._inBlock = this._iv.slice(0), this._partialBytes = 0;
};
j.cfb.prototype.encrypt = function(e, t, a) {
var r = e.length();
if (r === 0)
return !0;
if (this.cipher.encrypt(this._inBlock, this._outBlock), this._partialBytes === 0 && r >= this.blockSize) {
for (var i = 0; i < this._ints; ++i)
this._inBlock[i] = e.getInt32() ^ this._outBlock[i], t.putInt32(this._inBlock[i]);
return;
}
var s = (this.blockSize - r) % this.blockSize;
s > 0 && (s = this.blockSize - s), this._partialOutput.clear();
for (var i = 0; i < this._ints; ++i)
this._partialBlock[i] = e.getInt32() ^ this._outBlock[i], this._partialOutput.putInt32(this._partialBlock[i]);
if (s > 0)
e.read -= this.blockSize;
else
for (var i = 0; i < this._ints; ++i)
this._inBlock[i] = this._partialBlock[i];
if (this._partialBytes > 0 && this._partialOutput.getBytes(this._partialBytes), s > 0 && !a)
return t.putBytes(this._partialOutput.getBytes(
s - this._partialBytes
)), this._partialBytes = s, !0;
t.putBytes(this._partialOutput.getBytes(
r - this._partialBytes
)), this._partialBytes = 0;
};
j.cfb.prototype.decrypt = function(e, t, a) {
var r = e.length();
if (r === 0)
return !0;
if (this.cipher.encrypt(this._inBlock, this._outBlock), this._partialBytes === 0 && r >= this.blockSize) {
for (var i = 0; i < this._ints; ++i)
this._inBlock[i] = e.getInt32(), t.putInt32(this._inBlock[i] ^ this._outBlock[i]);
return;
}
var s = (this.blockSize - r) % this.blockSize;
s > 0 && (s = this.blockSize - s), this._partialOutput.clear();
for (var i = 0; i < this._ints; ++i)
this._partialBlock[i] = e.getInt32(), this._partialOutput.putInt32(this._partialBlock[i] ^ this._outBlock[i]);
if (s > 0)
e.read -= this.blockSize;
else
for (var i = 0; i < this._ints; ++i)
this._inBlock[i] = this._partialBlock[i];
if (this._partialBytes > 0 && this._partialOutput.getBytes(this._partialBytes), s > 0 && !a)
return t.putBytes(this._partialOutput.getBytes(
s - this._partialBytes
)), this._partialBytes = s, !0;
t.putBytes(this._partialOutput.getBytes(
r - this._partialBytes
)), this._partialBytes = 0;
};
j.ofb = function(e) {
e = e || {}, this.name = "OFB", this.cipher = e.cipher, this.blockSize = e.blockSize || 16, this._ints = this.blockSize / 4, this._inBlock = null, this._outBlock = new Array(this._ints), this._partialOutput = xe.util.createBuffer(), this._partialBytes = 0;
};
j.ofb.prototype.start = function(e) {
if (!("iv" in e))
throw new Error("Invalid IV parameter.");
this._iv = xr(e.iv, this.blockSize), this._inBlock = this._iv.slice(0), this._partialBytes = 0;
};
j.ofb.prototype.encrypt = function(e, t, a) {
var r = e.length();
if (e.length() === 0)
return !0;
if (this.cipher.encrypt(this._inBlock, this._outBlock), this._partialBytes === 0 && r >= this.blockSize) {
for (var i = 0; i < this._ints; ++i)
t.putInt32(e.getInt32() ^ this._outBlock[i]), this._inBlock[i] = this._outBlock[i];
return;
}
var s = (this.blockSize - r) % this.blockSize;
s > 0 && (s = this.blockSize - s), this._partialOutput.clear();
for (var i = 0; i < this._ints; ++i)
this._partialOutput.putInt32(e.getInt32() ^ this._outBlock[i]);
if (s > 0)
e.read -= this.blockSize;
else
for (var i = 0; i < this._ints; ++i)
this._inBlock[i] = this._outBlock[i];
if (this._partialBytes > 0 && this._partialOutput.getBytes(this._partialBytes), s > 0 && !a)
return t.putBytes(this._partialOutput.getBytes(
s - this._partialBytes
)), this._partialBytes = s, !0;
t.putBytes(this._partialOutput.getBytes(
r - this._partialBytes
)), this._partialBytes = 0;
};
j.ofb.prototype.decrypt = j.ofb.prototype.encrypt;
j.ctr = function(e) {
e = e || {}, this.name = "CTR", this.cipher = e.cipher, this.blockSize = e.blockSize || 16, this._ints = this.blockSize / 4, this._inBlock = null, this._outBlock = new Array(this._ints), this._partialOutput = xe.util.createBuffer(), this._partialBytes = 0;
};
j.ctr.prototype.start = function(e) {
if (!("iv" in e))
throw new Error("Invalid IV parameter.");
this._iv = xr(e.iv, this.blockSize), this._inBlock = this._iv.slice(0), this._partialBytes = 0;
};
j.ctr.prototype.encrypt = function(e, t, a) {
var r = e.length();
if (r === 0)
return !0;
if (this.cipher.encrypt(this._inBlock, this._outBlock), this._partialBytes === 0 && r >= this.blockSize)
for (var i = 0; i < this._ints; ++i)
t.putInt32(e.getInt32() ^ this._outBlock[i]);
else {
var s = (this.blockSize - r) % this.blockSize;
s > 0 && (s = this.blockSize - s), this._partialOutput.clear();
for (var i = 0; i < this._ints; ++i)
this._partialOutput.putInt32(e.getInt32() ^ this._outBlock[i]);
if (s > 0 && (e.read -= this.blockSize), this._partialBytes > 0 && this._partialOutput.getBytes(this._partialBytes), s > 0 && !a)
return t.putBytes(this._partialOutput.getBytes(
s - this._partialBytes
)), this._partialBytes = s, !0;
t.putBytes(this._partialOutput.getBytes(
r - this._partialBytes
)), this._partialBytes = 0;
}
Sr(this._inBlock);
};
j.ctr.prototype.decrypt = j.ctr.prototype.encrypt;
j.gcm = function(e) {
e = e || {}, this.name = "GCM", this.cipher = e.cipher, this.blockSize = e.blockSize || 16, this._ints = this.blockSize / 4, this._inBlock = new Array(this._ints), this._outBlock = new Array(this._ints), this._partialOutput = xe.util.createBuffer(), this._partialBytes = 0, this._R = 3774873600;
};
j.gcm.prototype.start = function(e) {
if (!("iv" in e))
throw new Error("Invalid IV parameter.");
var t = xe.util.createBuffer(e.iv);
this._cipherLength = 0;
var a;
if ("additionalData" in e ? a = xe.util.createBuffer(e.additionalData) : a = xe.util.createBuffer(), "tagLength" in e ? this._tagLength = e.tagLength : this._tagLength = 128, this._tag = null, e.decrypt && (this._tag = xe.util.createBuffer(e.tag).getBytes(), this._tag.length !== this._tagLength / 8))
throw new Error("Authentication tag does not match tag length.");
this._hashBlock = new Array(this._ints), this.tag = null, this._hashSubkey = new Array(this._ints), this.cipher.encrypt([0, 0, 0, 0], this._hashSubkey), this.componentBits = 4, this._m = this.generateHashTable(this._hashSubkey, this.componentBits);
var r = t.length();
if (r === 12)
this._j0 = [t.getInt32(), t.getInt32(), t.getInt32(), 1];
else {
for (this._j0 = [0, 0, 0, 0]; t.length() > 0; )
this._j0 = this.ghash(
this._hashSubkey,
this._j0,
[t.getInt32(), t.getInt32(), t.getInt32(), t.getInt32()]
);
this._j0 = this.ghash(
this._hashSubkey,
this._j0,
[0, 0].concat(Pr(r * 8))
);
}
this._inBlock = this._j0.slice(0), Sr(this._inBlock), this._partialBytes = 0, a = xe.util.createBuffer(a), this._aDataLength = Pr(a.length() * 8);
var i = a.length() % this.blockSize;
for (i && a.fillWithByte(0, this.blockSize - i), this._s = [0, 0, 0, 0]; a.length() > 0; )
this._s = this.ghash(this._hashSubkey, this._s, [
a.getInt32(),
a.getInt32(),
a.getInt32(),
a.getInt32()
]);
};
j.gcm.prototype.encrypt = function(e, t, a) {
var r = e.length();
if (r === 0)
return !0;
if (this.cipher.encrypt(this._inBlock, this._outBlock), this._partialBytes === 0 && r >= this.blockSize) {
for (var i = 0; i < this._ints; ++i)
t.putInt32(this._outBlock[i] ^= e.getInt32());
this._cipherLength += this.blockSize;
} else {
var s = (this.blockSize - r) % this.blockSize;
s > 0 && (s = this.blockSize - s), this._partialOutput.clear();
for (var i = 0; i < this._ints; ++i)
this._partialOutput.putInt32(e.getInt32() ^ this._outBlock[i]);
if (s <= 0 || a) {
if (a) {
var n = r % this.blockSize;
this._cipherLength += n, this._partialOutput.truncate(this.blockSize - n);
} else
this._cipherLength += this.blockSize;
for (var i = 0; i < this._ints; ++i)
this._outBlock[i] = this._partialOutput.getInt32();
this._partialOutput.read -= this.blockSize;
}
if (this._partialBytes > 0 && this._partialOutput.getBytes(this._partialBytes), s > 0 && !a)
return e.read -= this.blockSize, t.putBytes(this._partialOutput.getBytes(
s - this._partialBytes
)), this._partialBytes = s, !0;
t.putBytes(this._partialOutput.getBytes(
r - this._partialBytes
)), this._partialBytes = 0;
}
this._s = this.ghash(this._hashSubkey, this._s, this._outBlock), Sr(this._inBlock);
};
j.gcm.prototype.decrypt = function(e, t, a) {
var r = e.length();
if (r < this.blockSize && !(a && r > 0))
return !0;
this.cipher.encrypt(this._inBlock, this._outBlock), Sr(this._inBlock), this._hashBlock[0] = e.getInt32(), this._hashBlock[1] = e.getInt32(), this._hashBlock[2] = e.getInt32(), this._hashBlock[3] = e.getInt32(), this._s = this.ghash(this._hashSubkey, this._s, this._hashBlock);
for (var i = 0; i < this._ints; ++i)
t.putInt32(this._outBlock[i] ^ this._hashBlock[i]);
r < this.blockSize ? this._cipherLength += r % this.blockSize : this._cipherLength += this.blockSize;
};
j.gcm.prototype.afterFinish = function(e, t) {
var a = !0;
t.decrypt && t.overflow && e.truncate(this.blockSize - t.overflow), this.tag = xe.util.createBuffer();
var r = this._aDataLength.concat(Pr(this._cipherLength * 8));
this._s = this.ghash(this._hashSubkey, this._s, r);
var i = [];
this.cipher.encrypt(this._j0, i);
for (var s = 0; s < this._ints; ++s)
this.tag.putInt32(this._s[s] ^ i[s]);
return this.tag.truncate(this.tag.length() % (this._tagLength / 8)), t.decrypt && this.tag.bytes() !== this._tag && (a = !1), a;
};
j.gcm.prototype.multiply = function(e, t) {
for (var a = [0, 0, 0, 0], r = t.slice(0), i = 0; i < 128; ++i) {
var s = e[i / 32 | 0] & 1 << 31 - i % 32;
s && (a[0] ^= r[0], a[1] ^= r[1], a[2] ^= r[2], a[3] ^= r[3]), this.pow(r, r);
}
return a;
};
j.gcm.prototype.pow = function(e, t) {
for (var a = e[3] & 1, r = 3; r > 0; --r)
t[r] = e[r] >>> 1 | (e[r - 1] & 1) << 31;
t[0] = e[0] >>> 1, a && (t[0] ^= this._R);
};
j.gcm.prototype.tableMultiply = function(e) {
for (var t = [0, 0, 0, 0], a = 0; a < 32; ++a) {
var r = a / 8 | 0, i = e[r] >>> (7 - a % 8) * 4 & 15, s = this._m[a][i];
t[0] ^= s[0], t[1] ^= s[1], t[2] ^= s[2], t[3] ^= s[3];
}
return t;
};
j.gcm.prototype.ghash = function(e, t, a) {
return t[0] ^= a[0], t[1] ^= a[1], t[2] ^= a[2], t[3] ^= a[3], this.tableMultiply(t);
};
j.gcm.prototype.generateHashTable = function(e, t) {
for (var a = 8 / t, r = 4 * a, i = 16 * a, s = new Array(i), n = 0; n < i; ++n) {
var o = [0, 0, 0, 0], f = n / r | 0, u = (r - 1 - n % r) * t;
o[f] = 1 << t - 1 << u, s[n] = this.generateSubHashTable(this.multiply(o, e), t);
}
return s;
};
j.gcm.prototype.generateSubHashTable = function(e, t) {
var a = 1 << t, r = a >>> 1, i = new Array(a);
i[r] = e.slice(0);
for (var s = r >>> 1; s > 0; )
this.pow(i[2 * s], i[s] = []), s >>= 1;
for (s = 2; s < r; ) {
for (var n = 1; n < s; ++n) {
var o = i[s], f = i[n];
i[s + n] = [
o[0] ^ f[0],
o[1] ^ f[1],
o[2] ^ f[2],
o[3] ^ f[3]
];
}
s *= 2;
}
for (i[0] = [0, 0, 0, 0], s = r + 1; s < a; ++s) {
var u = i[s ^ r];
i[s] = [e[0] ^ u[0], e[1] ^ u[1], e[2] ^ u[2], e[3] ^ u[3]];
}
return i;
};
function xr(e, t) {
if (typeof e == "string" && (e = xe.util.createBuffer(e)), xe.util.isArray(e) && e.length > 4) {
var a = e;
e = xe.util.createBuffer();
for (var r = 0; r < a.length; ++r)
e.putByte(a[r]);
}
if (e.length() < t)
throw new Error(
"Invalid IV length; got " + e.length() + " bytes and expected " + t + " bytes."
);
if (!xe.util.isArray(e)) {
for (var i = [], s = t / 4, r = 0; r < s; ++r)
i.push(e.getInt32());
e = i;
}
return e;
}
function Sr(e) {
e[e.length - 1] = e[e.length - 1] + 1 & 4294967295;
}
function Pr(e) {
return [e / 4294967296 | 0, e & 4294967295];
}
var ue = z;
ue.aes = ue.aes || {};
ue.aes.startEncrypting = function(e, t, a, r) {
var i = Tr({
key: e,
output: a,
decrypt: !1,
mode: r
});
return i.start(t), i;
};
ue.aes.createEncryptionCipher = function(e, t) {
return Tr({
key: e,
output: null,
decrypt: !1,
mode: t
});
};
ue.aes.startDecrypting = function(e, t, a, r) {
var i = Tr({
key: e,
output: a,
decrypt: !0,
mode: r
});
return i.start(t), i;
};
ue.aes.createDecryptionCipher = function(e, t) {
return Tr({
key: e,
output: null,
decrypt: !0,
mode: t
});
};
ue.aes.Algorithm = function(e, t) {
na || Xa();
var a = this;
a.name = e, a.mode = new t({
blockSize: 16,
cipher: {
encrypt: function(r, i) {
return Or(a._w, r, i, !1);
},
decrypt: function(r, i) {
return Or(a._w, r, i, !0);
}
}
}), a._init = !1;
};
ue.aes.Algorithm.prototype.initialize = function(e) {
if (!this._init) {
var t = e.key, a;
if (typeof t == "string" && (t.length === 16 || t.length === 24 || t.length === 32))
t = ue.util.createBuffer(t);
else if (ue.util.isArray(t) && (t.length === 16 || t.length === 24 || t.length === 32)) {
a = t, t = ue.util.createBuffer();
for (var r = 0; r < a.length; ++r)
t.putByte(a[r]);
}
if (!ue.util.isArray(t)) {
a = t, t = [];
var i = a.length();
if (i === 16 || i === 24 || i === 32) {
i = i >>> 2;
for (var r = 0; r < i; ++r)
t.push(a.getInt32());
}
}
if (!ue.util.isArray(t) || !(t.length === 4 || t.length === 6 || t.length === 8))
throw new Error("Invalid key parameter.");
var s = this.mode.name, n = ["CFB", "OFB", "CTR", "GCM"].indexOf(s) !== -1;
this._w = Wa(t, e.decrypt && !n), this._init = !0;
}
};
ue.aes._expandKey = function(e, t) {
return na || Xa(), Wa(e, t);
};
ue.aes._updateBlock = Or;
Ht("AES-ECB", ue.cipher.modes.ecb);
Ht("AES-CBC", ue.cipher.modes.cbc);
Ht("AES-CFB", ue.cipher.modes.cfb);
Ht("AES-OFB", ue.cipher.modes.ofb);
Ht("AES-CTR", ue.cipher.modes.ctr);
Ht("AES-GCM", ue.cipher.modes.gcm);
function Ht(e, t) {
var a = function() {
return new ue.aes.Algorithm(e, t);
};
ue.cipher.registerAlgorithm(e, a);
}
var na = !1, kt = 4, Fe, Vr, Ya, Nt, tt;
function Xa() {
na = !0, Ya = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];
for (var e = new Array(256), t = 0; t < 128; ++t)
e[t] = t << 1, e[t + 128] = t + 128 << 1 ^ 283;
Fe = new Array(256), Vr = new Array(256), Nt = new Array(4), tt = new Array(4);
for (var t = 0; t < 4; ++t)
Nt[t] = new Array(256), tt[t] = new Array(256);
for (var a = 0, r = 0, i, s, n, o, f, u, l, t = 0; t < 256; ++t) {
o = r ^ r << 1 ^ r << 2 ^ r << 3 ^ r << 4, o = o >> 8 ^ o & 255 ^ 99, Fe[a] = o, Vr[o] = a, f = e[o], i = e[a], s = e[i], n = e[s], u = f << 24 ^ // 2
o << 16 ^ // 1
o << 8 ^ // 1
(o ^ f), l = (i ^ s ^ n) << 24 ^ // E (14)
(a ^ n) << 16 ^ // 9
(a ^ s ^ n) << 8 ^ // D (13)
(a ^ i ^ n);
for (var c = 0; c < 4; ++c)
Nt[c][a] = u, tt[c][o] = l, u = u << 24 | u >>> 8, l = l << 24 | l >>> 8;
a === 0 ? a = r = 1 : (a = i ^ e[e[e[i ^ n]]], r ^= e[e[r]]);
}
}
function Wa(e, t) {
for (var a = e.slice(0), r, i = 1, s = a.length, n = s + 6 + 1, o = kt * n, f = s; f < o; ++f)
r = a[f - 1], f % s === 0 ? (r = Fe[r >>> 16 & 255] << 24 ^ Fe[r >>> 8 & 255] << 16 ^ Fe[r & 255] << 8 ^ Fe[r >>> 24] ^ Ya[i] << 24, i++) : s > 6 && f % s === 4 && (r = Fe[r >>> 24] << 24 ^ Fe[r >>> 16 & 255] << 16 ^ Fe[r >>> 8 & 255] << 8 ^ Fe[r & 255]), a[f] = a[f - s] ^ r;
if (t) {
var u, l = tt[0], c = tt[1], v = tt[2], C = tt[3], y = a.slice(0);
o = a.length;
for (var f = 0, x = o - kt; f < o; f += kt, x -= kt)
if (f === 0 || f === o - kt)
y[f] = a[x], y[f + 1] = a[x + 3], y[f + 2] = a[x + 2], y[f + 3] = a[x + 1];
else
for (var T = 0; T < kt; ++T)
u = a[x + T], y[f + (3 & -T)] = l[Fe[u >>> 24]] ^ c[Fe[u >>> 16 & 255]] ^ v[Fe[u >>> 8 & 255]] ^ C[Fe[u & 255]];
a = y;
}
return a;
}
function Or(e, t, a, r) {
var i = e.length / 4 - 1, s, n, o, f, u;
r ? (s = tt[0], n = tt[1], o = tt[2], f = tt[3], u = Vr) : (s = Nt[0], n = Nt[1], o = Nt[2], f = Nt[3], u = Fe);
var l, c, v, C, y, x, T;
l = t[0] ^ e[0], c = t[r ? 3 : 1] ^ e[1], v = t[2] ^ e[2], C = t[r ? 1 : 3] ^ e[3];
for (var I = 3, B = 1; B < i; ++B)
y = s[l >>> 24] ^ n[c >>> 16 & 255] ^ o[v >>> 8 & 255] ^ f[C & 255] ^ e[++I], x = s[c >>> 24] ^ n[v >>> 16 & 255] ^ o[C >>> 8 & 255] ^ f[l & 255] ^ e[++I], T = s[v >>> 24] ^ n[C >>> 16 & 255] ^ o[l >>> 8 & 255] ^ f[c & 255] ^ e[++I], C = s[C >>> 24] ^ n[l >>> 16 & 255] ^ o[c >>> 8 & 255] ^ f[v & 255] ^ e[++I], l = y, c = x, v = T;
a[0] = u[l >>> 24] << 24 ^ u[c >>> 16 & 255] << 16 ^ u[v >>> 8 & 255] << 8 ^ u[C & 255] ^ e[++I], a[r ? 3 : 1] = u[c >>> 24] << 24 ^ u[v >>> 16 & 255] << 16 ^ u[C >>> 8 & 255] << 8 ^ u[l & 255] ^ e[++I], a[2] = u[v >>> 24] << 24 ^ u[C >>> 16 & 255] << 16 ^ u[l >>> 8 & 255] << 8 ^ u[c & 255] ^ e[++I], a[r ? 1 : 3] = u[C >>> 24] << 24 ^ u[l >>> 16 & 255] << 16 ^ u[c >>> 8 & 255] << 8 ^ u[v & 255] ^ e[++I];
}
function Tr(e) {
e = e || {};
var t = (e.mode || "CBC").toUpperCase(), a = "AES-" + t, r;
e.decrypt ? r = ue.cipher.createDecipher(a, e.key) : r = ue.cipher.createCipher(a, e.key);
var i = r.start;
return r.start = function(s, n) {
var o = null;
n instanceof ue.util.ByteBuffer && (o = n, n = {}), n = n || {}, n.output = o, n.iv = s, i.call(r, n);
}, r;
}
var jt = z;
jt.pki = jt.pki || {};
var Fr = jt.pki.oids = jt.oids = jt.oids || {};
function R(e, t) {
Fr[e] = t, Fr[t] = e;
}
function te(e, t) {
Fr[e] = t;
}
R("1.2.840.113549.1.1.1", "rsaEncryption");
R("1.2.840.113549.1.1.4", "md5WithRSAEncryption");
R("1.2.840.113549.1.1.5", "sha1WithRSAEncryption");
R("1.2.840.113549.1.1.7", "RSAES-OAEP");
R("1.2.840.113549.1.1.8", "mgf1");
R("1.2.840.113549.1.1.9", "pSpecified");
R("1.2.840.113549.1.1.10", "RSASSA-PSS");
R("1.2.840.113549.1.1.11", "sha256WithRSAEncryption");
R("1.2.840.113549.1.1.12", "sha384WithRSAEncryption");
R("1.2.840.113549.1.1.13", "sha512WithRSAEncryption");
R("1.3.101.112", "EdDSA25519");
R("1.2.840.10040.4.3", "dsa-with-sha1");
R("1.3.14.3.2.7", "desCBC");
R("1.3.14.3.2.26", "sha1");
R("1.3.14.3.2.29", "sha1WithRSASignature");
R("2.16.840.1.101.3.4.2.1", "sha256");
R("2.16.840.1.101.3.4.2.2", "sha384");
R("2.16.840.1.101.3.4.2.3", "sha512");
R("2.16.840.1.101.3.4.2.4", "sha224");
R("2.16.840.1.101.3.4.2.5", "sha512-224");
R("2.16.840.1.101.3.4.2.6", "sha512-256");
R("1.2.840.113549.2.2", "md2");
R("1.2.840.113549.2.5", "md5");
R("1.2.840.113549.1.7.1", "data");
R("1.2.840.113549.1.7.2", "signedData");
R("1.2.840.113549.1.7.3", "envelopedData");
R("1.2.840.113549.1.7.4", "signedAndEnvelopedData");
R("1.2.840.113549.1.7.5", "digestedData");
R("1.2.840.113549.1.7.6", "encryptedData");
R("1.2.840.113549.1.9.1", "emailAddress");
R("1.2.840.113549.1.9.2", "unstructuredName");
R("1.2.840.113549.1.9.3", "contentType");
R("1.2.840.113549.1.9.4", "messageDigest");
R("1.2.840.113549.1.9.5", "signingTime");
R("1.2.840.113549.1.9.6", "counterSignature");
R("1.2.840.113549.1.9.7", "challengePassword");
R("1.2.840.113549.1.9.8", "unstructuredAddress");
R("1.2.840.113549.1.9.14", "extensionRequest");
R("1.2.840.113549.1.9.20", "friendlyName");
R("1.2.840.113549.1.9.21", "localKeyId");
R("1.2.840.113549.1.9.22.1", "x509Certificate");
R("1.2.840.113549.1.12.10.1.1", "keyBag");
R("1.2.840.113549.1.12.10.1.2", "pkcs8ShroudedKeyBag");
R("1.2.840.113549.1.12.10.1.3", "certBag");
R("1.2.840.113549.1.12.10.1.4", "crlBag");
R("1.2.840.113549.1.12.10.1.5", "secretBag");
R("1.2.840.113549.1.12.10.1.6", "safeContentsBag");
R("1.2.840.113549.1.5.13", "pkcs5PBES2");
R("1.2.840.113549.1.5.12", "pkcs5PBKDF2");
R("1.2.840.113549.1.12.1.1", "pbeWithSHAAnd128BitRC4");
R("1.2.840.113549.1.12.1.2", "pbeWithSHAAnd40BitRC4");
R("1.2.840.113549.1.12.1.3", "pbeWithSHAAnd3-KeyTripleDES-CBC");
R("1.2.840.113549.1.12.1.4", "pbeWithSHAAnd2-KeyTripleDES-CBC");
R("1.2.840.113549.1.12.1.5", "pbeWithSHAAnd128BitRC2-CBC");
R("1.2.840.113549.1.12.1.6", "pbewithSHAAnd40BitRC2-CBC");
R("1.2.840.113549.2.7", "hmacWithSHA1");
R("1.2.840.113549.2.8", "hmacWithSHA224");
R("1.2.840.113549.2.9", "hmacWithSHA256");
R("1.2.840.113549.2.10", "hmacWithSHA384");
R("1.2.840.113549.2.11", "hmacWithSHA512");
R("1.2.840.113549.3.7", "des-EDE3-CBC");
R("2.16.840.1.101.3.4.1.2", "aes128-CBC");
R("2.16.840.1.101.3.4.1.22", "aes192-CBC");
R("2.16.840.1.101.3.4.1.42", "aes256-CBC");
R("2.5.4.3", "commonName");
R("2.5.4.4", "surname");
R("2.5.4.5", "serialNumber");
R("2.5.4.6", "countryName");
R("2.5.4.7", "localityName");
R("2.5.4.8", "stateOrProvinceName");
R("2.5.4.9", "streetAddress");
R("2.5.4.10", "organizationName");
R("2.5.4.11", "organizationalUnitName");
R("2.5.4.12", "title");
R("2.5.4.13", "description");
R("2.5.4.15", "businessCategory");
R("2.5.4.17", "postalCode");
R("2.5.4.42", "givenName");
R("1.3.6.1.4.1.311.60.2.1.2", "jurisdictionOfIncorporationStateOrProvinceName");
R("1.3.6.1.4.1.311.60.2.1.3", "jurisdictionOfIncorporationCountryName");
R("2.16.840.1.113730.1.1", "nsCertType");
R("2.16.840.1.113730.1.13", "nsComment");
te("2.5.29.1", "authorityKeyIdentifier");
te("2.5.29.2", "keyAttributes");
te("2.5.29.3", "certificatePolicies");
te("2.5.29.4", "keyUsageRestriction");
te("2.5.29.5", "policyMapping");
te("2.5.29.6", "subtreesConstraint");
te("2.5.29.7", "subjectAltName");
te("2.5.29.8", "issuerAltName");
te("2.5.29.9", "subjectDirectoryAttributes");
te("2.5.29.10", "basicConstraints");
te("2.5.29.11", "nameConstraints");
te("2.5.29.12", "policyConstraints");
te("2.5.29.13", "basicConstraints");
R("2.5.29.14", "subjectKeyIdentifier");
R("2.5.29.15", "keyUsage");
te("2.5.29.16", "privateKeyUsagePeriod");
R("2.5.29.17", "subjectAltName");
R("2.5.29.18", "issuerAltName");
R("2.5.29.19", "basicConstraints");
te("2.5.29.20", "cRLNumber");
te("2.5.29.21", "cRLReason");
te("2.5.29.22", "expirationDate");
te("2.5.29.23", "instructionCode");
te("2.5.29.24", "invalidityDate");
te("2.5.29.25", "cRLDistributionPoints");
te("2.5.29.26", "issuingDistributionPoint");
te("2.5.29.27", "deltaCRLIndicator");
te("2.5.29.28", "issuingDistributionPoint");
te("2.5.29.29", "certificateIssuer");
te("2.5.29.30", "nameConstraints");
R("2.5.29.31", "cRLDistributionPoints");
R("2.5.29.32", "certificatePolicies");
te("2.5.29.33", "policyMappings");
te("2.5.29.34", "policyConstraints");
R("2.5.29.35", "authorityKeyIdentifier");
te("2.5.29.36", "policyConstraints");
R("2.5.29.37", "extKeyUsage");
te("2.5.29.46", "freshestCRL");
te("2.5.29.54", "inhibitAnyPolicy");
R("1.3.6.1.4.1.11129.2.4.2", "timestampList");
R("1.3.6.1.5.5.7.1.1", "authorityInfoAccess");
R("1.3.6.1.5.5.7.3.1", "serverAuth");
R("1.3.6.1.5.5.7.3.2", "clientAuth");
R("1.3.6.1.5.5.7.3.3", "codeSigning");
R("1.3.6.1.5.5.7.3.4", "emailProtection");
R("1.3.6.1.5.5.7.3.8", "timeStamping");
var fe = z, U = fe.asn1 = fe.asn1 || {};
U.Class = {
UNIVERSAL: 0,
APPLICATION: 64,
CONTEXT_SPECIFIC: 128,
PRIVATE: 192
};
U.Type = {
NONE: 0,
BOOLEAN: 1,
INTEGER: 2,
BITSTRING: 3,
OCTETSTRING: 4,
NULL: 5,
OID: 6,
ODESC: 7,
EXTERNAL: 8,
REAL: 9,
ENUMERATED: 10,
EMBEDDED: 11,
UTF8: 12,
ROID: 13,
SEQUENCE: 16,
SET: 17,
PRINTABLESTRING: 19,
IA5STRING: 22,
UTCTIME: 23,
GENERALIZEDTIME: 24,
BMPSTRING: 30
};
U.maxDepth = 256;
U.create = function(e, t, a, r, i) {
if (fe.util.isArray(r)) {
for (var s = [], n = 0; n < r.length; ++n)
r[n] !== void 0 && s.push(r[n]);
r = s;
}
var o = {
tagClass: e,
type: t,
constructed: a,
composed: a || fe.util.isArray(r),
value: r
};
return i && "bitStringContents" in i && (o.bitStringContents = i.bitStringContents, o.original = U.copy(o)), o;
};
U.copy = function(e, t) {
var a;
if (fe.util.isArray(e)) {
a = [];
for (var r = 0; r < e.length; ++r)
a.push(U.copy(e[r], t));
return a;
}
return typeof e == "string" ? e : (a = {
tagClass: e.tagClass,
type: e.type,
constructed: e.constructed,
composed: e.composed,
value: U.copy(e.value, t)
}, t && !t.excludeBitStringContents && (a.bitStringContents = e.bitStringContents), a);
};
U.equals = function(e, t, a) {
if (fe.util.isArray(e)) {
if (!fe.util.isArray(t) || e.length !== t.length)
return !1;
for (var r = 0; r < e.length; ++r)
if (!U.equals(e[r], t[r]))
return !1;
return !0;
}
if (typeof e != typeof t)
return !1;
if (typeof e == "string")
return e === t;
var i = e.tagClass === t.tagClass && e.type === t.type && e.constructed === t.constructed && e.composed === t.composed && U.equals(e.value, t.value);
return a && a.includeBitStringContents && (i = i && e.bitStringContents === t.bitStringContents), i;
};
U.getBerValueLength = function(e) {
var t = e.getByte();
if (t !== 128) {
var a, r = t & 128;
return r ? a = e.getInt((t & 127) << 3) : a = t, a;
}
};
function Xt(e, t, a) {
if (a > t) {
var r = new Error("Too few bytes to parse DER.");
throw r.available = e.length(), r.remaining = t, r.requested = a, r;
}
}
var Wi = function(e, t) {
var a = e.getByte();
if (t--, a !== 128) {
var r, i = a & 128;
if (!i)
r = a;
else {
var s = a & 127;
Xt(e, t, s), r = e.getInt(s << 3);
}
if (r < 0)
throw new Error("Negative length: " + r);
return r;
}
};
U.fromDer = function(e, t) {
t === void 0 && (t = {
strict: !0,
parseAllBytes: !0,
decodeBitStrings: !0
}), typeof t == "boolean" && (t = {
strict: t,
parseAllBytes: !0,
decodeBitStrings: !0
}), "strict" in t || (t.strict = !0), "parseAllBytes" in t || (t.parseAllBytes = !0), "decodeBitStrings" in t || (t.decodeBitStrings = !0), "maxDepth" in t || (t.maxDepth = U.maxDepth), typeof e == "string" && (e = fe.util.createBuffer(e));
var a = e.length(), r = or(e, e.length(), 0, t);
if (t.parseAllBytes && e.length() !== 0) {
var i = new Error("Unparsed DER bytes remain after ASN.1 parsing.");
throw i.byteCount = a, i.remaining = e.length(), i;
}
return r;
};
function or(e, t, a, r) {
if (a >= r.maxDepth)
throw new Error("ASN.1 parsing error: Max depth exceeded.");
var i;
Xt(e, t, 2);
var s = e.getByte();
t--;
var n = s & 192, o = s & 31;
i = e.length();
var f = Wi(e, t);
if (t -= i - e.length(), f !== void 0 && f > t) {
if (r.strict) {
var u = new Error("Too few bytes to read ASN.1 value.");
throw u.available = e.length(), u.remaining = t, u.requested = f, u;
}
f = t;
}
var l, c, v = (s & 32) === 32;
if (v)
if (l = [], f === void 0)
for (; ; ) {
if (Xt(e, t, 2), e.bytes(2) === String.fromCharCode(0, 0)) {
e.getBytes(2), t -= 2;
break;
}
i = e.length(), l.push(or(e, t, a + 1, r)), t -= i - e.length();
}
else
for (; f > 0; )
i = e.length(), l.push(or(e, f, a + 1, r)), t -= i - e.length(), f -= i - e.length();
if (l === void 0 && n === U.Class.UNIVERSAL && o === U.Type.BITSTRING && (c = e.bytes(f)), l === void 0 && r.decodeBitStrings && n === U.Class.UNIVERSAL && // FIXME: OCTET STRINGs not yet supported here
// .. other parts of forge expect to decode OCTET STRINGs manually
o === U.Type.BITSTRING && f > 1) {
var C = e.read, y = t, x = 0;
if (o === U.Type.BITSTRING && (Xt(e, t, 1), x = e.getByte(), t--), x === 0)
try {
i = e.length();
var T = {
// enforce strict mode to avoid parsing ASN.1 from plain data
strict: !0,
decodeBitStrings: !0
}, I = or(e, t, a + 1, T), B = i - e.length();
t -= B, o == U.Type.BITSTRING && B++;
var b = I.tagClass;
B === f && (b === U.Class.UNIVERSAL || b === U.Class.CONTEXT_SPECIFIC) && (l = [I]);
} catch {
}
l === void 0 && (e.read = C, t = y);
}
if (l === void 0) {
if (f === void 0) {
if (r.strict)
throw new Error("Non-constructed ASN.1 object of indefinite length.");
f = t;
}
if (o === U.Type.BMPSTRING)
for (l = ""; f > 0; f -= 2)
Xt(e, t, 2), l += String.fromCharCode(e.getInt16()), t -= 2;
else
l = e.getBytes(f), t -= f;
}
var V = c === void 0 ? null : {
bitStringContents: c
};
return U.create(n, o, v, l, V);
}
U.toDer = function(e) {
var t = fe.util.createBuffer(), a = e.tagClass | e.type, r = fe.util.createBuffer(), i = !1;
if ("bitStringContents" in e && (i = !0, e.original && (i = U.equals(e, e.original))), i)
r.putBytes(e.bitStringContents);
else if (e.composed) {
e.constructed ? a |= 32 : r.putByte(0);
for (var s = 0; s < e.value.length; ++s)
e.value[s] !== void 0 && r.putBuffer(U.toDer(e.value[s]));
} else if (e.type === U.Type.BMPSTRING)
for (var s = 0; s < e.value.length; ++s)
r.putInt16(e.value.charCodeAt(s));
else
e.type === U.Type.INTEGER && e.value.length > 1 && // leading 0x00 for positive integer
(e.value.charCodeAt(0) === 0 && !(e.value.charCodeAt(1) & 128) || // leading 0xFF for negative integer
e.value.charCodeAt(0) === 255 && (e.value.charCodeAt(1) & 128) === 128) ? r.putBytes(e.value.substr(1)) : r.putBytes(e.value);
if (t.putByte(a), r.length() <= 127)
t.putByte(r.length() & 127);
else {
var n = r.length(), o = "";
do
o += String.fromCharCode(n & 255), n = n >>> 8;
while (n > 0);
t.putByte(o.length | 128);
for (var s = o.length - 1; s >= 0; --s)
t.putByte(o.charCodeAt(s));
}
return t.putBuffer(r), t;
};
U.oidToDer = function(e) {
var t = e.split("."), a = fe.util.createBuffer();
a.putByte(40 * parseInt(t[0], 10) + parseInt(t[1], 10));
for (var r, i, s, n, o = 2; o < t.length; ++o) {
if (r = !0, i = [], s = parseInt(t[o], 10), s > 4294967295)
throw new Error("OID value too large; max is 32-bits.");
do
n = s & 127, s = s >>> 7, r || (n |= 128), i.push(n), r = !1;
while (s > 0);
for (var f = i.length - 1; f >= 0; --f)
a.putByte(i[f]);
}
return a;
};
U.derToOid = function(e) {
var t;
typeof e == "string" && (e = fe.util.createBuffer(e));
var a = e.getByte();
t = Math.floor(a / 40) + "." + a % 40;
for (var r = 0; e.length() > 0; ) {
if (r > 70368744177663)
throw new Error("OID value too large; max is 53-bits.");
a = e.getByte(), r = r * 128, a & 128 ? r += a & 127 : (t += "." + (r + a), r = 0);
}
return t;
};
U.utcTimeToDate = function(e) {
var t = /* @__PURE__ */ new Date(), a = parseInt(e.substr(0, 2), 10);
a = a >= 50 ? 1900 + a : 2e3 + a;
var r = parseInt(e.substr(2, 2), 10) - 1, i = parseInt(e.substr(4, 2), 10), s = parseInt(e.substr(6, 2), 10), n = parseInt(e.substr(8, 2), 10), o = 0;
if (e.length > 11) {
var f = e.charAt(10), u = 10;
f !== "+" && f !== "-" && (o = parseInt(e.substr(10, 2), 10), u += 2);
}
if (t.setUTCFullYear(a, r, i), t.setUTCHours(s, n, o, 0), u && (f = e.charAt(u), f === "+" || f === "-")) {
var l = parseInt(e.substr(u + 1, 2), 10), c = parseInt(e.substr(u + 4, 2), 10), v = l * 60 + c;
v *= 6e4, f === "+" ? t.setTime(+t - v) : t.setTime(+t + v);
}
return t;
};
U.generalizedTimeToDate = function(e) {
var t = /* @__PURE__ */ new Date(), a = parseInt(e.substr(0, 4), 10), r = parseInt(e.substr(4, 2), 10) - 1, i = parseInt(e.substr(6, 2), 10), s = parseInt(e.substr(8, 2), 10), n = parseInt(e.substr(10, 2), 10), o = parseInt(e.substr(12, 2), 10), f = 0, u = 0, l = !1;
e.charAt(e.length - 1) === "Z" && (l = !0);
var c = e.length - 5, v = e.charAt(c);
if (v === "+" || v === "-") {
var C = parseInt(e.substr(c + 1, 2), 10), y = parseInt(e.substr(c + 4, 2), 10);
u = C * 60 + y, u *= 6e4, v === "+" && (u *= -1), l = !0;
}
return e.charAt(14) === "." && (f = parseFloat(e.substr(14), 10) * 1e3), l ? (t.setUTCFullYear(a, r, i), t.setUTCHours(s, n, o, f), t.setTime(+t + u)) : (t.setFullYear(a, r, i), t.setHours(s, n, o, f)), t;
};
U.dateToUtcTime = function(e) {
if (typeof e == "string")
return e;
var t = "", a = [];
a.push(("" + e.getUTCFullYear()).substr(2)), a.push("" + (e.getUTCMonth() + 1)), a.push("" + e.getUTCDate()), a.push("" + e.getUTCHours()), a.push("" + e.getUTCMinutes()), a.push("" + e.getUTCSeconds());
for (var r = 0; r < a.length; ++r)
a[r].length < 2 && (t += "0"), t += a[r];
return t += "Z", t;
};
U.dateToGeneralizedTime = function(e) {
if (typeof e == "string")
return e;
var t = "", a = [];
a.push("" + e.getUTCFullYear()), a.push("" + (e.getUTCMonth() + 1)), a.push("" + e.getUTCDate()), a.push("" + e.getUTCHours()), a.push("" + e.getUTCMinutes()), a.push("" + e.getUTCSeconds());
for (var r = 0; r < a.length; ++r)
a[r].length < 2 && (t += "0"), t += a[r];
return t += "Z", t;
};
U.integerToDer = function(e) {
var t = fe.util.createBuffer();
if (e >= -128 && e < 128)
return t.putSignedInt(e, 8);
if (e >= -32768 && e < 32768)
return t.putSignedInt(e, 16);
if (e >= -8388608 && e < 8388608)
return t.putSignedInt(e, 24);
if (e >= -2147483648 && e < 2147483648)
return t.putSignedInt(e, 32);
var a = new Error("Integer too large; max is 32-bits.");
throw a.integer = e, a;
};
U.derToInteger = function(e) {
typeof e == "string" && (e = fe.util.createBuffer(e));
var t = e.length() * 8;
if (t > 32)
throw new Error("Integer too large; max is 32-bits.");
return e.getSignedInt(t);
};
U.validate = function(e, t, a, r) {
var i = !1;
if ((e.tagClass === t.tagClass || typeof t.tagClass > "u") && (e.type === t.type || typeof t.type > "u"))
if (e.constructed === t.constructed || typeof t.constructed > "u") {
if (i = !0, t.value && fe.util.isArray(t.value))
for (var s = 0, n = 0; i && n < t.value.length; ++n) {
var o = t.value[n];
i = !!o.optional;
var f = e.value[s];
if (!f) {
o.optional || (i = !1, r && r.push("[" + t.name + '] Missing required element. Expected tag class "' + o.tagClass + '", type "' + o.type + '"'));
continue;
}
var u = typeof o.tagClass < "u" && typeof o.type < "u";
if (u && (f.tagClass !== o.tagClass || f.type !== o.type))
if (o.optional) {
i = !0;
continue;
} else {
i = !1, r && r.push("[" + t.name + "] Tag mismatch. Expected (" + o.tagClass + "," + o.type + "), got (" + f.tagClass + "," + f.type + ")");
break;
}
var l = U.validate(f, o, a, r);
if (l)
++s, i = !0;
else if (o.optional)
i = !0;
else {
i = !1;
break;
}
}
if (i && a && (t.capture && (a[t.capture] = e.value), t.captureAsn1 && (a[t.captureAsn1] = e), t.captureBitStringContents && "bitStringContents" in e && (a[t.captureBitStringContents] = e.bitStringContents), t.captureBitStringValue && "bitStringContents" in e))
if (e.bitStringContents.length < 2)
a[t.captureBitStringValue] = "";
else {
var c = e.bitStringContents.charCodeAt(0);
if (c !== 0)
throw new Error(
"captureBitStringValue only supported for zero unused bits"
);
a[t.captureBitStringValue] = e.bitStringContents.slice(1);
}
} else
r && r.push(
"[" + t.name + '] Expected constructed "' + t.constructed + '", got "' + e.constructed + '"'
);
else
r && (e.tagClass !== t.tagClass && r.push(
"[" + t.name + '] Expected tag class "' + t.tagClass + '", got "' + e.tagClass + '"'
), e.type !== t.type && r.push(
"[" + t.name + '] Expected type "' + t.type + '", got "' + e.type + '"'
));
return i;
};
var Sa = /[^\\u0000-\\u00ff]/;
U.prettyPrint = function(e, t, a) {
var r = "";
t = t || 0, a = a || 2, t > 0 && (r += `
`);
for (var i = "", s = 0; s < t * a; ++s)
i += " ";
switch (r += i + "Tag: ", e.tagClass) {
case U.Class.UNIVERSAL:
r += "Universal:";
break;
case U.Class.APPLICATION:
r += "Application:";
break;
case U.Class.CONTEXT_SPECIFIC:
r += "Context-Specific:";
break;
case U.Class.PRIVATE:
r += "Private:";
break;
}
if (e.tagClass === U.Class.UNIVERSAL)
switch (r += e.type, e.type) {
case U.Type.NONE:
r += " (None)";
break;
case U.Type.BOOLEAN:
r += " (Boolean)";
break;
case U.Type.INTEGER:
r += " (Integer)";
break;
case U.Type.BITSTRING:
r += " (Bit string)";
break;
case U.Type.OCTETSTRING:
r += " (Octet string)";
break;
case U.Type.NULL:
r += " (Null)";
break;
case U.Type.OID:
r += " (Object Identifier)";
break;
case U.Type.ODESC:
r += " (Object Descriptor)";
break;
case U.Type.EXTERNAL:
r += " (External or Instance of)";
break;
case U.Type.REAL:
r += " (Real)";
break;
case U.Type.ENUMERATED:
r += " (Enumerated)";
break;
case U.Type.EMBEDDED:
r += " (Embedded PDV)";
break;
case U.Type.UTF8:
r += " (UTF8)";
break;
case U.Type.ROID:
r += " (Relative Object Identifier)";
break;
case U.Type.SEQUENCE:
r += " (Sequence)";
break;
case U.Type.SET:
r += " (Set)";
break;
case U.Type.PRINTABLESTRING:
r += " (Printable String)";
break;
case U.Type.IA5String:
r += " (IA5String (ASCII))";
break;
case U.Type.UTCTIME:
r += " (UTC time)";
break;
case U.Type.GENERALIZEDTIME:
r += " (Generalized time)";
break;
case U.Type.BMPSTRING:
r += " (BMP String)";
break;
}
else
r += e.type;
if (r += `
`, r += i + "Constructed: " + e.constructed + `
`, e.composed) {
for (var n = 0, o = "", s = 0; s < e.value.length; ++s)
e.value[s] !== void 0 && (n += 1, o += U.prettyPrint(e.value[s], t + 1, a), s + 1 < e.value.length && (o += ","));
r += i + "Sub values: " + n + o;
} else {
if (r += i + "Value: ", e.type === U.Type.OID) {
var f = U.derToOid(e.value);
r += f, fe.pki && fe.pki.oids && f in fe.pki.oids && (r += " (" + fe.pki.oids[f] + ") ");
}
if (e.type === U.Type.INTEGER)
try {
r += U.derToInteger(e.value);
} catch {
r += "0x" + fe.util.bytesToHex(e.value);
}
else if (e.type === U.Type.BITSTRING) {
if (e.value.length > 1 ? r += "0x" + fe.util.bytesToHex(e.value.slice(1)) : r += "(none)", e.value.length > 0) {
var u = e.value.charCodeAt(0);
u == 1 ? r += " (1 unused bit shown)" : u > 1 && (r += " (" + u + " unused bits shown)");
}
} else if (e.type === U.Type.OCTETSTRING)
Sa.test(e.value) || (r += "(" + e.value + ") "), r += "0x" + fe.util.bytesToHex(e.value);
else if (e.type === U.Type.UTF8)
try {
r += fe.util.decodeUtf8(e.value);
} catch (l) {
if (l.message === "URI malformed")
r += "0x" + fe.util.bytesToHex(e.value) + " (malformed UTF8)";
else
throw l;
}
else
e.type === U.Type.PRINTABLESTRING || e.type === U.Type.IA5String ? r += e.value : Sa.test(e.value) ? r += "0x" + fe.util.bytesToHex(e.value) : e.value.length === 0 ? r += "[null]" : r += e.value;
}
return r;
};
var lr = z;
lr.md = lr.md || {};
lr.md.algorithms = lr.md.algorithms || {};
var ct = z, ji = ct.hmac = ct.hmac || {};
ji.create = function() {
var e = null, t = null, a = null, r = null, i = {};
return i.start = function(s, n) {
if (s !== null)
if (typeof s == "string")
if (s = s.toLowerCase(), s in ct.md.algorithms)
t = ct.md.algorithms[s].create();
else
throw new Error('Unknown hash algorithm "' + s + '"');
else
t = s;
if (n === null)
n = e;
else {
if (typeof n == "string")
n = ct.util.createBuffer(n);
else if (ct.util.isArray(n)) {
var o = n;
n = ct.util.createBuffer();
for (var f = 0; f < o.length; ++f)
n.putByte(o[f]);
}
var u = n.length();
u > t.blockLength && (t.start(), t.update(n.bytes()), n = t.digest()), a = ct.util.createBuffer(), r = ct.util.createBuffer(), u = n.length();
for (var f = 0; f < u; ++f) {
var o = n.at(f);
a.putByte(54 ^ o), r.putByte(92 ^ o);
}
if (u < t.blockLength)
for (var o = t.blockLength - u, f = 0; f < o; ++f)
a.putByte(54), r.putByte(92);
e = n, a = a.bytes(), r = r.bytes();
}
t.start(), t.update(a);
}, i.update = function(s) {
t.update(s);
}, i.getMac = function() {
var s = t.digest().bytes();
return t.start(), t.update(r), t.update(s), t.digest();
}, i.digest = i.getMac, i;
};
var nt = z, ja = nt.md5 = nt.md5 || {};
nt.md.md5 = nt.md.algorithms.md5 = ja;
ja.create = function() {
$a || $i();
var e = null, t = nt.util.createBuffer(), a = new Array(16), r = {
algorithm: "md5",
blockLength: 64,
digestLength: 16,
// 56-bit length of message so far (does not including padding)
messageLength: 0,
// true message length
fullMessageLength: null,
// size of message length in bytes
messageLengthSize: 8
};
return r.start = function() {
r.messageLength = 0, r.fullMessageLength = r.messageLength64 = [];
for (var i = r.messageLengthSize / 4, s = 0; s < i; ++s)
r.fullMessageLength.push(0);
return t = nt.util.createBuffer(), e = {
h0: 1732584193,
h1: 4023233417,
h2: 2562383102,
h3: 271733878
}, r;
}, r.start(), r.update = function(i, s) {
s === "utf8" && (i = nt.util.encodeUtf8(i));
var n = i.length;
r.messageLength += n, n = [n / 4294967296 >>> 0, n >>> 0];
for (var o = r.fullMessageLength.length - 1; o >= 0; --o)
r.fullMessageLength[o] += n[1], n[1] = n[0] + (r.fullMessageLength[o] / 4294967296 >>> 0), r.fullMessageLength[o] = r.fullMessageLength[o] >>> 0, n[0] = n[1] / 4294967296 >>> 0;
return t.putBytes(i), Ta(e, a, t), (t.read > 2048 || t.length() === 0) && t.compact(), r;
}, r.digest = function() {
var i = nt.util.createBuffer();
i.putBytes(t.bytes());
var s = r.fullMessageLength[r.fullMessageLength.length - 1] + r.messageLengthSize, n = s & r.blockLength - 1;
i.putBytes(Kr.substr(0, r.blockLength - n));
for (var o, f = 0, u = r.fullMessageLength.length - 1; u >= 0; --u)
o = r.fullMessageLength[u] * 8 + f, f = o / 4294967296 >>> 0, i.putInt32Le(o >>> 0);
var l = {
h0: e.h0,
h1: e.h1,
h2: e.h2,
h3: e.h3
};
Ta(l, a, i);
var c = nt.util.createBuffer();
return c.putInt32Le(l.h0), c.putInt32Le(l.h1), c.putInt32Le(l.h2), c.putInt32Le(l.h3), c;
}, r;
};
var Kr = null, ur = null, Wt = null, Pt = null, $a = !1;
function $i() {
Kr = String.fromCharCode(128), Kr += nt.util.fillString(String.fromCharCode(0), 64), ur = [
0,
1,
2,
3,
4,
5,
6,
7,
8,
9,
10,
11,
12,
13,
14,
15,
1,
6,
11,
0,
5,
10,
15,
4,
9,
14,
3,
8,
13,
2,
7,
12,
5,
8,
11,
14,
1,
4,
7,
10,
13,
0,
3,
6,
9,
12,
15,
2,
0,
7,
14,
5,
12,
3,
10,
1,
8,
15,
6,
13,
4,
11,
2,
9
], Wt = [
7,
12,
17,
22,
7,
12,
17,
22,
7,
12,
17,
22,
7,
12,
17,
22,
5,
9,
14,
20,
5,
9,
14,
20,
5,
9,
14,
20,
5,
9,
14,
20,
4,
11,
16,
23,
4,
11,
16,
23,
4,
11,
16,
23,
4,
11,
16,
23,
6,
10,
15,
21,
6,
10,
15,
21,
6,
10,
15,
21,
6,
10,
15,
21
], Pt = new Array(64);
for (var e = 0; e < 64; ++e)
Pt[e] = Math.floor(Math.abs(Math.sin(e + 1)) * 4294967296);
$a = !0;
}
function Ta(e, t, a) {
for (var r, i, s, n, o, f, u, l, c = a.length(); c >= 64; ) {
for (i = e.h0, s = e.h1, n = e.h2, o = e.h3, l = 0; l < 16; ++l)
t[l] = a.getInt32Le(), f = o ^ s & (n ^ o), r = i + f + Pt[l] + t[l], u = Wt[l], i = o, o = n, n = s, s += r << u | r >>> 32 - u;
for (; l < 32; ++l)
f = n ^ o & (s ^ n), r = i + f + Pt[l] + t[ur[l]], u = Wt[l], i = o, o = n, n = s, s += r << u | r >>> 32 - u;
for (; l < 48; ++l)
f = s ^ n ^ o, r = i + f + Pt[l] + t[ur[l]], u = Wt[l], i = o, o = n, n = s, s += r << u | r >>> 32 - u;
for (; l < 64; ++l)
f = n ^ (s | ~o), r = i + f + Pt[l] + t[ur[l]], u = Wt[l], i = o, o = n, n = s, s += r << u | r >>> 32 - u;
e.h0 = e.h0 + i | 0, e.h1 = e.h1 + s | 0, e.h2 = e.h2 + n | 0, e.h3 = e.h3 + o | 0, c -= 64;
}
}
var cr = z, Za = cr.pem = cr.pem || {};
Za.encode = function(e, t) {
t = t || {};
var a = "-----BEGIN " + e.type + `-----\r
`, r;
if (e.procType && (r = {
name: "Proc-Type",
values: [String(e.procType.version), e.procType.type]
}, a += ar(r)), e.contentDomain && (r = { name: "Content-Domain", values: [e.contentDomain] }, a += ar(r)), e.dekInfo && (r = { name: "DEK-Info", values: [e.dekInfo.algorithm] }, e.dekInfo.parameters && r.values.push(e.dekInfo.parameters), a += ar(r)), e.headers)
for (var i = 0; i < e.headers.length; ++i)
a += ar(e.headers[i]);
return e.procType && (a += `\r
`), a += cr.util.encode64(e.body, t.maxline || 64) + `\r
`, a += "-----END " + e.type + `-----\r
`, a;
};
Za.decode = function(e) {
for (var t = [], a = /\s*-----BEGIN ([A-Z0-9- ]+)-----\r?\n?([\x21-\x7e\s]+?(?:\r?\n\r?\n))?([:A-Za-z0-9+\/=\s]+?)-----END \1-----/g, r = /([\x21-\x7e]+):\s*([\x21-\x7e\s^:]+)/, i = /\r?\n/, s; s = a.exec(e), !!s; ) {
var n = s[1];
n === "NEW CERTIFICATE REQUEST" && (n = "CERTIFICATE REQUEST");
var o = {
type: n,
procType: null,
contentDomain: null,
dekInfo: null,
headers: [],
body: cr.util.decode64(s[3])
};
if (t.push(o), !!s[2]) {
for (var f = s[2].split(i), u = 0; s && u < f.length; ) {
for (var l = f[u].replace(/\s+$/, ""), c = u + 1; c < f.length; ++c) {
var v = f[c];
if (!/\s/.test(v[0]))
break;
l += v, u = c;
}
if (s = l.match(r), s) {
for (var C = { name: s[1], values: [] }, y = s[2].split(","), x = 0; x < y.length; ++x)
C.values.push(Zi(y[x]));
if (o.procType)
if (!o.contentDomain && C.name === "Content-Domain")
o.contentDomain = y[0] || "";
else if (!o.dekInfo && C.name === "DEK-Info") {
if (C.values.length === 0)
throw new Error('Invalid PEM formatted message. The "DEK-Info" header must have at least one subfield.');
o.dekInfo = { algorithm: y[0], parameters: y[1] || null };
} else
o.headers.push(C);
else {
if (C.name !== "Proc-Type")
throw new Error('Invalid PEM formatted message. The first encapsulated header must be "Proc-Type".');
if (C.values.length !== 2)
throw new Error('Invalid PEM formatted message. The "Proc-Type" header must have two subfields.');
o.procType = { version: y[0], type: y[1] };
}
}
++u;
}
if (o.procType === "ENCRYPTED" && !o.dekInfo)
throw new Error('Invalid PEM formatted message. The "DEK-Info" header must be present if "Proc-Type" is "ENCRYPTED".');
}
}
if (t.length === 0)
throw new Error("Invalid PEM formatted message.");
return t;
};
function ar(e) {
for (var t = e.name + ": ", a = [], r = function(f, u) {
return " " + u;
}, i = 0; i < e.values.length; ++i)
a.push(e.values[i].replace(/^(\S+\r\n)/, r));
t += a.join(",") + `\r
`;
for (var s = 0, n = -1, i = 0; i < t.length; ++i, ++s)
if (s > 65 && n !== -1) {
var o = t[n];
o === "," ? (++n, t = t.substr(0, n) + `\r
` + t.substr(n)) : t = t.substr(0, n) + `\r
` + o + t.substr(n + 1), s = i - n - 1, n = -1, ++i;
} else
(t[i] === " " || t[i] === " " || t[i] === ",") && (n = i);
return t;
}
function Zi(e) {
return e.replace(/^\s+/, "");
}
var ce = z;
ce.des = ce.des || {};
ce.des.startEncrypting = function(e, t, a, r) {
var i = Ir({
key: e,
output: a,
decrypt: !1,
mode: r || (t === null ? "ECB" : "CBC")
});
return i.start(t), i;
};
ce.des.createEncryptionCipher = function(e, t) {
return Ir({
key: e,
output: null,
decrypt: !1,
mode: t
});
};
ce.des.startDecrypting = function(e, t, a, r) {
var i = Ir({
key: e,
output: a,
decrypt: !0,
mode: r || (t === null ? "ECB" : "CBC")
});
return i.start(t), i;
};
ce.des.createDecryptionCipher = function(e, t) {
return Ir({
key: e,
output: null,
decrypt: !0,
mode: t
});
};
ce.des.Algorithm = function(e, t) {
var a = this;
a.name = e, a.mode = new t({
blockSize: 8,
cipher: {
encrypt: function(r, i) {
return Ia(a._keys, r, i, !1);
},
decrypt: function(r, i) {
return Ia(a._keys, r, i, !0);
}
}
}), a._init = !1;
};
ce.des.Algorithm.prototype.initialize = function(e) {
if (!this._init) {
var t = ce.util.createBuffer(e.key);
if (this.name.indexOf("3DES") === 0 && t.length() !== 24)
throw new Error("Invalid Triple-DES key size: " + t.length() * 8);
this._keys = un(t), this._init = !0;
}
};
ft("DES-ECB", ce.cipher.modes.ecb);
ft("DES-CBC", ce.cipher.modes.cbc);
ft("DES-CFB", ce.cipher.modes.cfb);
ft("DES-OFB", ce.cipher.modes.ofb);
ft("DES-CTR", ce.cipher.modes.ctr);
ft("3DES-ECB", ce.cipher.modes.ecb);
ft("3DES-CBC", ce.cipher.modes.cbc);
ft("3DES-CFB", ce.cipher.modes.cfb);
ft("3DES-OFB", ce.cipher.modes.ofb);
ft("3DES-CTR", ce.cipher.modes.ctr);
function ft(e, t) {
var a = function() {
return new ce.des.Algorithm(e, t);
};
ce.cipher.registerAlgorithm(e, a);
}
var Ji = [16843776, 0, 65536, 16843780, 16842756, 66564, 4, 65536, 1024, 16843776, 16843780, 1024, 16778244, 16842756, 16777216, 4, 1028, 16778240, 16778240, 66560, 66560, 16842752, 16842752, 16778244, 65540, 16777220, 16777220, 65540, 0, 1028, 66564, 16777216, 65536, 16843780, 4, 16842752, 16843776, 16777216, 16777216, 1024, 16842756, 65536, 66560, 16777220, 1024, 4, 16778244, 66564, 16843780, 65540, 16842752, 16778244, 16777220, 1028, 66564, 16843776, 1028, 16778240, 16778240, 0, 65540, 66560, 0, 16842756], en = [-2146402272, -2147450880, 32768, 1081376, 1048576, 32, -2146435040, -2147450848, -2147483616, -2146402272, -2146402304, -2147483648, -2147450880, 1048576, 32, -2146435040, 1081344, 1048608, -2147450848, 0, -2147483648, 32768, 1081376, -2146435072, 1048608, -2147483616, 0, 1081344, 32800, -2146402304, -2146435072, 32800, 0, 1081376, -2146435040, 1048576, -2147450848, -2146435072, -2146402304, 32768, -2146435072, -2147450880, 32, -2146402272, 1081376, 32, 32768, -2147483648, 32800, -2146402304, 1048576, -2147483616, 1048608, -2147450848, -2147483616, 1048608, 1081344, 0, -2147450880, 32800, -2147483648, -2146435040, -2146402272, 1081344], tn = [520, 134349312, 0, 134348808, 134218240, 0, 131592, 134218240, 131080, 134217736, 134217736, 131072, 134349320, 131080, 134348800, 520, 134217728, 8, 134349312, 512, 131584, 134348800, 134348808, 131592, 134218248, 131584, 131072, 134218248, 8, 134349320, 512, 134217728, 134349312, 134217728, 131080, 520, 131072, 134349312, 134218240, 0, 512, 131080, 134349320, 134218240, 134217736, 512, 0, 134348808, 134218248, 131072, 134217728, 134349320, 8, 131592, 131584, 134217736, 134348800, 134218248, 520, 134348800, 131592, 8, 134348808, 131584], rn = [8396801, 8321, 8321, 128, 8396928, 8388737, 8388609, 8193, 0, 8396800, 8396800, 8396929, 129, 0, 8388736, 8388609, 1, 8192, 8388608, 8396801, 128, 8388608, 8193, 8320, 8388737, 1, 8320, 8388736, 8192, 8396928, 8396929, 129, 8388736, 8388609, 8396800, 8396929, 129, 0, 0, 8396800, 8320, 8388736, 8388737, 1, 8396801, 8321, 8321, 128, 8396929, 129, 1, 8192, 8388609, 8193, 8396928, 8388737, 8193, 8320, 8388608, 8396801, 128, 8388608, 8192, 8396928], an = [256, 34078976, 34078720, 1107296512, 524288, 256, 1073741824, 34078720, 1074266368, 524288, 33554688, 1074266368, 1107296512, 1107820544, 524544, 1073741824, 33554432, 1074266112, 1074266112, 0, 1073742080, 1107820800, 1107820800, 33554688, 1107820544, 1073742080, 0, 1107296256, 34078976, 33554432, 1107296256, 524544, 524288, 1107296512, 256, 33554432, 1073741824, 34078720, 1107296512, 1074266368, 33554688, 1073741824, 1107820544, 34078976, 1074266368, 256, 33554432, 1107820544, 1107820800, 524544, 1107296256, 1107820800, 34078720, 0, 1074266112, 1107296256, 524544, 33554688, 1073742080, 524288, 0, 1074266112, 34078976, 1073742080], nn = [536870928, 541065216, 16384, 541081616, 541065216, 16, 541081616, 4194304, 536887296, 4210704, 4194304, 536870928, 4194320, 536887296, 536870912, 16400, 0, 4194320, 536887312, 16384, 4210688, 536887312, 16, 541065232, 541065232, 0, 4210704, 541081600, 16400, 4210688, 541081600, 536870912, 536887296, 16, 541065232, 4210688, 541081616, 4194304, 16400, 536870928, 4194304, 536887296, 536870912, 16400, 536870928, 541081616, 4210688, 541065216, 4210704, 541081600, 0, 541065232, 16, 16384, 541065216, 4210704, 16384, 4194320, 536887312, 0, 541081600, 536870912, 4194320, 536887312], sn = [2097152, 69206018, 67110914, 0, 2048, 67110914, 2099202, 69208064, 69208066, 2097152, 0, 67108866, 2, 67108864, 69206018, 2050, 67110912, 2099202, 2097154, 67110912, 67108866, 69206016, 69208064, 2097154, 69206016, 2048, 2050, 69208066, 2099200, 2, 67108864, 2099200, 67108864, 2099200, 2097152, 67110914, 67110914, 69206018, 69206018, 2, 2097154, 67108864, 67110912, 2097152, 69208064, 2050, 2099202, 69208064, 2050, 67108866, 69208066, 69206016, 2099200, 0, 2, 69208066, 0, 2099202, 69206016, 2048, 67108866, 67110912, 2048, 2097154], on = [268439616, 4096, 262144, 268701760, 268435456, 268439616, 64, 268435456, 262208, 268697600, 268701760, 266240, 268701696, 266304, 4096, 64, 268697600, 268435520, 268439552, 4160, 266240, 262208, 268697664, 268701696, 4160, 0, 0, 268697664, 268435520, 268439552, 266304, 262144, 266304, 262144, 268701696, 4096, 64, 268697664, 4096, 266304, 268439552, 64, 268435520, 268697600, 268697664, 268435456, 262144, 268439616, 0, 268701760, 262208, 268435520, 268697600, 268439552, 268439616, 0, 268701760, 266240, 266240, 4160, 4160, 262208, 268435456, 268701696];
function un(e) {
for (var t = [0, 4, 536870912, 536870916, 65536, 65540, 536936448, 536936452, 512, 516, 536871424, 536871428, 66048, 66052, 536936960, 536936964], a = [0, 1, 1048576, 1048577, 67108864, 67108865, 68157440, 68157441, 256, 257, 1048832, 1048833, 67109120, 67109121, 68157696, 68157697], r = [0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272, 0, 8, 2048, 2056, 16777216, 16777224, 16779264, 16779272], i = [0, 2097152, 134217728, 136314880, 8192, 2105344, 134225920, 136323072, 131072, 2228224, 134348800, 136445952, 139264, 2236416, 134356992, 136454144], s = [0, 262144, 16, 262160, 0, 262144, 16, 262160, 4096, 266240, 4112, 266256, 4096, 266240, 4112, 266256], n = [0, 1024, 32, 1056, 0, 1024, 32, 1056, 33554432, 33555456, 33554464, 33555488, 33554432, 33555456, 33554464, 33555488], o = [0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746, 0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746], f = [0, 65536, 2048, 67584, 536870912, 536936448, 536872960, 536938496, 131072, 196608, 133120, 198656, 537001984, 537067520, 537004032, 537069568], u = [0, 262144, 0, 262144, 2, 262146, 2, 262146, 33554432, 33816576, 33554432, 33816576, 33554434, 33816578, 33554434, 33816578], l = [0, 268435456, 8, 268435464, 0, 268435456, 8, 268435464, 1024, 268436480, 1032, 268436488, 1024, 268436480, 1032, 268436488], c = [0, 32, 0, 32, 1048576, 1048608, 1048576, 1048608, 8192, 8224, 8192, 8224, 1056768, 1056800, 1056768, 1056800], v = [0, 16777216, 512, 16777728, 2097152, 18874368, 2097664, 18874880, 67108864, 83886080, 67109376, 83886592, 69206016, 85983232, 69206528, 85983744], C = [0, 4096, 134217728, 134221824, 524288, 528384, 134742016, 134746112, 16, 4112, 134217744, 134221840, 524304, 528400, 134742032, 134746128], y = [0, 4, 256, 260, 0, 4, 256, 260, 1, 5, 257, 261, 1, 5, 257, 261], x = e.length() > 8 ? 3 : 1, T = [], I = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0], B = 0, b, V = 0; V < x; V++) {
var D = e.getInt32(), w = e.getInt32();
b = (D >>> 4 ^ w) & 252645135, w ^= b, D ^= b << 4, b = (w >>> -16 ^ D) & 65535, D ^= b, w ^= b << -16, b = (D >>> 2 ^ w) & 858993459, w ^= b, D ^= b << 2, b = (w >>> -16 ^ D) & 65535, D ^= b, w ^= b << -16, b = (D >>> 1 ^ w) & 1431655765, w ^= b, D ^= b << 1, b = (w >>> 8 ^ D) & 16711935, D ^= b, w ^= b << 8, b = (D >>> 1 ^ w) & 1431655765, w ^= b, D ^= b << 1, b = D << 8 | w >>> 20 & 240, D = w << 24 | w << 8 & 16711680 | w >>> 8 & 65280 | w >>> 24 & 240, w = b;
for (var G = 0; G < I.length; ++G) {
I[G] ? (D = D << 2 | D >>> 26, w = w << 2 | w >>> 26) : (D = D << 1 | D >>> 27, w = w << 1 | w >>> 27), D &= -15, w &= -15;
var Y = t[D >>> 28] | a[D >>> 24 & 15] | r[D >>> 20 & 15] | i[D >>> 16 & 15] | s[D >>> 12 & 15] | n[D >>> 8 & 15] | o[D >>> 4 & 15], re = f[w >>> 28] | u[w >>> 24 & 15] | l[w >>> 20 & 15] | c[w >>> 16 & 15] | v[w >>> 12 & 15] | C[w >>> 8 & 15] | y[w >>> 4 & 15];
b = (re >>> 16 ^ Y) & 65535, T[B++] = Y ^ b, T[B++] = re ^ b << 16;
}
}
return T;
}
function Ia(e, t, a, r) {
var i = e.length === 32 ? 3 : 9, s;
i === 3 ? s = r ? [30, -2, -2] : [0, 32, 2] : s = r ? [94, 62, -2, 32, 64, 2, 30, -2, -2] : [0, 32, 2, 62, 30, -2, 64, 96, 2];
var n, o = t[0], f = t[1];
n = (o >>> 4 ^ f) & 252645135, f ^= n, o ^= n << 4, n = (o >>> 16 ^ f) & 65535, f ^= n, o ^= n << 16, n = (f >>> 2 ^ o) & 858993459, o ^= n, f ^= n << 2, n = (f >>> 8 ^ o) & 16711935, o ^= n, f ^= n << 8, n = (o >>> 1 ^ f) & 1431655765, f ^= n, o ^= n << 1, o = o << 1 | o >>> 31, f = f << 1 | f >>> 31;
for (var u = 0; u < i; u += 3) {
for (var l = s[u + 1], c = s[u + 2], v = s[u]; v != l; v += c) {
var C = f ^ e[v], y = (f >>> 4 | f << 28) ^ e[v + 1];
n = o, o = f, f = n ^ (en[C >>> 24 & 63] | rn[C >>> 16 & 63] | nn[C >>> 8 & 63] | on[C & 63] | Ji[y >>> 24 & 63] | tn[y >>> 16 & 63] | an[y >>> 8 & 63] | sn[y & 63]);
}
n = o, o = f, f = n;
}
o = o >>> 1 | o << 31, f = f >>> 1 | f << 31, n = (o >>> 1 ^ f) & 1431655765, f ^= n, o ^= n << 1, n = (f >>> 8 ^ o) & 16711935, o ^= n, f ^= n << 8, n = (f >>> 2 ^ o) & 858993459, o ^= n, f ^= n << 2, n = (o >>> 16 ^ f) & 65535, f ^= n, o ^= n << 16, n = (o >>> 4 ^ f) & 252645135, f ^= n, o ^= n << 4, a[0] = o, a[1] = f;
}
function Ir(e) {
e = e || {};
var t = (e.mode || "CBC").toUpperCase(), a = "DES-" + t, r;
e.decrypt ? r = ce.cipher.createDecipher(a, e.key) : r = ce.cipher.createCipher(a, e.key);
var i = r.start;
return r.start = function(s, n) {
var o = null;
n instanceof ce.util.ByteBuffer && (o = n, n = {}), n = n || {}, n.output = o, n.iv = s, i.call(r, n);
}, r;
}
const fn = {}, ln = /* @__PURE__ */ Object.freeze(/* @__PURE__ */ Object.defineProperty({
__proto__: null,
default: fn
}, Symbol.toStringTag, { value: "Module" })), sa = /* @__PURE__ */ Ki(ln);
var Ke = z, cn = Ke.pkcs5 = Ke.pkcs5 || {}, lt;
Ke.util.isNodejs && !Ke.options.usePureJavaScript && (lt = sa);
Ke.pbkdf2 = cn.pbkdf2 = function(e, t, a, r, i, s) {
if (typeof i == "function" && (s = i, i = null), Ke.util.isNodejs && !Ke.options.usePureJavaScript && lt.pbkdf2 && (i === null || typeof i != "object") && (lt.pbkdf2Sync.length > 4 || !i || i === "sha1"))
return typeof i != "string" && (i = "sha1"), e = Buffer.from(e, "binary"), t = Buffer.from(t, "binary"), s ? lt.pbkdf2Sync.length === 4 ? lt.pbkdf2(e, t, a, r, function(b, V) {
if (b)
return s(b);
s(null, V.toString("binary"));
}) : lt.pbkdf2(e, t, a, r, i, function(b, V) {
if (b)
return s(b);
s(null, V.toString("binary"));
}) : lt.pbkdf2Sync.length === 4 ? lt.pbkdf2Sync(e, t, a, r).toString("binary") : lt.pbkdf2Sync(e, t, a, r, i).toString("binary");
if ((typeof i > "u" || i === null) && (i = "sha1"), typeof i == "string") {
if (!(i in Ke.md.algorithms))
throw new Error("Unknown hash algorithm: " + i);
i = Ke.md[i].create();
}
var n = i.digestLength;
if (r > 4294967295 * n) {
var o = new Error("Derived key is too long.");
if (s)
return s(o);
throw o;
}
var f = Math.ceil(r / n), u = r - (f - 1) * n, l = Ke.hmac.create();
l.start(i, e);
var c = "", v, C, y;
if (!s) {
for (var x = 1; x <= f; ++x) {
l.start(null, null), l.update(t), l.update(Ke.util.int32ToBytes(x)), v = y = l.digest().getBytes();
for (var T = 2; T <= a; ++T)
l.start(null, null), l.update(y), C = l.digest().getBytes(), v = Ke.util.xorBytes(v, C, n), y = C;
c += x < f ? v : v.substr(0, u);
}
return c;
}
var x = 1, T;
function I() {
if (x > f)
return s(null, c);
l.start(null, null), l.update(t), l.update(Ke.util.int32ToBytes(x)), v = y = l.digest().getBytes(), T = 2, B();
}
function B() {
if (T <= a)
return l.start(null, null), l.update(y), C = l.digest().getBytes(), v = Ke.util.xorBytes(v, C, n), y = C, ++T, Ke.util.setImmediate(B);
c += x < f ? v : v.substr(0, u), ++x, I();
}
I();
};
var st = z, Ja = st.sha256 = st.sha256 || {};
st.md.sha256 = st.md.algorithms.sha256 = Ja;
Ja.create = function() {
ei || hn();
var e = null, t = st.util.createBuffer(), a = new Array(64), r = {
algorithm: "sha256",
blockLength: 64,
digestLength: 32,
// 56-bit length of message so far (does not including padding)
messageLength: 0,
// true message length
fullMessageLength: null,
// size of message length in bytes
messageLengthSize: 8
};
return r.start = function() {
r.messageLength = 0, r.fullMessageLength = r.messageLength64 = [];
for (var i = r.messageLengthSize / 4, s = 0; s < i; ++s)
r.fullMessageLength.push(0);
return t = st.util.createBuffer(), e = {
h0: 1779033703,
h1: 3144134277,
h2: 1013904242,
h3: 2773480762,
h4: 1359893119,
h5: 2600822924,
h6: 528734635,
h7: 1541459225
}, r;
}, r.start(), r.update = function(i, s) {
s === "utf8" && (i = st.util.encodeUtf8(i));
var n = i.length;
r.messageLength += n, n = [n / 4294967296 >>> 0, n >>> 0];
for (var o = r.fullMessageLength.length - 1; o >= 0; --o)
r.fullMessageLength[o] += n[1], n[1] = n[0] + (r.fullMessageLength[o] / 4294967296 >>> 0), r.fullMessageLength[o] = r.fullMessageLength[o] >>> 0, n[0] = n[1] / 4294967296 >>> 0;
return t.putBytes(i), Aa(e, a, t), (t.read > 2048 || t.length() === 0) && t.compact(), r;
}, r.digest = function() {
var i = st.util.createBuffer();
i.putBytes(t.bytes());
var s = r.fullMessageLength[r.fullMessageLength.length - 1] + r.messageLengthSize, n = s & r.blockLength - 1;
i.putBytes(Mr.substr(0, r.blockLength - n));
for (var o, f, u = r.fullMessageLength[0] * 8, l = 0; l < r.fullMessageLength.length - 1; ++l)
o = r.fullMessageLength[l + 1] * 8, f = o / 4294967296 >>> 0, u += f, i.putInt32(u >>> 0), u = o >>> 0;
i.putInt32(u);
var c = {
h0: e.h0,
h1: e.h1,
h2: e.h2,
h3: e.h3,
h4: e.h4,
h5: e.h5,
h6: e.h6,
h7: e.h7
};
Aa(c, a, i);
var v = st.util.createBuffer();
return v.putInt32(c.h0), v.putInt32(c.h1), v.putInt32(c.h2), v.putInt32(c.h3), v.putInt32(c.h4), v.putInt32(c.h5), v.putInt32(c.h6), v.putInt32(c.h7), v;
}, r;
};
var Mr = null, ei = !1, ti = null;
function hn() {
Mr = String.fromCharCode(128), Mr += st.util.fillString(String.fromCharCode(0), 64), ti = [
1116352408,
1899447441,
3049323471,
3921009573,
961987163,
1508970993,
2453635748,
2870763221,
3624381080,
310598401,
607225278,
1426881987,
1925078388,
2162078206,
2614888103,
3248222580,
3835390401,
4022224774,
264347078,
604807628,
770255983,
1249150122,
1555081692,
1996064986,
2554220882,
2821834349,
2952996808,
3210313671,
3336571891,
3584528711,
113926993,
338241895,
666307205,
773529912,
1294757372,
1396182291,
1695183700,
1986661051,
2177026350,
2456956037,
2730485921,
2820302411,
3259730800,
3345764771,
3516065817,
3600352804,
4094571909,
275423344,
430227734,
506948616,
659060556,
883997877,
958139571,
1322822218,
1537002063,
1747873779,
1955562222,
2024104815,
2227730452,
2361852424,
2428436474,
2756734187,
3204031479,
3329325298
], ei = !0;
}
function Aa(e, t, a) {
for (var r, i, s, n, o, f, u, l, c, v, C, y, x, T, I, B = a.length(); B >= 64; ) {
for (u = 0; u < 16; ++u)
t[u] = a.getInt32();
for (; u < 64; ++u)
r = t[u - 2], r = (r >>> 17 | r << 15) ^ (r >>> 19 | r << 13) ^ r >>> 10, i = t[u - 15], i = (i >>> 7 | i << 25) ^ (i >>> 18 | i << 14) ^ i >>> 3, t[u] = r + t[u - 7] + i + t[u - 16] | 0;
for (l = e.h0, c = e.h1, v = e.h2, C = e.h3, y = e.h4, x = e.h5, T = e.h6, I = e.h7, u = 0; u < 64; ++u)
n = (y >>> 6 | y << 26) ^ (y >>> 11 | y << 21) ^ (y >>> 25 | y << 7), o = T ^ y & (x ^ T), s = (l >>> 2 | l << 30) ^ (l >>> 13 | l << 19) ^ (l >>> 22 | l << 10), f = l & c | v & (l ^ c), r = I + n + o + ti[u] + t[u], i = s + f, I = T, T = x, x = y, y = C + r >>> 0, C = v, v = c, c = l, l = r + i >>> 0;
e.h0 = e.h0 + l | 0, e.h1 = e.h1 + c | 0, e.h2 = e.h2 + v | 0, e.h3 = e.h3 + C | 0, e.h4 = e.h4 + y | 0, e.h5 = e.h5 + x | 0, e.h6 = e.h6 + T | 0, e.h7 = e.h7 + I | 0, B -= 64;
}
}
var at = z, fr = null;
at.util.isNodejs && !at.options.usePureJavaScript && !process.versions["node-webkit"] && (fr = sa);
var dn = at.prng = at.prng || {};
dn.create = function(e) {
for (var t = {
plugin: e,
key: null,
seed: null,
time: null,
// number of reseeds so far
reseeds: 0,
// amount of data generated so far
generated: 0,
// no initial key bytes
keyBytes: ""
}, a = e.md, r = new Array(32), i = 0; i < 32; ++i)
r[i] = a.create();
t.pools = r, t.pool = 0, t.generate = function(u, l) {
if (!l)
return t.generateSync(u);
var c = t.plugin.cipher, v = t.plugin.increment, C = t.plugin.formatKey, y = t.plugin.formatSeed, x = at.util.createBuffer();
t.key = null, T();
function T(I) {
if (I)
return l(I);
if (x.length() >= u)
return l(null, x.getBytes(u));
if (t.generated > 1048575 && (t.key = null), t.key === null)
return at.util.nextTick(function() {
s(T);
});
var B = c(t.key, t.seed);
t.generated += B.length, x.putBytes(B), t.key = C(c(t.key, v(t.seed))), t.seed = y(c(t.key, t.seed)), at.util.setImmediate(T);
}
}, t.generateSync = function(u) {
var l = t.plugin.cipher, c = t.plugin.increment, v = t.plugin.formatKey, C = t.plugin.formatSeed;
t.key = null;
for (var y = at.util.createBuffer(); y.length() < u; ) {
t.generated > 1048575 && (t.key = null), t.key === null && n();
var x = l(t.key, t.seed);
t.generated += x.length, y.putBytes(x), t.key = v(l(t.key, c(t.seed))), t.seed = C(l(t.key, t.seed));
}
return y.getBytes(u);
};
function s(u) {
if (t.pools[0].messageLength >= 32)
return o(), u();
var l = 32 - t.pools[0].messageLength << 5;
t.seedFile(l, function(c, v) {
if (c)
return u(c);
t.collect(v), o(), u();
});
}
function n() {
if (t.pools[0].messageLength >= 32)
return o();
var u = 32 - t.pools[0].messageLength << 5;
t.collect(t.seedFileSync(u)), o();
}
function o() {
t.reseeds = t.reseeds === 4294967295 ? 0 : t.reseeds + 1;
var u = t.plugin.md.create();
u.update(t.keyBytes);
for (var l = 1, c = 0; c < 32; ++c)
t.reseeds % l === 0 && (u.update(t.pools[c].digest().getBytes()), t.pools[c].start()), l = l << 1;
t.keyBytes = u.digest().getBytes(), u.start(), u.update(t.keyBytes);
var v = u.digest().getBytes();
t.key = t.plugin.formatKey(t.keyBytes), t.seed = t.plugin.formatSeed(v), t.generated = 0;
}
function f(u) {
var l = null, c = at.util.globalScope, v = c.crypto || c.msCrypto;
v && v.getRandomValues && (l = function(D) {
return v.getRandomValues(D);
});
var C = at.util.createBuffer();
if (l)
for (; C.length() < u; ) {
var y = Math.max(1, Math.min(u - C.length(), 65536) / 4), x = new Uint32Array(Math.floor(y));
try {
l(x);
for (var T = 0; T < x.length; ++T)
C.putInt32(x[T]);
} catch (D) {
if (!(typeof QuotaExceededError < "u" && D instanceof QuotaExceededError))
throw D;
}
}
if (C.length() < u)
for (var I, B, b, V = Math.floor(Math.random() * 65536); C.length() < u; ) {
B = 16807 * (V & 65535), I = 16807 * (V >> 16), B += (I & 32767) << 16, B += I >> 15, B = (B & 2147483647) + (B >> 31), V = B & 4294967295;
for (var T = 0; T < 3; ++T)
b = V >>> (T << 3), b ^= Math.floor(Math.random() * 256), C.putByte(b & 255);
}
return C.getBytes(u);
}
return fr ? (t.seedFile = function(u, l) {
fr.randomBytes(u, function(c, v) {
if (c)
return l(c);
l(null, v.toString());
});
}, t.seedFileSync = function(u) {
return fr.randomBytes(u).toString();
}) : (t.seedFile = function(u, l) {
try {
l(null, f(u));
} catch (c) {
l(c);
}
}, t.seedFileSync = f), t.collect = function(u) {
for (var l = u.length, c = 0; c < l; ++c)
t.pools[t.pool].update(u.substr(c, 1)), t.pool = t.pool === 31 ? 0 : t.pool + 1;
}, t.collectInt = function(u, l) {
for (var c = "", v = 0; v < l; v += 8)
c += String.fromCharCode(u >> v & 255);
t.collect(c);
}, t.registerWorker = function(u) {
if (u === self)
t.seedFile = function(c, v) {
function C(y) {
var x = y.data;
x.forge && x.forge.prng && (self.removeEventListener("message", C), v(x.forge.prng.err, x.forge.prng.bytes));
}
self.addEventListener("message", C), self.postMessage({ forge: { prng: { needed: c } } });
};
else {
var l = function(c) {
var v = c.data;
v.forge && v.forge.prng && t.seedFile(v.forge.prng.needed, function(C, y) {
u.postMessage({ forge: { prng: { err: C, bytes: y } } });
});
};
u.addEventListener("message", l);
}
}, t;
};
var me = z;
(function() {
if (me.random && me.random.getBytes) {
me.random;
return;
}
(function(e) {
var t = {}, a = new Array(4), r = me.util.createBuffer();
t.formatKey = function(c) {
var v = me.util.createBuffer(c);
return c = new Array(4), c[0] = v.getInt32(), c[1] = v.getInt32(), c[2] = v.getInt32(), c[3] = v.getInt32(), me.aes._expandKey(c, !1);
}, t.formatSeed = function(c) {
var v = me.util.createBuffer(c);
return c = new Array(4), c[0] = v.getInt32(), c[1] = v.getInt32(), c[2] = v.getInt32(), c[3] = v.getInt32(), c;
}, t.cipher = function(c, v) {
return me.aes._updateBlock(c, v, a, !1), r.putInt32(a[0]), r.putInt32(a[1]), r.putInt32(a[2]), r.putInt32(a[3]), r.getBytes();
}, t.increment = function(c) {
return ++c[3], c;
}, t.md = me.md.sha256;
function i() {
var c = me.prng.create(t);
return c.getBytes = function(v, C) {
return c.generate(v, C);
}, c.getBytesSync = function(v) {
return c.generate(v);
}, c;
}
var s = i(), n = null, o = me.util.globalScope, f = o.crypto || o.msCrypto;
if (f && f.getRandomValues && (n = function(c) {
return f.getRandomValues(c);
}), me.options.usePureJavaScript || !me.util.isNodejs && !n) {
if (s.collectInt(+/* @__PURE__ */ new Date(), 32), typeof navigator < "u") {
var u = "";
for (var l in navigator)
try {
typeof navigator[l] == "string" && (u += navigator[l]);
} catch {
}
s.collect(u), u = null;
}
e && (e().mousemove(function(c) {
s.collectInt(c.clientX, 16), s.collectInt(c.clientY, 16);
}), e().keypress(function(c) {
s.collectInt(c.charCode, 8);
}));
}
if (!me.random)
me.random = s;
else
for (var l in s)
me.random[l] = s[l];
me.random.createInstance = i, me.random;
})(typeof jQuery < "u" ? jQuery : null);
})();
var Ge = z, Rr = [
217,
120,
249,
196,
25,
221,
181,
237,
40,
233,
253,
121,
74,
160,
216,
157,
198,
126,
55,
131,
43,
118,
83,
142,
98,
76,
100,
136,
68,
139,
251,
162,
23,
154,
89,
245,
135,
179,
79,
19,
97,
69,
109,
141,
9,
129,
125,
50,
189,
143,
64,
235,
134,
183,
123,
11,
240,
149,
33,
34,
92,
107,
78,
130,
84,
214,
101,
147,
206,
96,
178,
28,
115,
86,
192,
20,
167,
140,
241,
220,
18,
117,
202,
31,
59,
190,
228,
209,
66,
61,
212,
48,
163,
60,
182,
38,
111,
191,
14,
218,
70,
105,
7,
87,
39,
242,
29,
155,
188,
148,
67,
3,
248,
17,
199,
246,
144,
239,
62,
231,
6,
195,
213,
47,
200,
102,
30,
215,
8,
232,
234,
222,
128,
82,
238,
247,
132,
170,
114,
172,
53,
77,
106,
42,
150,
26,
210,
113,
90,
21,
73,
116,
75,
159,
208,
94,
4,
24,
164,
236,
194,
224,
65,
110,
15,
81,
203,
204,
36,
145,
175,
80,
161,
244,
112,
57,
153,
124,
58,
133,
35,
184,
180,
122,
252,
2,
54,
91,
37,
85,
151,
49,
45,
93,
250,
152,
227,
138,
146,
174,
5,
223,
41,
16,
103,
108,
186,
201,
211,
0,
230,
207,
225,
158,
168,
44,
99,
22,
1,
63,
88,
226,
137,
169,
13,
56,
52,
27,
171,
51,
255,
176,
187,
72,
12,
95,
185,
177,
205,
46,
197,
243,
219,
71,
229,
165,
156,
119,
10,
166,
32,
104,
254,
127,
193,
173
], Ba = [1, 2, 3, 5], pn = function(e, t) {
return e << t & 65535 | (e & 65535) >> 16 - t;
}, vn = function(e, t) {
return (e & 65535) >> t | e << 16 - t & 65535;
};
Ge.rc2 = Ge.rc2 || {};
Ge.rc2.expandKey = function(e, t) {
typeof e == "string" && (e = Ge.util.createBuffer(e)), t = t || 128;
var a = e, r = e.length(), i = t, s = Math.ceil(i / 8), n = 255 >> (i & 7), o;
for (o = r; o < 128; o++)
a.putByte(Rr[a.at(o - 1) + a.at(o - r) & 255]);
for (a.setAt(128 - s, Rr[a.at(128 - s) & n]), o = 127 - s; o >= 0; o--)
a.setAt(o, Rr[a.at(o + 1) ^ a.at(o + s)]);
return a;
};
var ri = function(e, t, a) {
var r = !1, i = null, s = null, n = null, o, f, u, l, c = [];
for (e = Ge.rc2.expandKey(e, t), u = 0; u < 64; u++)
c.push(e.getInt16Le());
a ? (o = function(y) {
for (u = 0; u < 4; u++)
y[u] += c[l] + (y[(u + 3) % 4] & y[(u + 2) % 4]) + (~y[(u + 3) % 4] & y[(u + 1) % 4]), y[u] = pn(y[u], Ba[u]), l++;
}, f = function(y) {
for (u = 0; u < 4; u++)
y[u] += c[y[(u + 3) % 4] & 63];
}) : (o = function(y) {
for (u = 3; u >= 0; u--)
y[u] = vn(y[u], Ba[u]), y[u] -= c[l] + (y[(u + 3) % 4] & y[(u + 2) % 4]) + (~y[(u + 3) % 4] & y[(u + 1) % 4]), l--;
}, f = function(y) {
for (u = 3; u >= 0; u--)
y[u] -= c[y[(u + 3) % 4] & 63];
});
var v = function(y) {
var x = [];
for (u = 0; u < 4; u++) {
var T = i.getInt16Le();
n !== null && (a ? T ^= n.getInt16Le() : n.putInt16Le(T)), x.push(T & 65535);
}
l = a ? 0 : 63;
for (var I = 0; I < y.length; I++)
for (var B = 0; B < y[I][0]; B++)
y[I][1](x);
for (u = 0; u < 4; u++)
n !== null && (a ? n.putInt16Le(x[u]) : x[u] ^= n.getInt16Le()), s.putInt16Le(x[u]);
}, C = null;
return C = {
/**
* Starts or restarts the encryption or decryption process, whichever
* was previously configured.
*
* To use the cipher in CBC mode, iv may be given either as a string
* of bytes, or as a byte buffer. For ECB mode, give null as iv.
*
* @param iv the initialization vector to use, null for ECB mode.
* @param output the output the buffer to write to, null to create one.
*/
start: function(y, x) {
y && typeof y == "string" && (y = Ge.util.createBuffer(y)), r = !1, i = Ge.util.createBuffer(), s = x || new Ge.util.createBuffer(), n = y, C.output = s;
},
/**
* Updates the next block.
*
* @param input the buffer to read from.
*/
update: function(y) {
for (r || i.putBuffer(y); i.length() >= 8; )
v([
[5, o],
[1, f],
[6, o],
[1, f],
[5, o]
]);
},
/**
* Finishes encrypting or decrypting.
*
* @param pad a padding function to use, null for PKCS#7 padding,
* signature(blockSize, buffer, decrypt).
*
* @return true if successful, false on error.
*/
finish: function(y) {
var x = !0;
if (a)
if (y)
x = y(8, i, !a);
else {
var T = i.length() === 8 ? 8 : 8 - i.length();
i.fillWithByte(T, T);
}
if (x && (r = !0, C.update()), !a && (x = i.length() === 0, x))
if (y)
x = y(8, s, !a);
else {
var I = s.length(), B = s.at(I - 1);
B > I ? x = !1 : s.truncate(B);
}
return x;
}
}, C;
};
Ge.rc2.startEncrypting = function(e, t, a) {
var r = Ge.rc2.createEncryptionCipher(e, 128);
return r.start(t, a), r;
};
Ge.rc2.createEncryptionCipher = function(e, t) {
return ri(e, t, !0);
};
Ge.rc2.startDecrypting = function(e, t, a) {
var r = Ge.rc2.createDecryptionCipher(e, 128);
return r.start(t, a), r;
};
Ge.rc2.createDecryptionCipher = function(e, t) {
return ri(e, t, !1);
};
var Hr = z;
Hr.jsbn = Hr.jsbn || {};
var ht;
function N(e, t, a) {
this.data = [], e != null && (typeof e == "number" ? this.fromNumber(e, t, a) : t == null && typeof e != "string" ? this.fromString(e, 256) : this.fromString(e, t));
}
Hr.jsbn.BigInteger = N;
function ee() {
return new N(null);
}
function yn(e, t, a, r, i, s) {
for (; --s >= 0; ) {
var n = t * this.data[e++] + a.data[r] + i;
i = Math.floor(n / 67108864), a.data[r++] = n & 67108863;
}
return i;
}
function gn(e, t, a, r, i, s) {
for (var n = t & 32767, o = t >> 15; --s >= 0; ) {
var f = this.data[e] & 32767, u = this.data[e++] >> 15, l = o * f + u * n;
f = n * f + ((l & 32767) << 15) + a.data[r] + (i & 1073741823), i = (f >>> 30) + (l >>> 15) + o * u + (i >>> 30), a.data[r++] = f & 1073741823;
}
return i;
}
function ba(e, t, a, r, i, s) {
for (var n = t & 16383, o = t >> 14; --s >= 0; ) {
var f = this.data[e] & 16383, u = this.data[e++] >> 14, l = o * f + u * n;
f = n * f + ((l & 16383) << 14) + a.data[r] + i, i = (f >> 28) + (l >> 14) + o * u, a.data[r++] = f & 268435455;
}
return i;
}
typeof navigator > "u" ? (N.prototype.am = ba, ht = 28) : navigator.appName == "Microsoft Internet Explorer" ? (N.prototype.am = gn, ht = 30) : navigator.appName != "Netscape" ? (N.prototype.am = yn, ht = 26) : (N.prototype.am = ba, ht = 28);
N.prototype.DB = ht;
N.prototype.DM = (1 << ht) - 1;
N.prototype.DV = 1 << ht;
var oa = 52;
N.prototype.FV = Math.pow(2, oa);
N.prototype.F1 = oa - ht;
N.prototype.F2 = 2 * ht - oa;
var Cn = "0123456789abcdefghijklmnopqrstuvwxyz", Ar = new Array(), Gt, je;
Gt = "0".charCodeAt(0);
for (je = 0; je <= 9; ++je)
Ar[Gt++] = je;
Gt = "a".charCodeAt(0);
for (je = 10; je < 36; ++je)
Ar[Gt++] = je;
Gt = "A".charCodeAt(0);
for (je = 10; je < 36; ++je)
Ar[Gt++] = je;
function _a(e) {
return Cn.charAt(e);
}
function ai(e, t) {
var a = Ar[e.charCodeAt(t)];
return a ?? -1;
}
function mn(e) {
for (var t = this.t - 1; t >= 0; --t)
e.data[t] = this.data[t];
e.t = this.t, e.s = this.s;
}
function En(e) {
this.t = 1, this.s = e < 0 ? -1 : 0, e > 0 ? this.data[0] = e : e < -1 ? this.data[0] = e + this.DV : this.t = 0;
}
function Ct(e) {
var t = ee();
return t.fromInt(e), t;
}
function xn(e, t) {
var a;
if (t == 16)
a = 4;
else if (t == 8)
a = 3;
else if (t == 256)
a = 8;
else if (t == 2)
a = 1;
else if (t == 32)
a = 5;
else if (t == 4)
a = 2;
else {
this.fromRadix(e, t);
return;
}
this.t = 0, this.s = 0;
for (var r = e.length, i = !1, s = 0; --r >= 0; ) {
var n = a == 8 ? e[r] & 255 : ai(e, r);
if (n < 0) {
e.charAt(r) == "-" && (i = !0);
continue;
}
i = !1, s == 0 ? this.data[this.t++] = n : s + a > this.DB ? (this.data[this.t - 1] |= (n & (1 << this.DB - s) - 1) << s, this.data[this.t++] = n >> this.DB - s) : this.data[this.t - 1] |= n << s, s += a, s >= this.DB && (s -= this.DB);
}
a == 8 && e[0] & 128 && (this.s = -1, s > 0 && (this.data[this.t - 1] |= (1 << this.DB - s) - 1 << s)), this.clamp(), i && N.ZERO.subTo(this, this);
}
function Sn() {
for (var e = this.s & this.DM; this.t > 0 && this.data[this.t - 1] == e; )
--this.t;
}
function Tn(e) {
if (this.s < 0)
return "-" + this.negate().toString(e);
var t;
if (e == 16)
t = 4;
else if (e == 8)
t = 3;
else if (e == 2)
t = 1;
else if (e == 32)
t = 5;
else if (e == 4)
t = 2;
else
return this.toRadix(e);
var a = (1 << t) - 1, r, i = !1, s = "", n = this.t, o = this.DB - n * this.DB % t;
if (n-- > 0)
for (o < this.DB && (r = this.data[n] >> o) > 0 && (i = !0, s = _a(r)); n >= 0; )
o < t ? (r = (this.data[n] & (1 << o) - 1) << t - o, r |= this.data[--n] >> (o += this.DB - t)) : (r = this.data[n] >> (o -= t) & a, o <= 0 && (o += this.DB, --n)), r > 0 && (i = !0), i && (s += _a(r));
return i ? s : "0";
}
function In() {
var e = ee();
return N.ZERO.subTo(this, e), e;
}
function An() {
return this.s < 0 ? this.negate() : this;
}
function Bn(e) {
var t = this.s - e.s;
if (t != 0)
return t;
var a = this.t;
if (t = a - e.t, t != 0)
return this.s < 0 ? -t : t;
for (; --a >= 0; )
if ((t = this.data[a] - e.data[a]) != 0)
return t;
return 0;
}
function Br(e) {
var t = 1, a;
return (a = e >>> 16) != 0 && (e = a, t += 16), (a = e >> 8) != 0 && (e = a, t += 8), (a = e >> 4) != 0 && (e = a, t += 4), (a = e >> 2) != 0 && (e = a, t += 2), (a = e >> 1) != 0 && (e = a, t += 1), t;
}
function bn() {
return this.t <= 0 ? 0 : this.DB * (this.t - 1) + Br(this.data[this.t - 1] ^ this.s & this.DM);
}
function _n(e, t) {
var a;
for (a = this.t - 1; a >= 0; --a)
t.data[a + e] = this.data[a];
for (a = e - 1; a >= 0; --a)
t.data[a] = 0;
t.t = this.t + e, t.s = this.s;
}
function Nn(e, t) {
for (var a = e; a < this.t; ++a)
t.data[a - e] = this.data[a];
t.t = Math.max(this.t - e, 0), t.s = this.s;
}
function Rn(e, t) {
var a = e % this.DB, r = this.DB - a, i = (1 << r) - 1, s = Math.floor(e / this.DB), n = this.s << a & this.DM, o;
for (o = this.t - 1; o >= 0; --o)
t.data[o + s + 1] = this.data[o] >> r | n, n = (this.data[o] & i) << a;
for (o = s - 1; o >= 0; --o)
t.data[o] = 0;
t.data[s] = n, t.t = this.t + s + 1, t.s = this.s, t.clamp();
}
function wn(e, t) {
t.s = this.s;
var a = Math.floor(e / this.DB);
if (a >= this.t) {
t.t = 0;
return;
}
var r = e % this.DB, i = this.DB - r, s = (1 << r) - 1;
t.data[0] = this.data[a] >> r;
for (var n = a + 1; n < this.t; ++n)
t.data[n - a - 1] |= (this.data[n] & s) << i, t.data[n - a] = this.data[n] >> r;
r > 0 && (t.data[this.t - a - 1] |= (this.s & s) << i), t.t = this.t - a, t.clamp();
}
function Ln(e, t) {
for (var a = 0, r = 0, i = Math.min(e.t, this.t); a < i; )
r += this.data[a] - e.data[a], t.data[a++] = r & this.DM, r >>= this.DB;
if (e.t < this.t) {
for (r -= e.s; a < this.t; )
r += this.data[a], t.data[a++] = r & this.DM, r >>= this.DB;
r += this.s;
} else {
for (r += this.s; a < e.t; )
r -= e.data[a], t.data[a++] = r & this.DM, r >>= this.DB;
r -= e.s;
}
t.s = r < 0 ? -1 : 0, r < -1 ? t.data[a++] = this.DV + r : r > 0 && (t.data[a++] = r), t.t = a, t.clamp();
}
function Dn(e, t) {
var a = this.abs(), r = e.abs(), i = a.t;
for (t.t = i + r.t; --i >= 0; )
t.data[i] = 0;
for (i = 0; i < r.t; ++i)
t.data[i + a.t] = a.am(0, r.data[i], t, i, 0, a.t);
t.s = 0, t.clamp(), this.s != e.s && N.ZERO.subTo(t, t);
}
function kn(e) {
for (var t = this.abs(), a = e.t = 2 * t.t; --a >= 0; )
e.data[a] = 0;
for (a = 0; a < t.t - 1; ++a) {
var r = t.am(a, t.data[a], e, 2 * a, 0, 1);
(e.data[a + t.t] += t.am(a + 1, 2 * t.data[a], e, 2 * a + 1, r, t.t - a - 1)) >= t.DV && (e.data[a + t.t] -= t.DV, e.data[a + t.t + 1] = 1);
}
e.t > 0 && (e.data[e.t - 1] += t.am(a, t.data[a], e, 2 * a, 0, 1)), e.s = 0, e.clamp();
}
function Un(e, t, a) {
var r = e.abs();
if (!(r.t <= 0)) {
var i = this.abs();
if (i.t < r.t) {
t?.fromInt(0), a != null && this.copyTo(a);
return;
}
a == null && (a = ee());
var s = ee(), n = this.s, o = e.s, f = this.DB - Br(r.data[r.t - 1]);
f > 0 ? (r.lShiftTo(f, s), i.lShiftTo(f, a)) : (r.copyTo(s), i.copyTo(a));
var u = s.t, l = s.data[u - 1];
if (l != 0) {
var c = l * (1 << this.F1) + (u > 1 ? s.data[u - 2] >> this.F2 : 0), v = this.FV / c, C = (1 << this.F1) / c, y = 1 << this.F2, x = a.t, T = x - u, I = t ?? ee();
for (s.dlShiftTo(T, I), a.compareTo(I) >= 0 && (a.data[a.t++] = 1, a.subTo(I, a)), N.ONE.dlShiftTo(u, I), I.subTo(s, s); s.t < u; )
s.data[s.t++] = 0;
for (; --T >= 0; ) {
var B = a.data[--x] == l ? this.DM : Math.floor(a.data[x] * v + (a.data[x - 1] + y) * C);
if ((a.data[x] += s.am(0, B, a, T, 0, u)) < B)
for (s.dlShiftTo(T, I), a.subTo(I, a); a.data[x] < --B; )
a.subTo(I, a);
}
t != null && (a.drShiftTo(u, t), n != o && N.ZERO.subTo(t, t)), a.t = u, a.clamp(), f > 0 && a.rShiftTo(f, a), n < 0 && N.ZERO.subTo(a, a);
}
}
}
function Pn(e) {
var t = ee();
return this.abs().divRemTo(e, null, t), this.s < 0 && t.compareTo(N.ZERO) > 0 && e.subTo(t, t), t;
}
function wt(e) {
this.m = e;
}
function Vn(e) {
return e.s < 0 || e.compareTo(this.m) >= 0 ? e.mod(this.m) : e;
}
function On(e) {
return e;
}
function Fn(e) {
e.divRemTo(this.m, null, e);
}
function Kn(e, t, a) {
e.multiplyTo(t, a), this.reduce(a);
}
function Mn(e, t) {
e.squareTo(t), this.reduce(t);
}
wt.prototype.convert = Vn;
wt.prototype.revert = On;
wt.prototype.reduce = Fn;
wt.prototype.mulTo = Kn;
wt.prototype.sqrTo = Mn;
function Hn() {
if (this.t < 1)
return 0;
var e = this.data[0];
if (!(e & 1))
return 0;
var t = e & 3;
return t = t * (2 - (e & 15) * t) & 15, t = t * (2 - (e & 255) * t) & 255, t = t * (2 - ((e & 65535) * t & 65535)) & 65535, t = t * (2 - e * t % this.DV) % this.DV, t > 0 ? this.DV - t : -t;
}
function Lt(e) {
this.m = e, this.mp = e.invDigit(), this.mpl = this.mp & 32767, this.mph = this.mp >> 15, this.um = (1 << e.DB - 15) - 1, this.mt2 = 2 * e.t;
}
function Gn(e) {
var t = ee();
return e.abs().dlShiftTo(this.m.t, t), t.divRemTo(this.m, null, t), e.s < 0 && t.compareTo(N.ZERO) > 0 && this.m.subTo(t, t), t;
}
function qn(e) {
var t = ee();
return e.copyTo(t), this.reduce(t), t;
}
function Qn(e) {
for (; e.t <= this.mt2; )
e.data[e.t++] = 0;
for (var t = 0; t < this.m.t; ++t) {
var a = e.data[t] & 32767, r = a * this.mpl + ((a * this.mph + (e.data[t] >> 15) * this.mpl & this.um) << 15) & e.DM;
for (a = t + this.m.t, e.data[a] += this.m.am(0, r, e, t, 0, this.m.t); e.data[a] >= e.DV; )
e.data[a] -= e.DV, e.data[++a]++;
}
e.clamp(), e.drShiftTo(this.m.t, e), e.compareTo(this.m) >= 0 && e.subTo(this.m, e);
}
function zn(e, t) {
e.squareTo(t), this.reduce(t);
}
function Yn(e, t, a) {
e.multiplyTo(t, a), this.reduce(a);
}
Lt.prototype.convert = Gn;
Lt.prototype.revert = qn;
Lt.prototype.reduce = Qn;
Lt.prototype.mulTo = Yn;
Lt.prototype.sqrTo = zn;
function Xn() {
return (this.t > 0 ? this.data[0] & 1 : this.s) == 0;
}
function Wn(e, t) {
if (e > 4294967295 || e < 1)
return N.ONE;
var a = ee(), r = ee(), i = t.convert(this), s = Br(e) - 1;
for (i.copyTo(a); --s >= 0; )
if (t.sqrTo(a, r), (e & 1 << s) > 0)
t.mulTo(r, i, a);
else {
var n = a;
a = r, r = n;
}
return t.revert(a);
}
function jn(e, t) {
var a;
return e < 256 || t.isEven() ? a = new wt(t) : a = new Lt(t), this.exp(e, a);
}
N.prototype.copyTo = mn;
N.prototype.fromInt = En;
N.prototype.fromString = xn;
N.prototype.clamp = Sn;
N.prototype.dlShiftTo = _n;
N.prototype.drShiftTo = Nn;
N.prototype.lShiftTo = Rn;
N.prototype.rShiftTo = wn;
N.prototype.subTo = Ln;
N.prototype.multiplyTo = Dn;
N.prototype.squareTo = kn;
N.prototype.divRemTo = Un;
N.prototype.invDigit = Hn;
N.prototype.isEven = Xn;
N.prototype.exp = Wn;
N.prototype.toString = Tn;
N.prototype.negate = In;
N.prototype.abs = An;
N.prototype.compareTo = Bn;
N.prototype.bitLength = bn;
N.prototype.mod = Pn;
N.prototype.modPowInt = jn;
N.ZERO = Ct(0);
N.ONE = Ct(1);
function $n() {
var e = ee();
return this.copyTo(e), e;
}
function Zn() {
if (this.s < 0) {
if (this.t == 1)
return this.data[0] - this.DV;
if (this.t == 0)
return -1;
} else {
if (this.t == 1)
return this.data[0];
if (this.t == 0)
return 0;
}
return (this.data[1] & (1 << 32 - this.DB) - 1) << this.DB | this.data[0];
}
function Jn() {
return this.t == 0 ? this.s : this.data[0] << 24 >> 24;
}
function es() {
return this.t == 0 ? this.s : this.data[0] << 16 >> 16;
}
function ts(e) {
return Math.floor(Math.LN2 * this.DB / Math.log(e));
}
function rs() {
return this.s < 0 ? -1 : this.t <= 0 || this.t == 1 && this.data[0] <= 0 ? 0 : 1;
}
function as(e) {
if (e == null && (e = 10), this.signum() == 0 || e < 2 || e > 36)
return "0";
var t = this.chunkSize(e), a = Math.pow(e, t), r = Ct(a), i = ee(), s = ee(), n = "";
for (this.divRemTo(r, i, s); i.signum() > 0; )
n = (a + s.intValue()).toString(e).substr(1) + n, i.divRemTo(r, i, s);
return s.intValue().toString(e) + n;
}
function is(e, t) {
this.fromInt(0), t == null && (t = 10);
for (var a = this.chunkSize(t), r = Math.pow(t, a), i = !1, s = 0, n = 0, o = 0; o < e.length; ++o) {
var f = ai(e, o);
if (f < 0) {
e.charAt(o) == "-" && this.signum() == 0 && (i = !0);
continue;
}
n = t * n + f, ++s >= a && (this.dMultiply(r), this.dAddOffset(n, 0), s = 0, n = 0);
}
s > 0 && (this.dMultiply(Math.pow(t, s)), this.dAddOffset(n, 0)), i && N.ZERO.subTo(this, this);
}
function ns(e, t, a) {
if (typeof t == "number")
if (e < 2)
this.fromInt(1);
else
for (this.fromNumber(e, a), this.testBit(e - 1) || this.bitwiseTo(N.ONE.shiftLeft(e - 1), ua, this), this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(t); )
this.dAddOffset(2, 0), this.bitLength() > e && this.subTo(N.ONE.shiftLeft(e - 1), this);
else {
var r = new Array(), i = e & 7;
r.length = (e >> 3) + 1, t.nextBytes(r), i > 0 ? r[0] &= (1 << i) - 1 : r[0] = 0, this.fromString(r, 256);
}
}
function ss() {
var e = this.t, t = new Array();
t[0] = this.s;
var a = this.DB - e * this.DB % 8, r, i = 0;
if (e-- > 0)
for (a < this.DB && (r = this.data[e] >> a) != (this.s & this.DM) >> a && (t[i++] = r | this.s << this.DB - a); e >= 0; )
a < 8 ? (r = (this.data[e] & (1 << a) - 1) << 8 - a, r |= this.data[--e] >> (a += this.DB - 8)) : (r = this.data[e] >> (a -= 8) & 255, a <= 0 && (a += this.DB, --e)), r & 128 && (r |= -256), i == 0 && (this.s & 128) != (r & 128) && ++i, (i > 0 || r != this.s) && (t[i++] = r);
return t;
}
function os(e) {
return this.compareTo(e) == 0;
}
function us(e) {
return this.compareTo(e) < 0 ? this : e;
}
function fs(e) {
return this.compareTo(e) > 0 ? this : e;
}
function ls(e, t, a) {
var r, i, s = Math.min(e.t, this.t);
for (r = 0; r < s; ++r)
a.data[r] = t(this.data[r], e.data[r]);
if (e.t < this.t) {
for (i = e.s & this.DM, r = s; r < this.t; ++r)
a.data[r] = t(this.data[r], i);
a.t = this.t;
} else {
for (i = this.s & this.DM, r = s; r < e.t; ++r)
a.data[r] = t(i, e.data[r]);
a.t = e.t;
}
a.s = t(this.s, e.s), a.clamp();
}
function cs(e, t) {
return e & t;
}
function hs(e) {
var t = ee();
return this.bitwiseTo(e, cs, t), t;
}
function ua(e, t) {
return e | t;
}
function ds(e) {
var t = ee();
return this.bitwiseTo(e, ua, t), t;
}
function ii(e, t) {
return e ^ t;
}
function ps(e) {
var t = ee();
return this.bitwiseTo(e, ii, t), t;
}
function ni(e, t) {
return e & ~t;
}
function vs(e) {
var t = ee();
return this.bitwiseTo(e, ni, t), t;
}
function ys() {
for (var e = ee(), t = 0; t < this.t; ++t)
e.data[t] = this.DM & ~this.data[t];
return e.t = this.t, e.s = ~this.s, e;
}
function gs(e) {
var t = ee();
return e < 0 ? this.rShiftTo(-e, t) : this.lShiftTo(e, t), t;
}
function Cs(e) {
var t = ee();
return e < 0 ? this.lShiftTo(-e, t) : this.rShiftTo(e, t), t;
}
function ms(e) {
if (e == 0)
return -1;
var t = 0;
return e & 65535 || (e >>= 16, t += 16), e & 255 || (e >>= 8, t += 8), e & 15 || (e >>= 4, t += 4), e & 3 || (e >>= 2, t += 2), e & 1 || ++t, t;
}
function Es() {
for (var e = 0; e < this.t; ++e)
if (this.data[e] != 0)
return e * this.DB + ms(this.data[e]);
return this.s < 0 ? this.t * this.DB : -1;
}
function xs(e) {
for (var t = 0; e != 0; )
e &= e - 1, ++t;
return t;
}
function Ss() {
for (var e = 0, t = this.s & this.DM, a = 0; a < this.t; ++a)
e += xs(this.data[a] ^ t);
return e;
}
function Ts(e) {
var t = Math.floor(e / this.DB);
return t >= this.t ? this.s != 0 : (this.data[t] & 1 << e % this.DB) != 0;
}
function Is(e, t) {
var a = N.ONE.shiftLeft(e);
return this.bitwiseTo(a, t, a), a;
}
function As(e) {
return this.changeBit(e, ua);
}
function Bs(e) {
return this.changeBit(e, ni);
}
function bs(e) {
return this.changeBit(e, ii);
}
function _s(e, t) {
for (var a = 0, r = 0, i = Math.min(e.t, this.t); a < i; )
r += this.data[a] + e.data[a], t.data[a++] = r & this.DM, r >>= this.DB;
if (e.t < this.t) {
for (r += e.s; a < this.t; )
r += this.data[a], t.data[a++] = r & this.DM, r >>= this.DB;
r += this.s;
} else {
for (r += this.s; a < e.t; )
r += e.data[a], t.data[a++] = r & this.DM, r >>= this.DB;
r += e.s;
}
t.s = r < 0 ? -1 : 0, r > 0 ? t.data[a++] = r : r < -1 && (t.data[a++] = this.DV + r), t.t = a, t.clamp();
}
function Ns(e) {
var t = ee();
return this.addTo(e, t), t;
}
function Rs(e) {
var t = ee();
return this.subTo(e, t), t;
}
function ws(e) {
var t = ee();
return this.multiplyTo(e, t), t;
}
function Ls(e) {
var t = ee();
return this.divRemTo(e, t, null), t;
}
function Ds(e) {
var t = ee();
return this.divRemTo(e, null, t), t;
}
function ks(e) {
var t = ee(), a = ee();
return this.divRemTo(e, t, a), new Array(t, a);
}
function Us(e) {
this.data[this.t] = this.am(0, e - 1, this, 0, 0, this.t), ++this.t, this.clamp();
}
function Ps(e, t) {
if (e != 0) {
for (; this.t <= t; )
this.data[this.t++] = 0;
for (this.data[t] += e; this.data[t] >= this.DV; )
this.data[t] -= this.DV, ++t >= this.t && (this.data[this.t++] = 0), ++this.data[t];
}
}
function tr() {
}
function si(e) {
return e;
}
function Vs(e, t, a) {
e.multiplyTo(t, a);
}
function Os(e, t) {
e.squareTo(t);
}
tr.prototype.convert = si;
tr.prototype.revert = si;
tr.prototype.mulTo = Vs;
tr.prototype.sqrTo = Os;
function Fs(e) {
return this.exp(e, new tr());
}
function Ks(e, t, a) {
var r = Math.min(this.t + e.t, t);
for (a.s = 0, a.t = r; r > 0; )
a.data[--r] = 0;
var i;
for (i = a.t - this.t; r < i; ++r)
a.data[r + this.t] = this.am(0, e.data[r], a, r, 0, this.t);
for (i = Math.min(e.t, t); r < i; ++r)
this.am(0, e.data[r], a, r, 0, t - r);
a.clamp();
}
function Ms(e, t, a) {
--t;
var r = a.t = this.t + e.t - t;
for (a.s = 0; --r >= 0; )
a.data[r] = 0;
for (r = Math.max(t - this.t, 0); r < e.t; ++r)
a.data[this.t + r - t] = this.am(t - r, e.data[r], a, 0, 0, this.t + r - t);
a.clamp(), a.drShiftTo(1, a);
}
function qt(e) {
this.r2 = ee(), this.q3 = ee(), N.ONE.dlShiftTo(2 * e.t, this.r2), this.mu = this.r2.divide(e), this.m = e;
}
function Hs(e) {
if (e.s < 0 || e.t > 2 * this.m.t)
return e.mod(this.m);
if (e.compareTo(this.m) < 0)
return e;
var t = ee();
return e.copyTo(t), this.reduce(t), t;
}
function Gs(e) {
return e;
}
function qs(e) {
for (e.drShiftTo(this.m.t - 1, this.r2), e.t > this.m.t + 1 && (e.t = this.m.t + 1, e.clamp()), this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3), this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); e.compareTo(this.r2) < 0; )
e.dAddOffset(1, this.m.t + 1);
for (e.subTo(this.r2, e); e.compareTo(this.m) >= 0; )
e.subTo(this.m, e);
}
function Qs(e, t) {
e.squareTo(t), this.reduce(t);
}
function zs(e, t, a) {
e.multiplyTo(t, a), this.reduce(a);
}
qt.prototype.convert = Hs;
qt.prototype.revert = Gs;
qt.prototype.reduce = qs;
qt.prototype.mulTo = zs;
qt.prototype.sqrTo = Qs;
function Ys(e, t) {
var a = e.bitLength(), r, i = Ct(1), s;
if (a <= 0)
return i;
a < 18 ? r = 1 : a < 48 ? r = 3 : a < 144 ? r = 4 : a < 768 ? r = 5 : r = 6, a < 8 ? s = new wt(t) : t.isEven() ? s = new qt(t) : s = new Lt(t);
var n = new Array(), o = 3, f = r - 1, u = (1 << r) - 1;
if (n[1] = s.convert(this), r > 1) {
var l = ee();
for (s.sqrTo(n[1], l); o <= u; )
n[o] = ee(), s.mulTo(l, n[o - 2], n[o]), o += 2;
}
var c = e.t - 1, v, C = !0, y = ee(), x;
for (a = Br(e.data[c]) - 1; c >= 0; ) {
for (a >= f ? v = e.data[c] >> a - f & u : (v = (e.data[c] & (1 << a + 1) - 1) << f - a, c > 0 && (v |= e.data[c - 1] >> this.DB + a - f)), o = r; !(v & 1); )
v >>= 1, --o;
if ((a -= o) < 0 && (a += this.DB, --c), C)
n[v].copyTo(i), C = !1;
else {
for (; o > 1; )
s.sqrTo(i, y), s.sqrTo(y, i), o -= 2;
o > 0 ? s.sqrTo(i, y) : (x = i, i = y, y = x), s.mulTo(y, n[v], i);
}
for (; c >= 0 && !(e.data[c] & 1 << a); )
s.sqrTo(i, y), x = i, i = y, y = x, --a < 0 && (a = this.DB - 1, --c);
}
return s.revert(i);
}
function Xs(e) {
var t = this.s < 0 ? this.negate() : this.clone(), a = e.s < 0 ? e.negate() : e.clone();
if (t.compareTo(a) < 0) {
var r = t;
t = a, a = r;
}
var i = t.getLowestSetBit(), s = a.getLowestSetBit();
if (s < 0)
return t;
for (i < s && (s = i), s > 0 && (t.rShiftTo(s, t), a.rShiftTo(s, a)); t.signum() > 0; )
(i = t.getLowestSetBit()) > 0 && t.rShiftTo(i, t), (i = a.getLowestSetBit()) > 0 && a.rShiftTo(i, a), t.compareTo(a) >= 0 ? (t.subTo(a, t), t.rShiftTo(1, t)) : (a.subTo(t, a), a.rShiftTo(1, a));
return s > 0 && a.lShiftTo(s, a), a;
}
function Ws(e) {
if (e <= 0)
return 0;
var t = this.DV % e, a = this.s < 0 ? e - 1 : 0;
if (this.t > 0)
if (t == 0)
a = this.data[0] % e;
else
for (var r = this.t - 1; r >= 0; --r)
a = (t * a + this.data[r]) % e;
return a;
}
function js(e) {
var t = e.isEven();
if (this.isEven() && t || e.signum() == 0)
return N.ZERO;
for (var a = e.clone(), r = this.clone(), i = Ct(1), s = Ct(0), n = Ct(0), o = Ct(1); a.signum() != 0; ) {
for (; a.isEven(); )
a.rShiftTo(1, a), t ? ((!i.isEven() || !s.isEven()) && (i.addTo(this, i), s.subTo(e, s)), i.rShiftTo(1, i)) : s.isEven() || s.subTo(e, s), s.rShiftTo(1, s);
for (; r.isEven(); )
r.rShiftTo(1, r), t ? ((!n.isEven() || !o.isEven()) && (n.addTo(this, n), o.subTo(e, o)), n.rShiftTo(1, n)) : o.isEven() || o.subTo(e, o), o.rShiftTo(1, o);
a.compareTo(r) >= 0 ? (a.subTo(r, a), t && i.subTo(n, i), s.subTo(o, s)) : (r.subTo(a, r), t && n.subTo(i, n), o.subTo(s, o));
}
if (r.compareTo(N.ONE) != 0)
return N.ZERO;
if (o.compareTo(e) >= 0)
return o.subtract(e);
if (o.signum() < 0)
o.addTo(e, o);
else
return o;
return o.signum() < 0 ? o.add(e) : o;
}
var et = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509], $s = (1 << 26) / et[et.length - 1];
function Zs(e) {
var t, a = this.abs();
if (a.t == 1 && a.data[0] <= et[et.length - 1]) {
for (t = 0; t < et.length; ++t)
if (a.data[0] == et[t])
return !0;
return !1;
}
if (a.isEven())
return !1;
for (t = 1; t < et.length; ) {
for (var r = et[t], i = t + 1; i < et.length && r < $s; )
r *= et[i++];
for (r = a.modInt(r); t < i; )
if (r % et[t++] == 0)
return !1;
}
return a.millerRabin(e);
}
function Js(e) {
var t = this.subtract(N.ONE), a = t.getLowestSetBit();
if (a <= 0)
return !1;
for (var r = t.shiftRight(a), i = e0(), s, n = 0; n < e; ++n) {
do
s = new N(this.bitLength(), i);
while (s.compareTo(N.ONE) <= 0 || s.compareTo(t) >= 0);
var o = s.modPow(r, this);
if (o.compareTo(N.ONE) != 0 && o.compareTo(t) != 0) {
for (var f = 1; f++ < a && o.compareTo(t) != 0; )
if (o = o.modPowInt(2, this), o.compareTo(N.ONE) == 0)
return !1;
if (o.compareTo(t) != 0)
return !1;
}
}
return !0;
}
function e0() {
return {
// x is an array to fill with bytes
nextBytes: function(e) {
for (var t = 0; t < e.length; ++t)
e[t] = Math.floor(Math.random() * 256);
}
};
}
N.prototype.chunkSize = ts;
N.prototype.toRadix = as;
N.prototype.fromRadix = is;
N.prototype.fromNumber = ns;
N.prototype.bitwiseTo = ls;
N.prototype.changeBit = Is;
N.prototype.addTo = _s;
N.prototype.dMultiply = Us;
N.prototype.dAddOffset = Ps;
N.prototype.multiplyLowerTo = Ks;
N.prototype.multiplyUpperTo = Ms;
N.prototype.modInt = Ws;
N.prototype.millerRabin = Js;
N.prototype.clone = $n;
N.prototype.intValue = Zn;
N.prototype.byteValue = Jn;
N.prototype.shortValue = es;
N.prototype.signum = rs;
N.prototype.toByteArray = ss;
N.prototype.equals = os;
N.prototype.min = us;
N.prototype.max = fs;
N.prototype.and = hs;
N.prototype.or = ds;
N.prototype.xor = ps;
N.prototype.andNot = vs;
N.prototype.not = ys;
N.prototype.shiftLeft = gs;
N.prototype.shiftRight = Cs;
N.prototype.getLowestSetBit = Es;
N.prototype.bitCount = Ss;
N.prototype.testBit = Ts;
N.prototype.setBit = As;
N.prototype.clearBit = Bs;
N.prototype.flipBit = bs;
N.prototype.add = Ns;
N.prototype.subtract = Rs;
N.prototype.multiply = ws;
N.prototype.divide = Ls;
N.prototype.remainder = Ds;
N.prototype.divideAndRemainder = ks;
N.prototype.modPow = Ys;
N.prototype.modInverse = js;
N.prototype.pow = Fs;
N.prototype.gcd = Xs;
N.prototype.isProbablePrime = Zs;
var ot = z, oi = ot.sha1 = ot.sha1 || {};
ot.md.sha1 = ot.md.algorithms.sha1 = oi;
oi.create = function() {
ui || t0();
var e = null, t = ot.util.createBuffer(), a = new Array(80), r = {
algorithm: "sha1",
blockLength: 64,
digestLength: 20,
// 56-bit length of message so far (does not including padding)
messageLength: 0,
// true message length
fullMessageLength: null,
// size of message length in bytes
messageLengthSize: 8
};
return r.start = function() {
r.messageLength = 0, r.fullMessageLength = r.messageLength64 = [];
for (var i = r.messageLengthSize / 4, s = 0; s < i; ++s)
r.fullMessageLength.push(0);
return t = ot.util.createBuffer(), e = {
h0: 1732584193,
h1: 4023233417,
h2: 2562383102,
h3: 271733878,
h4: 3285377520
}, r;
}, r.start(), r.update = function(i, s) {
s === "utf8" && (i = ot.util.encodeUtf8(i));
var n = i.length;
r.messageLength += n, n = [n / 4294967296 >>> 0, n >>> 0];
for (var o = r.fullMessageLength.length - 1; o >= 0; --o)
r.fullMessageLength[o] += n[1], n[1] = n[0] + (r.fullMessageLength[o] / 4294967296 >>> 0), r.fullMessageLength[o] = r.fullMessageLength[o] >>> 0, n[0] = n[1] / 4294967296 >>> 0;
return t.putBytes(i), Na(e, a, t), (t.read > 2048 || t.length() === 0) && t.compact(), r;
}, r.digest = function() {
var i = ot.util.createBuffer();
i.putBytes(t.bytes());
var s = r.fullMessageLength[r.fullMessageLength.length - 1] + r.messageLengthSize, n = s & r.blockLength - 1;
i.putBytes(Gr.substr(0, r.blockLength - n));
for (var o, f, u = r.fullMessageLength[0] * 8, l = 0; l < r.fullMessageLength.length - 1; ++l)
o = r.fullMessageLength[l + 1] * 8, f = o / 4294967296 >>> 0, u += f, i.putInt32(u >>> 0), u = o >>> 0;
i.putInt32(u);
var c = {
h0: e.h0,
h1: e.h1,
h2: e.h2,
h3: e.h3,
h4: e.h4
};
Na(c, a, i);
var v = ot.util.createBuffer();
return v.putInt32(c.h0), v.putInt32(c.h1), v.putInt32(c.h2), v.putInt32(c.h3), v.putInt32(c.h4), v;
}, r;
};
var Gr = null, ui = !1;
function t0() {
Gr = String.fromCharCode(128), Gr += ot.util.fillString(String.fromCharCode(0), 64), ui = !0;
}
function Na(e, t, a) {
for (var r, i, s, n, o, f, u, l, c = a.length(); c >= 64; ) {
for (i = e.h0, s = e.h1, n = e.h2, o = e.h3, f = e.h4, l = 0; l < 16; ++l)
r = a.getInt32(), t[l] = r, u = o ^ s & (n ^ o), r = (i << 5 | i >>> 27) + u + f + 1518500249 + r, f = o, o = n, n = (s << 30 | s >>> 2) >>> 0, s = i, i = r;
for (; l < 20; ++l)
r = t[l - 3] ^ t[l - 8] ^ t[l - 14] ^ t[l - 16], r = r << 1 | r >>> 31, t[l] = r, u = o ^ s & (n ^ o), r = (i << 5 | i >>> 27) + u + f + 1518500249 + r, f = o, o = n, n = (s << 30 | s >>> 2) >>> 0, s = i, i = r;
for (; l < 32; ++l)
r = t[l - 3] ^ t[l - 8] ^ t[l - 14] ^ t[l - 16], r = r << 1 | r >>> 31, t[l] = r, u = s ^ n ^ o, r = (i << 5 | i >>> 27) + u + f + 1859775393 + r, f = o, o = n, n = (s << 30 | s >>> 2) >>> 0, s = i, i = r;
for (; l < 40; ++l)
r = t[l - 6] ^ t[l - 16] ^ t[l - 28] ^ t[l - 32], r = r << 2 | r >>> 30, t[l] = r, u = s ^ n ^ o, r = (i << 5 | i >>> 27) + u + f + 1859775393 + r, f = o, o = n, n = (s << 30 | s >>> 2) >>> 0, s = i, i = r;
for (; l < 60; ++l)
r = t[l - 6] ^ t[l - 16] ^ t[l - 28] ^ t[l - 32], r = r << 2 | r >>> 30, t[l] = r, u = s & n | o & (s ^ n), r = (i << 5 | i >>> 27) + u + f + 2400959708 + r, f = o, o = n, n = (s << 30 | s >>> 2) >>> 0, s = i, i = r;
for (; l < 80; ++l)
r = t[l - 6] ^ t[l - 16] ^ t[l - 28] ^ t[l - 32], r = r << 2 | r >>> 30, t[l] = r, u = s ^ n ^ o, r = (i << 5 | i >>> 27) + u + f + 3395469782 + r, f = o, o = n, n = (s << 30 | s >>> 2) >>> 0, s = i, i = r;
e.h0 = e.h0 + i | 0, e.h1 = e.h1 + s | 0, e.h2 = e.h2 + n | 0, e.h3 = e.h3 + o | 0, e.h4 = e.h4 + f | 0, c -= 64;
}
}
var ut = z, fi = ut.pkcs1 = ut.pkcs1 || {};
fi.encode_rsa_oaep = function(e, t, a) {
var r, i, s, n;
typeof a == "string" ? (r = a, i = arguments[3] || void 0, s = arguments[4] || void 0) : a && (r = a.label || void 0, i = a.seed || void 0, s = a.md || void 0, a.mgf1 && a.mgf1.md && (n = a.mgf1.md)), s ? s.start() : s = ut.md.sha1.create(), n || (n = s);
var o = Math.ceil(e.n.bitLength() / 8), f = o - 2 * s.digestLength - 2;
if (t.length > f) {
var u = new Error("RSAES-OAEP input message length is too long.");
throw u.length = t.length, u.maxLength = f, u;
}
r || (r = ""), s.update(r, "raw");
for (var l = s.digest(), c = "", v = f - t.length, C = 0; C < v; C++)
c += "\0";
var y = l.getBytes() + c + "" + t;
if (!i)
i = ut.random.getBytes(s.digestLength);
else if (i.length !== s.digestLength) {
var u = new Error("Invalid RSAES-OAEP seed. The seed length must match the digest length.");
throw u.seedLength = i.length, u.digestLength = s.digestLength, u;
}
var x = hr(i, o - s.digestLength - 1, n), T = ut.util.xorBytes(y, x, y.length), I = hr(T, s.digestLength, n), B = ut.util.xorBytes(i, I, i.length);
return "\0" + B + T;
};
fi.decode_rsa_oaep = function(e, t, a) {
var r, i, s;
typeof a == "string" ? (r = a, i = arguments[3] || void 0) : a && (r = a.label || void 0, i = a.md || void 0, a.mgf1 && a.mgf1.md && (s = a.mgf1.md));
var n = Math.ceil(e.n.bitLength() / 8);
if (t.length !== n) {
var T = new Error("RSAES-OAEP encoded message length is invalid.");
throw T.length = t.length, T.expectedLength = n, T;
}
if (i === void 0 ? i = ut.md.sha1.create() : i.start(), s || (s = i), n < 2 * i.digestLength + 2)
throw new Error("RSAES-OAEP key is too short for the hash function.");
r || (r = ""), i.update(r, "raw");
for (var o = i.digest().getBytes(), f = t.charAt(0), u = t.substring(1, i.digestLength + 1), l = t.substring(1 + i.digestLength), c = hr(l, i.digestLength, s), v = ut.util.xorBytes(u, c, u.length), C = hr(v, n - i.digestLength - 1, s), y = ut.util.xorBytes(l, C, l.length), x = y.substring(0, i.digestLength), T = f !== "\0", I = 0; I < i.digestLength; ++I)
T |= o.charAt(I) !== x.charAt(I);
for (var B = 1, b = i.digestLength, V = i.digestLength; V < y.length; V++) {
var D = y.charCodeAt(V), w = D & 1 ^ 1, G = B ? 65534 : 0;
T |= D & G, B = B & w, b += B;
}
if (T || y.charCodeAt(b) !== 1)
throw new Error("Invalid RSAES-OAEP padding.");
return y.substring(b + 1);
};
function hr(e, t, a) {
a || (a = ut.md.sha1.create());
for (var r = "", i = Math.ceil(t / a.digestLength), s = 0; s < i; ++s) {
var n = String.fromCharCode(
s >> 24 & 255,
s >> 16 & 255,
s >> 8 & 255,
s & 255
);
a.start(), a.update(e + n), r += a.digest().getBytes();
}
return r.substring(0, t);
}
var pt = z;
(function() {
if (pt.prime) {
pt.prime;
return;
}
var e = pt.prime = pt.prime || {}, t = pt.jsbn.BigInteger, a = [6, 4, 2, 4, 2, 4, 6, 2], r = new t(null);
r.fromInt(30);
var i = function(c, v) {
return c | v;
};
e.generateProbablePrime = function(c, v, C) {
typeof v == "function" && (C = v, v = {}), v = v || {};
var y = v.algorithm || "PRIMEINC";
typeof y == "string" && (y = { name: y }), y.options = y.options || {};
var x = v.prng || pt.random, T = {
// x is an array to fill with bytes
nextBytes: function(I) {
for (var B = x.getBytesSync(I.length), b = 0; b < I.length; ++b)
I[b] = B.charCodeAt(b);
}
};
if (y.name === "PRIMEINC")
return s(c, T, y.options, C);
throw new Error("Invalid prime generation algorithm: " + y.name);
};
function s(c, v, C, y) {
return "workers" in C ? f(c, v, C, y) : n(c, v, C, y);
}
function n(c, v, C, y) {
var x = u(c, v), T = 0, I = l(x.bitLength());
"millerRabinTests" in C && (I = C.millerRabinTests);
var B = 10;
"maxBlockTime" in C && (B = C.maxBlockTime), o(x, c, v, T, I, B, y);
}
function o(c, v, C, y, x, T, I) {
var B = +/* @__PURE__ */ new Date();
do {
if (c.bitLength() > v && (c = u(v, C)), c.isProbablePrime(x))
return I(null, c);
c.dAddOffset(a[y++ % 8], 0);
} while (T < 0 || +/* @__PURE__ */ new Date() - B < T);
pt.util.setImmediate(function() {
o(c, v, C, y, x, T, I);
});
}
function f(c, v, C, y) {
if (typeof Worker > "u")
return n(c, v, C, y);
var x = u(c, v), T = C.workers, I = C.workLoad || 100, B = I * 30 / 8, b = C.workerScript || "forge/prime.worker.js";
if (T === -1)
return pt.util.estimateCores(function(D, w) {
D && (w = 2), T = w - 1, V();
});
V();
function V() {
T = Math.max(1, T);
for (var D = [], w = 0; w < T; ++w)
D[w] = new Worker(b);
for (var w = 0; w < T; ++w)
D[w].addEventListener("message", Y);
var G = !1;
function Y(re) {
if (!G) {
var ae = re.data;
if (ae.found) {
for (var ie = 0; ie < D.length; ++ie)
D[ie].terminate();
return G = !0, y(null, new t(ae.prime, 16));
}
x.bitLength() > c && (x = u(c, v));
var he = x.toString(16);
re.target.postMessage({
hex: he,
workLoad: I
}), x.dAddOffset(B, 0);
}
}
}
}
function u(c, v) {
var C = new t(c, v), y = c - 1;
return C.testBit(y) || C.bitwiseTo(t.ONE.shiftLeft(y), i, C), C.dAddOffset(31 - C.mod(r).byteValue(), 0), C;
}
function l(c) {
return c <= 100 ? 27 : c <= 150 ? 18 : c <= 200 ? 15 : c <= 250 ? 12 : c <= 300 ? 9 : c <= 350 ? 8 : c <= 400 ? 7 : c <= 500 ? 6 : c <= 600 ? 5 : c <= 800 ? 4 : c <= 1250 ? 3 : 2;
}
})();
var K = z;
if (typeof J > "u")
var J = K.jsbn.BigInteger;
var qr = K.util.isNodejs ? sa : null, S = K.asn1, $e = K.util;
K.pki = K.pki || {};
K.pki.rsa = K.rsa = K.rsa || {};
var q = K.pki, r0 = [6, 4, 2, 4, 2, 4, 6, 2], a0 = {
// PrivateKeyInfo
name: "PrivateKeyInfo",
tagClass: S.Class.UNIVERSAL,
type: S.Type.SEQUENCE,
constructed: !0,
value: [{
// Version (INTEGER)
name: "PrivateKeyInfo.version",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "privateKeyVersion"
}, {
// privateKeyAlgorithm
name: "PrivateKeyInfo.privateKeyAlgorithm",
tagClass: S.Class.UNIVERSAL,
type: S.Type.SEQUENCE,
constructed: !0,
value: [{
name: "AlgorithmIdentifier.algorithm",
tagClass: S.Class.UNIVERSAL,
type: S.Type.OID,
constructed: !1,
capture: "privateKeyOid"
}]
}, {
// PrivateKey
name: "PrivateKeyInfo",
tagClass: S.Class.UNIVERSAL,
type: S.Type.OCTETSTRING,
constructed: !1,
capture: "privateKey"
}]
}, i0 = {
// RSAPrivateKey
name: "RSAPrivateKey",
tagClass: S.Class.UNIVERSAL,
type: S.Type.SEQUENCE,
constructed: !0,
value: [{
// Version (INTEGER)
name: "RSAPrivateKey.version",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "privateKeyVersion"
}, {
// modulus (n)
name: "RSAPrivateKey.modulus",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "privateKeyModulus"
}, {
// publicExponent (e)
name: "RSAPrivateKey.publicExponent",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "privateKeyPublicExponent"
}, {
// privateExponent (d)
name: "RSAPrivateKey.privateExponent",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "privateKeyPrivateExponent"
}, {
// prime1 (p)
name: "RSAPrivateKey.prime1",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "privateKeyPrime1"
}, {
// prime2 (q)
name: "RSAPrivateKey.prime2",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "privateKeyPrime2"
}, {
// exponent1 (d mod (p-1))
name: "RSAPrivateKey.exponent1",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "privateKeyExponent1"
}, {
// exponent2 (d mod (q-1))
name: "RSAPrivateKey.exponent2",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "privateKeyExponent2"
}, {
// coefficient ((inverse of q) mod p)
name: "RSAPrivateKey.coefficient",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "privateKeyCoefficient"
}]
}, n0 = {
// RSAPublicKey
name: "RSAPublicKey",
tagClass: S.Class.UNIVERSAL,
type: S.Type.SEQUENCE,
constructed: !0,
value: [{
// modulus (n)
name: "RSAPublicKey.modulus",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "publicKeyModulus"
}, {
// publicExponent (e)
name: "RSAPublicKey.exponent",
tagClass: S.Class.UNIVERSAL,
type: S.Type.INTEGER,
constructed: !1,
capture: "publicKeyExponent"
}]
}, s0 = K.pki.rsa.publicKeyValidator = {
name: "SubjectPublicKeyInfo",
tagClass: S.Class.UNIVERSAL,
type: S.Type.SEQUENCE,
constructed: !0,
captureAsn1: "subjectPublicKeyInfo",
value: [{
name: "SubjectPublicKeyInfo.AlgorithmIdentifier",
tagClass: S.Class.UNIVERSAL,
type: S.Type.SEQUENCE,
constructed: !0,
value: [{
name: "AlgorithmIdentifier.algorithm",
tagClass: S.Class.UNIVERSAL,
type: S.Type.OID,
constructed: !1,
capture: "publicKeyOid"
}]
}, {
// subjectPublicKey
name: "SubjectPublicKeyInfo.subjectPublicKey",
tagClass: S.Class.UNIVERSAL,
type: S.Type.BITSTRING,
constructed: !1,
value: [{
// RSAPublicKey
name: "SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey",
tagClass: S.Class.UNIVERSAL,
type: S.Type.SEQUENCE,
constructed: !0,
optional: !0,
captureAsn1: "rsaPublicKey"
}]
}]
}, o0 = {
name: "DigestInfo",
tagClass: S.Class.UNIVERSAL,
type: S.Type.SEQUENCE,
constructed: !0,
value: [{
name: "DigestInfo.DigestAlgorithm",
tagClass: S.Class.UNIVERSAL,
type: S.Type.SEQUENCE,
constructed: !0,
value: [{
name: "DigestInfo.DigestAlgorithm.algorithmIdentifier",
tagClass: S.Class.UNIVERSAL,
type: S.Type.OID,
constructed: !1,
capture: "algorithmIdentifier"
}, {
// NULL parameters
name: "DigestInfo.DigestAlgorithm.parameters",
tagClass: S.Class.UNIVERSAL,
type: S.Type.NULL,
// captured only to check existence for md2 and md5
capture: "parameters",
optional: !0,
constructed: !1
}]
}, {
// digest
name: "DigestInfo.digest",
tagClass: S.Class.UNIVERSAL,
type: S.Type.OCTETSTRING,
constructed: !1,
capture: "digest"
}]
}, u0 = function(e) {
var t;
if (e.algorithm in q.oids)
t = q.oids[e.algorithm];
else {
var a = new Error("Unknown message digest algorithm.");
throw a.algorithm = e.algorithm, a;
}
var r = S.oidToDer(t).getBytes(), i = S.create(
S.Class.UNIVERSAL,
S.Type.SEQUENCE,
!0,
[]
), s = S.create(
S.Class.UNIVERSAL,
S.Type.SEQUENCE,
!0,
[]
);
s.value.push(S.create(
S.Class.UNIVERSAL,
S.Type.OID,
!1,
r
)), s.value.push(S.create(
S.Class.UNIVERSAL,
S.Type.NULL,
!1,
""
));
var n = S.create(
S.Class.UNIVERSAL,
S.Type.OCTETSTRING,
!1,
e.digest().getBytes()
);
return i.value.push(s), i.value.push(n), S.toDer(i).getBytes();
}, li = function(e, t, a) {
if (a)
return e.modPow(t.e, t.n);
if (!t.p || !t.q)
return e.modPow(t.d, t.n);
t.dP || (t.dP = t.d.mod(t.p.subtract(J.ONE))), t.dQ || (t.dQ = t.d.mod(t.q.subtract(J.ONE))), t.qInv || (t.qInv = t.q.modInverse(t.p));
var r;
do
r = new J(
K.util.bytesToHex(K.random.getBytes(t.n.bitLength() / 8)),
16
);
while (r.compareTo(t.n) >= 0 || !r.gcd(t.n).equals(J.ONE));
e = e.multiply(r.modPow(t.e, t.n)).mod(t.n);
for (var i = e.mod(t.p).modPow(t.dP, t.p), s = e.mod(t.q).modPow(t.dQ, t.q); i.compareTo(s) < 0; )
i = i.add(t.p);
var n = i.subtract(s).multiply(t.qInv).mod(t.p).multiply(t.q).add(s);
return n = n.multiply(r.modInverse(t.n)).mod(t.n), n;
};
q.rsa.encrypt = function(e, t, a) {
var r = a, i, s = Math.ceil(t.n.bitLength() / 8);
a !== !1 && a !== !0 ? (r = a === 2, i = ci(e, t, a)) : (i = K.util.createBuffer(), i.putBytes(e));
for (var n = new J(i.toHex(), 16), o = li(n, t, r), f = o.toString(16), u = K.util.createBuffer(), l = s - Math.ceil(f.length / 2); l > 0; )
u.putByte(0), --l;
return u.putBytes(K.util.hexToBytes(f)), u.getBytes();
};
q.rsa.decrypt = function(e, t, a, r) {
var i = Math.ceil(t.n.bitLength() / 8);
if (e.length !== i) {
var s = new Error("Encrypted message length is invalid.");
throw s.length = e.length, s.expected = i, s;
}
var n = new J(K.util.createBuffer(e).toHex(), 16);
if (n.compareTo(t.n) >= 0)
throw new Error("Encrypted message is invalid.");
for (var o = li(n, t, a), f = o.toString(16), u = K.util.createBuffer(), l = i - Math.ceil(f.length / 2); l > 0; )
u.putByte(0), --l;
return u.putBytes(K.util.hexToBytes(f)), r !== !1 ? dr(u.getBytes(), t, a) : u.getBytes();
};
q.rsa.createKeyPairGenerationState = function(e, t, a) {
typeof e == "string" && (e = parseInt(e, 10)), e = e || 2048, a = a || {};
var r = a.prng || K.random, i = {
// x is an array to fill with bytes
nextBytes: function(o) {
for (var f = r.getBytesSync(o.length), u = 0; u < o.length; ++u)
o[u] = f.charCodeAt(u);
}
}, s = a.algorithm || "PRIMEINC", n;
if (s === "PRIMEINC")
n = {
algorithm: s,
state: 0,
bits: e,
rng: i,
eInt: t || 65537,
e: new J(null),
p: null,
q: null,
qBits: e >> 1,
pBits: e - (e >> 1),
pqState: 0,
num: null,
keys: null
}, n.e.fromInt(n.eInt);
else
throw new Error("Invalid key generation algorithm: " + s);
return n;
};
q.rsa.stepKeyPairGenerationState = function(e, t) {
"algorithm" in e || (e.algorithm = "PRIMEINC");
var a = new J(null);
a.fromInt(30);
for (var r = 0, i = function(c, v) {
return c | v;
}, s = +/* @__PURE__ */ new Date(), n, o = 0; e.keys === null && (t <= 0 || o < t); ) {
if (e.state === 0) {
var f = e.p === null ? e.pBits : e.qBits, u = f - 1;
e.pqState === 0 ? (e.num = new J(f, e.rng), e.num.testBit(u) || e.num.bitwiseTo(
J.ONE.shiftLeft(u),
i,
e.num
), e.num.dAddOffset(31 - e.num.mod(a).byteValue(), 0), r = 0, ++e.pqState) : e.pqState === 1 ? e.num.bitLength() > f ? e.pqState = 0 : e.num.isProbablePrime(
l0(e.num.bitLength())
) ? ++e.pqState : e.num.dAddOffset(r0[r++ % 8], 0) : e.pqState === 2 ? e.pqState = e.num.subtract(J.ONE).gcd(e.e).compareTo(J.ONE) === 0 ? 3 : 0 : e.pqState === 3 && (e.pqState = 0, e.p === null ? e.p = e.num : e.q = e.num, e.p !== null && e.q !== null && ++e.state, e.num = null);
} else if (e.state === 1)
e.p.compareTo(e.q) < 0 && (e.num = e.p, e.p = e.q, e.q = e.num), ++e.state;
else if (e.state === 2)
e.p1 = e.p.subtract(J.ONE), e.q1 = e.q.subtract(J.ONE), e.phi = e.p1.multiply(e.q1), ++e.state;
else if (e.state === 3)
e.phi.gcd(e.e).compareTo(J.ONE) === 0 ? ++e.state : (e.p = null, e.q = null, e.state = 0);
else if (e.state === 4)
e.n = e.p.multiply(e.q), e.n.bitLength() === e.bits ? ++e.state : (e.q = null, e.state = 0);
else if (e.state === 5) {
var l = e.e.modInverse(e.phi);
e.keys = {
privateKey: q.rsa.setPrivateKey(
e.n,
e.e,
l,
e.p,
e.q,
l.mod(e.p1),
l.mod(e.q1),
e.q.modInverse(e.p)
),
publicKey: q.rsa.setPublicKey(e.n, e.e)
};
}
n = +/* @__PURE__ */ new Date(), o += n - s, s = n;
}
return e.keys !== null;
};
q.rsa.generateKeyPair = function(e, t, a, r) {
if (arguments.length === 1 ? typeof e == "object" ? (a = e, e = void 0) : typeof e == "function" && (r = e, e = void 0) : arguments.length === 2 ? typeof e == "number" ? typeof t == "function" ? (r = t, t = void 0) : typeof t != "number" && (a = t, t = void 0) : (a = e, r = t, e = void 0, t = void 0) : arguments.length === 3 && (typeof t == "number" ? typeof a == "function" && (r = a, a = void 0) : (r = a, a = t, t = void 0)), a = a || {}, e === void 0 && (e = a.bits || 2048), t === void 0 && (t = a.e || 65537), !K.options.usePureJavaScript && !a.prng && e >= 256 && e <= 16384 && (t === 65537 || t === 3)) {
if (r) {
if (Ra("generateKeyPair"))
return qr.generateKeyPair("rsa", {
modulusLength: e,
publicExponent: t,
publicKeyEncoding: {
type: "spki",
format: "pem"
},
privateKeyEncoding: {
type: "pkcs8",
format: "pem"
}
}, function(o, f, u) {
if (o)
return r(o);
r(null, {
privateKey: q.privateKeyFromPem(u),
publicKey: q.publicKeyFromPem(f)
});
});
if (wa("generateKey") && wa("exportKey"))
return $e.globalScope.crypto.subtle.generateKey({
name: "RSASSA-PKCS1-v1_5",
modulusLength: e,
publicExponent: Da(t),
hash: { name: "SHA-256" }
}, !0, ["sign", "verify"]).then(function(o) {
return $e.globalScope.crypto.subtle.exportKey(
"pkcs8",
o.privateKey
);
}).then(void 0, function(o) {
r(o);
}).then(function(o) {
if (o) {
var f = q.privateKeyFromAsn1(
S.fromDer(K.util.createBuffer(o))
);
r(null, {
privateKey: f,
publicKey: q.setRsaPublicKey(f.n, f.e)
});
}
});
if (La("generateKey") && La("exportKey")) {
var i = $e.globalScope.msCrypto.subtle.generateKey({
name: "RSASSA-PKCS1-v1_5",
modulusLength: e,
publicExponent: Da(t),
hash: { name: "SHA-256" }
}, !0, ["sign", "verify"]);
i.oncomplete = function(o) {
var f = o.target.result, u = $e.globalScope.msCrypto.subtle.exportKey(
"pkcs8",
f.privateKey
);
u.oncomplete = function(l) {
var c = l.target.result, v = q.privateKeyFromAsn1(
S.fromDer(K.util.createBuffer(c))
);
r(null, {
privateKey: v,
publicKey: q.setRsaPublicKey(v.n, v.e)
});
}, u.onerror = function(l) {
r(l);
};
}, i.onerror = function(o) {
r(o);
};
return;
}
} else if (Ra("generateKeyPairSync")) {
var s = qr.generateKeyPairSync("rsa", {
modulusLength: e,
publicExponent: t,
publicKeyEncoding: {
type: "spki",
format: "pem"
},
privateKeyEncoding: {
type: "pkcs8",
format: "pem"
}
});
return {
privateKey: q.privateKeyFromPem(s.privateKey),
publicKey: q.publicKeyFromPem(s.publicKey)
};
}
}
var n = q.rsa.createKeyPairGenerationState(e, t, a);
if (!r)
return q.rsa.stepKeyPairGenerationState(n, 0), n.keys;
f0(n, a, r);
};
q.setRsaPublicKey = q.rsa.setPublicKey = function(e, t) {
var a = {
n: e,
e: t
};
return a.encrypt = function(r, i, s) {
if (typeof i == "string" ? i = i.toUpperCase() : i === void 0 && (i = "RSAES-PKCS1-V1_5"), i === "RSAES-PKCS1-V1_5")
i = {
encode: function(o, f, u) {
return ci(o, f, 2).getBytes();
}
};
else if (i === "RSA-OAEP" || i === "RSAES-OAEP")
i = {
encode: function(o, f) {
return K.pkcs1.encode_rsa_oaep(f, o, s);
}
};
else if (["RAW", "NONE", "NULL", null].indexOf(i) !== -1)
i = { encode: function(o) {
return o;
} };
else if (typeof i == "string")
throw new Error('Unsupported encryption scheme: "' + i + '".');
var n = i.encode(r, a, !0);
return q.rsa.encrypt(n, a, !0);
}, a.verify = function(r, i, s, n) {
typeof s == "string" ? s = s.toUpperCase() : s === void 0 && (s = "RSASSA-PKCS1-V1_5"), n === void 0 && (n = {
_parseAllDigestBytes: !0
}), "_parseAllDigestBytes" in n || (n._parseAllDigestBytes = !0), s === "RSASSA-PKCS1-V1_5" ? s = {
verify: function(f, u) {
u = dr(u, a, !0);
var l = S.fromDer(u, {
parseAllBytes: n._parseAllDigestBytes
}), c = {}, v = [];
if (!S.validate(l, o0, c, v)) {
var C = new Error(
"ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value."
);
throw C.errors = v, C;
}
var y = S.derToOid(c.algorithmIdentifier);
if (!(y === K.oids.md2 || y === K.oids.md5 || y === K.oids.sha1 || y === K.oids.sha224 || y === K.oids.sha256 || y === K.oids.sha384 || y === K.oids.sha512 || y === K.oids["sha512-224"] || y === K.oids["sha512-256"])) {
var C = new Error(
"Unknown RSASSA-PKCS1-v1_5 DigestAlgorithm identifier."
);
throw C.oid = y, C;
}
if ((y === K.oids.md2 || y === K.oids.md5) && !("parameters" in c))
throw new Error(
"ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value. Missing algorithm identifier NULL parameters."
);
return f === c.digest;
}
} : (s === "NONE" || s === "NULL" || s === null) && (s = {
verify: function(f, u) {
return u = dr(u, a, !0), f === u;
}
});
var o = q.rsa.decrypt(i, a, !0, !1);
return s.verify(r, o, a.n.bitLength());
}, a;
};
q.setRsaPrivateKey = q.rsa.setPrivateKey = function(e, t, a, r, i, s, n, o) {
var f = {
n: e,
e: t,
d: a,
p: r,
q: i,
dP: s,
dQ: n,
qInv: o
};
return f.decrypt = function(u, l, c) {
typeof l == "string" ? l = l.toUpperCase() : l === void 0 && (l = "RSAES-PKCS1-V1_5");
var v = q.rsa.decrypt(u, f, !1, !1);
if (l === "RSAES-PKCS1-V1_5")
l = { decode: dr };
else if (l === "RSA-OAEP" || l === "RSAES-OAEP")
l = {
decode: function(C, y) {
return K.pkcs1.decode_rsa_oaep(y, C, c);
}
};
else if (["RAW", "NONE", "NULL", null].indexOf(l) !== -1)
l = { decode: function(C) {
return C;
} };
else
throw new Error('Unsupported encryption scheme: "' + l + '".');
return l.decode(v, f, !1);
}, f.sign = function(u, l) {
var c = !1;
typeof l == "string" && (l = l.toUpperCase()), l === void 0 || l === "RSASSA-PKCS1-V1_5" ? (l = { encode: u0 }, c = 1) : (l === "NONE" || l === "NULL" || l === null) && (l = { encode: function() {
return u;
} }, c = 1);
var v = l.encode(u, f.n.bitLength());
return q.rsa.encrypt(v, f, c);
}, f;
};
q.wrapRsaPrivateKey = function(e) {
return S.create(S.Class.UNIVERSAL, S.Type.SEQUENCE, !0, [
// version (0)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
S.integerToDer(0).getBytes()
),
// privateKeyAlgorithm
S.create(S.Class.UNIVERSAL, S.Type.SEQUENCE, !0, [
S.create(
S.Class.UNIVERSAL,
S.Type.OID,
!1,
S.oidToDer(q.oids.rsaEncryption).getBytes()
),
S.create(S.Class.UNIVERSAL, S.Type.NULL, !1, "")
]),
// PrivateKey
S.create(
S.Class.UNIVERSAL,
S.Type.OCTETSTRING,
!1,
S.toDer(e).getBytes()
)
]);
};
q.privateKeyFromAsn1 = function(e) {
var t = {}, a = [];
if (S.validate(e, a0, t, a) && (e = S.fromDer(K.util.createBuffer(t.privateKey))), t = {}, a = [], !S.validate(e, i0, t, a)) {
var r = new Error("Cannot read private key. ASN.1 object does not contain an RSAPrivateKey.");
throw r.errors = a, r;
}
var i, s, n, o, f, u, l, c;
return i = K.util.createBuffer(t.privateKeyModulus).toHex(), s = K.util.createBuffer(t.privateKeyPublicExponent).toHex(), n = K.util.createBuffer(t.privateKeyPrivateExponent).toHex(), o = K.util.createBuffer(t.privateKeyPrime1).toHex(), f = K.util.createBuffer(t.privateKeyPrime2).toHex(), u = K.util.createBuffer(t.privateKeyExponent1).toHex(), l = K.util.createBuffer(t.privateKeyExponent2).toHex(), c = K.util.createBuffer(t.privateKeyCoefficient).toHex(), q.setRsaPrivateKey(
new J(i, 16),
new J(s, 16),
new J(n, 16),
new J(o, 16),
new J(f, 16),
new J(u, 16),
new J(l, 16),
new J(c, 16)
);
};
q.privateKeyToAsn1 = q.privateKeyToRSAPrivateKey = function(e) {
return S.create(S.Class.UNIVERSAL, S.Type.SEQUENCE, !0, [
// version (0 = only 2 primes, 1 multiple primes)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
S.integerToDer(0).getBytes()
),
// modulus (n)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
rt(e.n)
),
// publicExponent (e)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
rt(e.e)
),
// privateExponent (d)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
rt(e.d)
),
// privateKeyPrime1 (p)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
rt(e.p)
),
// privateKeyPrime2 (q)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
rt(e.q)
),
// privateKeyExponent1 (dP)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
rt(e.dP)
),
// privateKeyExponent2 (dQ)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
rt(e.dQ)
),
// coefficient (qInv)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
rt(e.qInv)
)
]);
};
q.publicKeyFromAsn1 = function(e) {
var t = {}, a = [];
if (S.validate(e, s0, t, a)) {
var r = S.derToOid(t.publicKeyOid);
if (r !== q.oids.rsaEncryption) {
var i = new Error("Cannot read public key. Unknown OID.");
throw i.oid = r, i;
}
e = t.rsaPublicKey;
}
if (a = [], !S.validate(e, n0, t, a)) {
var i = new Error("Cannot read public key. ASN.1 object does not contain an RSAPublicKey.");
throw i.errors = a, i;
}
var s = K.util.createBuffer(t.publicKeyModulus).toHex(), n = K.util.createBuffer(t.publicKeyExponent).toHex();
return q.setRsaPublicKey(
new J(s, 16),
new J(n, 16)
);
};
q.publicKeyToAsn1 = q.publicKeyToSubjectPublicKeyInfo = function(e) {
return S.create(S.Class.UNIVERSAL, S.Type.SEQUENCE, !0, [
// AlgorithmIdentifier
S.create(S.Class.UNIVERSAL, S.Type.SEQUENCE, !0, [
// algorithm
S.create(
S.Class.UNIVERSAL,
S.Type.OID,
!1,
S.oidToDer(q.oids.rsaEncryption).getBytes()
),
// parameters (null)
S.create(S.Class.UNIVERSAL, S.Type.NULL, !1, "")
]),
// subjectPublicKey
S.create(S.Class.UNIVERSAL, S.Type.BITSTRING, !1, [
q.publicKeyToRSAPublicKey(e)
])
]);
};
q.publicKeyToRSAPublicKey = function(e) {
return S.create(S.Class.UNIVERSAL, S.Type.SEQUENCE, !0, [
// modulus (n)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
rt(e.n)
),
// publicExponent (e)
S.create(
S.Class.UNIVERSAL,
S.Type.INTEGER,
!1,
rt(e.e)
)
]);
};
function ci(e, t, a) {
var r = K.util.createBuffer(), i = Math.ceil(t.n.bitLength() / 8);
if (e.length > i - 11) {
var s = new Error("Message is too long for PKCS#1 v1.5 padding.");
throw s.length = e.length, s.max = i - 11, s;
}
r.putByte(0), r.putByte(a);
var n = i - 3 - e.length, o;
if (a === 0 || a === 1) {
o = a === 0 ? 0 : 255;
for (var f = 0; f < n; ++f)
r.putByte(o);
} else
for (; n > 0; ) {
for (var u = 0, l = K.random.getBytes(n), f = 0; f < n; ++f)
o = l.charCodeAt(f), o === 0 ? ++u : r.putByte(o);
n = u;
}
return r.putByte(0), r.putBytes(e), r;
}
function dr(e, t, a, r) {
var i = Math.ceil(t.n.bitLength() / 8), s = K.util.createBuffer(e), n = s.getByte(), o = s.getByte();
if (n !== 0 || a && o !== 0 && o !== 1 || !a && o != 2 || a && o === 0 && typeof r > "u")
throw new Error("Encryption block is invalid.");
var f = 0;
if (o === 0) {
f = i - 3 - r;
for (var u = 0; u < f; ++u)
if (s.getByte() !== 0)
throw new Error("Encryption block is invalid.");
} else if (o === 1)
for (f = 0; s.length() > 1; ) {
if (s.getByte() !== 255) {
--s.read;
break;
}
++f;
}
else if (o === 2)
for (f = 0; s.length() > 1; ) {
if (s.getByte() === 0) {
--s.read;
break;
}
++f;
}
var l = s.getByte();
if (l !== 0 || f !== i - 3 - s.length())
throw new Error("Encryption block is invalid.");
return s.getBytes();
}
function f0(e, t, a) {
typeof t == "function" && (a = t, t = {}), t = t || {};
var r = {
algorithm: {
name: t.algorithm || "PRIMEINC",
options: {
workers: t.workers || 2,
workLoad: t.workLoad || 100,
workerScript: t.workerScript
}
}
};
"prng" in t && (r.prng = t.prng), i();
function i() {
s(e.pBits, function(o, f) {
if (o)
return a(o);
if (e.p = f, e.q !== null)
return n(o, e.q);
s(e.qBits, n);
});
}
function s(o, f) {
K.prime.generateProbablePrime(o, r, f);
}
function n(o, f) {
if (o)
return a(o);
if (e.q = f, e.p.compareTo(e.q) < 0) {
var u = e.p;
e.p = e.q, e.q = u;
}
if (e.p.subtract(J.ONE).gcd(e.e).compareTo(J.ONE) !== 0) {
e.p = null, i();
return;
}
if (e.q.subtract(J.ONE).gcd(e.e).compareTo(J.ONE) !== 0) {
e.q = null, s(e.qBits, n);
return;
}
if (e.p1 = e.p.subtract(J.ONE), e.q1 = e.q.subtract(J.ONE), e.phi = e.p1.multiply(e.q1), e.phi.gcd(e.e).compareTo(J.ONE) !== 0) {
e.p = e.q = null, i();
return;
}
if (e.n = e.p.multiply(e.q), e.n.bitLength() !== e.bits) {
e.q = null, s(e.qBits, n);
return;
}
var l = e.e.modInverse(e.phi);
e.keys = {
privateKey: q.rsa.setPrivateKey(
e.n,
e.e,
l,
e.p,
e.q,
l.mod(e.p1),
l.mod(e.q1),
e.q.modInverse(e.p)
),
publicKey: q.rsa.setPublicKey(e.n, e.e)
}, a(null, e.keys);
}
}
function rt(e) {
var t = e.toString(16);
t[0] >= "8" && (t = "00" + t);
var a = K.util.hexToBytes(t);
return a.length > 1 && // leading 0x00 for positive integer
(a.charCodeAt(0) === 0 && !(a.charCodeAt(1) & 128) || // leading 0xFF for negative integer
a.charCodeAt(0) === 255 && (a.charCodeAt(1) & 128) === 128) ? a.substr(1) : a;
}
function l0(e) {
return e <= 100 ? 27 : e <= 150 ? 18 : e <= 200 ? 15 : e <= 250 ? 12 : e <= 300 ? 9 : e <= 350 ? 8 : e <= 400 ? 7 : e <= 500 ? 6 : e <= 600 ? 5 : e <= 800 ? 4 : e <= 1250 ? 3 : 2;
}
function Ra(e) {
return K.util.isNodejs && typeof qr[e] == "function";
}
function wa(e) {
return typeof $e.globalScope < "u" && typeof $e.globalScope.crypto == "object" && typeof $e.globalScope.crypto.subtle == "object" && typeof $e.globalScope.crypto.subtle[e] == "function";
}
function La(e) {
return typeof $e.globalScope < "u" && typeof $e.globalScope.msCrypto == "object" && typeof $e.globalScope.msCrypto.subtle == "object" && typeof $e.globalScope.msCrypto.subtle[e] == "function";
}
function Da(e) {
for (var t = K.util.hexToBytes(e.toString(16)), a = new Uint8Array(t.length), r = 0; r < t.length; ++r)
a[r] = t.charCodeAt(r);
return a;
}
var O = z;
if (typeof c0 > "u")
var c0 = O.jsbn.BigInteger;
var A = O.asn1, Q = O.pki = O.pki || {};
Q.pbe = O.pbe = O.pbe || {};
var At = Q.oids, h0 = {
name: "EncryptedPrivateKeyInfo",
tagClass: A.Class.UNIVERSAL,
type: A.Type.SEQUENCE,
constructed: !0,
value: [{
name: "EncryptedPrivateKeyInfo.encryptionAlgorithm",
tagClass: A.Class.UNIVERSAL,
type: A.Type.SEQUENCE,
constructed: !0,
value: [{
name: "AlgorithmIdentifier.algorithm",
tagClass: A.Class.UNIVERSAL,
type: A.Type.OID,
constructed: !1,
capture: "encryptionOid"
}, {
name: "AlgorithmIdentifier.parameters",
tagClass: A.Class.UNIVERSAL,
type: A.Type.SEQUENCE,
constructed: !0,
captureAsn1: "encryptionParams"
}]
}, {
// encryptedData
name: "EncryptedPrivateKeyInfo.encryptedData",
tagClass: A.Class.UNIVERSAL,
type: A.Type.OCTETSTRING,
constructed: !1,
capture: "encryptedData"
}]
}, d0 = {
name: "PBES2Algorithms",
tagClass: A.Class.UNIVERSAL,
type: A.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PBES2Algorithms.keyDerivationFunc",
tagClass: A.Class.UNIVERSAL,
type: A.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PBES2Algorithms.keyDerivationFunc.oid",
tagClass: A.Class.UNIVERSAL,
type: A.Type.OID,
constructed: !1,
capture: "kdfOid"
}, {
name: "PBES2Algorithms.params",
tagClass: A.Class.UNIVERSAL,
type: A.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PBES2Algorithms.params.salt",
tagClass: A.Class.UNIVERSAL,
type: A.Type.OCTETSTRING,
constructed: !1,
capture: "kdfSalt"
}, {
name: "PBES2Algorithms.params.iterationCount",
tagClass: A.Class.UNIVERSAL,
type: A.Type.INTEGER,
constructed: !1,
capture: "kdfIterationCount"
}, {
name: "PBES2Algorithms.params.keyLength",
tagClass: A.Class.UNIVERSAL,
type: A.Type.INTEGER,
constructed: !1,
optional: !0,
capture: "keyLength"
}, {
// prf
name: "PBES2Algorithms.params.prf",
tagClass: A.Class.UNIVERSAL,
type: A.Type.SEQUENCE,
constructed: !0,
optional: !0,
value: [{
name: "PBES2Algorithms.params.prf.algorithm",
tagClass: A.Class.UNIVERSAL,
type: A.Type.OID,
constructed: !1,
capture: "prfOid"
}]
}]
}]
}, {
name: "PBES2Algorithms.encryptionScheme",
tagClass: A.Class.UNIVERSAL,
type: A.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PBES2Algorithms.encryptionScheme.oid",
tagClass: A.Class.UNIVERSAL,
type: A.Type.OID,
constructed: !1,
capture: "encOid"
}, {
name: "PBES2Algorithms.encryptionScheme.iv",
tagClass: A.Class.UNIVERSAL,
type: A.Type.OCTETSTRING,
constructed: !1,
capture: "encIv"
}]
}]
}, p0 = {
name: "pkcs-12PbeParams",
tagClass: A.Class.UNIVERSAL,
type: A.Type.SEQUENCE,
constructed: !0,
value: [{
name: "pkcs-12PbeParams.salt",
tagClass: A.Class.UNIVERSAL,
type: A.Type.OCTETSTRING,
constructed: !1,
capture: "salt"
}, {
name: "pkcs-12PbeParams.iterations",
tagClass: A.Class.UNIVERSAL,
type: A.Type.INTEGER,
constructed: !1,
capture: "iterations"
}]
};
Q.encryptPrivateKeyInfo = function(e, t, a) {
a = a || {}, a.saltSize = a.saltSize || 8, a.count = a.count || 2048, a.algorithm = a.algorithm || "aes128", a.prfAlgorithm = a.prfAlgorithm || "sha1";
var r = O.random.getBytesSync(a.saltSize), i = a.count, s = A.integerToDer(i), n, o, f;
if (a.algorithm.indexOf("aes") === 0 || a.algorithm === "des") {
var u, l, c;
switch (a.algorithm) {
case "aes128":
n = 16, u = 16, l = At["aes128-CBC"], c = O.aes.createEncryptionCipher;
break;
case "aes192":
n = 24, u = 16, l = At["aes192-CBC"], c = O.aes.createEncryptionCipher;
break;
case "aes256":
n = 32, u = 16, l = At["aes256-CBC"], c = O.aes.createEncryptionCipher;
break;
case "des":
n = 8, u = 8, l = At.desCBC, c = O.des.createEncryptionCipher;
break;
default:
var v = new Error("Cannot encrypt private key. Unknown encryption algorithm.");
throw v.algorithm = a.algorithm, v;
}
var C = "hmacWith" + a.prfAlgorithm.toUpperCase(), y = di(C), x = O.pkcs5.pbkdf2(t, r, i, n, y), T = O.random.getBytesSync(u), I = c(x);
I.start(T), I.update(A.toDer(e)), I.finish(), f = I.output.getBytes();
var B = v0(r, s, n, C);
o = A.create(
A.Class.UNIVERSAL,
A.Type.SEQUENCE,
!0,
[
A.create(
A.Class.UNIVERSAL,
A.Type.OID,
!1,
A.oidToDer(At.pkcs5PBES2).getBytes()
),
A.create(A.Class.UNIVERSAL, A.Type.SEQUENCE, !0, [
// keyDerivationFunc
A.create(A.Class.UNIVERSAL, A.Type.SEQUENCE, !0, [
A.create(
A.Class.UNIVERSAL,
A.Type.OID,
!1,
A.oidToDer(At.pkcs5PBKDF2).getBytes()
),
// PBKDF2-params
B
]),
// encryptionScheme
A.create(A.Class.UNIVERSAL, A.Type.SEQUENCE, !0, [
A.create(
A.Class.UNIVERSAL,
A.Type.OID,
!1,
A.oidToDer(l).getBytes()
),
// iv
A.create(
A.Class.UNIVERSAL,
A.Type.OCTETSTRING,
!1,
T
)
])
])
]
);
} else if (a.algorithm === "3des") {
n = 24;
var b = new O.util.ByteBuffer(r), x = Q.pbe.generatePkcs12Key(t, b, 1, i, n), T = Q.pbe.generatePkcs12Key(t, b, 2, i, n), I = O.des.createEncryptionCipher(x);
I.start(T), I.update(A.toDer(e)), I.finish(), f = I.output.getBytes(), o = A.create(
A.Class.UNIVERSAL,
A.Type.SEQUENCE,
!0,
[
A.create(
A.Class.UNIVERSAL,
A.Type.OID,
!1,
A.oidToDer(At["pbeWithSHAAnd3-KeyTripleDES-CBC"]).getBytes()
),
// pkcs-12PbeParams
A.create(A.Class.UNIVERSAL, A.Type.SEQUENCE, !0, [
// salt
A.create(A.Class.UNIVERSAL, A.Type.OCTETSTRING, !1, r),
// iteration count
A.create(
A.Class.UNIVERSAL,
A.Type.INTEGER,
!1,
s.getBytes()
)
])
]
);
} else {
var v = new Error("Cannot encrypt private key. Unknown encryption algorithm.");
throw v.algorithm = a.algorithm, v;
}
var V = A.create(A.Class.UNIVERSAL, A.Type.SEQUENCE, !0, [
// encryptionAlgorithm
o,
// encryptedData
A.create(
A.Class.UNIVERSAL,
A.Type.OCTETSTRING,
!1,
f
)
]);
return V;
};
Q.decryptPrivateKeyInfo = function(e, t) {
var a = null, r = {}, i = [];
if (!A.validate(e, h0, r, i)) {
var s = new Error("Cannot read encrypted private key. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");
throw s.errors = i, s;
}
var n = A.derToOid(r.encryptionOid), o = Q.pbe.getCipher(n, r.encryptionParams, t), f = O.util.createBuffer(r.encryptedData);
return o.update(f), o.finish() && (a = A.fromDer(o.output)), a;
};
Q.encryptedPrivateKeyToPem = function(e, t) {
var a = {
type: "ENCRYPTED PRIVATE KEY",
body: A.toDer(e).getBytes()
};
return O.pem.encode(a, { maxline: t });
};
Q.encryptedPrivateKeyFromPem = function(e) {
var t = O.pem.decode(e)[0];
if (t.type !== "ENCRYPTED PRIVATE KEY") {
var a = new Error('Could not convert encrypted private key from PEM; PEM header type is "ENCRYPTED PRIVATE KEY".');
throw a.headerType = t.type, a;
}
if (t.procType && t.procType.type === "ENCRYPTED")
throw new Error("Could not convert encrypted private key from PEM; PEM is encrypted.");
return A.fromDer(t.body);
};
Q.encryptRsaPrivateKey = function(e, t, a) {
if (a = a || {}, !a.legacy) {
var r = Q.wrapRsaPrivateKey(Q.privateKeyToAsn1(e));
return r = Q.encryptPrivateKeyInfo(r, t, a), Q.encryptedPrivateKeyToPem(r);
}
var i, s, n, o;
switch (a.algorithm) {
case "aes128":
i = "AES-128-CBC", n = 16, s = O.random.getBytesSync(16), o = O.aes.createEncryptionCipher;
break;
case "aes192":
i = "AES-192-CBC", n = 24, s = O.random.getBytesSync(16), o = O.aes.createEncryptionCipher;
break;
case "aes256":
i = "AES-256-CBC", n = 32, s = O.random.getBytesSync(16), o = O.aes.createEncryptionCipher;
break;
case "3des":
i = "DES-EDE3-CBC", n = 24, s = O.random.getBytesSync(8), o = O.des.createEncryptionCipher;
break;
case "des":
i = "DES-CBC", n = 8, s = O.random.getBytesSync(8), o = O.des.createEncryptionCipher;
break;
default:
var f = new Error('Could not encrypt RSA private key; unsupported encryption algorithm "' + a.algorithm + '".');
throw f.algorithm = a.algorithm, f;
}
var u = O.pbe.opensslDeriveBytes(t, s.substr(0, 8), n), l = o(u);
l.start(s), l.update(A.toDer(Q.privateKeyToAsn1(e))), l.finish();
var c = {
type: "RSA PRIVATE KEY",
procType: {
version: "4",
type: "ENCRYPTED"
},
dekInfo: {
algorithm: i,
parameters: O.util.bytesToHex(s).toUpperCase()
},
body: l.output.getBytes()
};
return O.pem.encode(c);
};
Q.decryptRsaPrivateKey = function(e, t) {
var a = null, r = O.pem.decode(e)[0];
if (r.type !== "ENCRYPTED PRIVATE KEY" && r.type !== "PRIVATE KEY" && r.type !== "RSA PRIVATE KEY") {
var i = new Error('Could not convert private key from PEM; PEM header type is not "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", or "RSA PRIVATE KEY".');
throw i.headerType = i, i;
}
if (r.procType && r.procType.type === "ENCRYPTED") {
var s, n;
switch (r.dekInfo.algorithm) {
case "DES-CBC":
s = 8, n = O.des.createDecryptionCipher;
break;
case "DES-EDE3-CBC":
s = 24, n = O.des.createDecryptionCipher;
break;
case "AES-128-CBC":
s = 16, n = O.aes.createDecryptionCipher;
break;
case "AES-192-CBC":
s = 24, n = O.aes.createDecryptionCipher;
break;
case "AES-256-CBC":
s = 32, n = O.aes.createDecryptionCipher;
break;
case "RC2-40-CBC":
s = 5, n = function(c) {
return O.rc2.createDecryptionCipher(c, 40);
};
break;
case "RC2-64-CBC":
s = 8, n = function(c) {
return O.rc2.createDecryptionCipher(c, 64);
};
break;
case "RC2-128-CBC":
s = 16, n = function(c) {
return O.rc2.createDecryptionCipher(c, 128);
};
break;
default:
var i = new Error('Could not decrypt private key; unsupported encryption algorithm "' + r.dekInfo.algorithm + '".');
throw i.algorithm = r.dekInfo.algorithm, i;
}
var o = O.util.hexToBytes(r.dekInfo.parameters), f = O.pbe.opensslDeriveBytes(t, o.substr(0, 8), s), u = n(f);
if (u.start(o), u.update(O.util.createBuffer(r.body)), u.finish())
a = u.output.getBytes();
else
return a;
} else
a = r.body;
return r.type === "ENCRYPTED PRIVATE KEY" ? a = Q.decryptPrivateKeyInfo(A.fromDer(a), t) : a = A.fromDer(a), a !== null && (a = Q.privateKeyFromAsn1(a)), a;
};
Q.pbe.generatePkcs12Key = function(e, t, a, r, i, s) {
var n, o;
if (typeof s > "u" || s === null) {
if (!("sha1" in O.md))
throw new Error('"sha1" hash algorithm unavailable.');
s = O.md.sha1.create();
}
var f = s.digestLength, u = s.blockLength, l = new O.util.ByteBuffer(), c = new O.util.ByteBuffer();
if (e != null) {
for (o = 0; o < e.length; o++)
c.putInt16(e.charCodeAt(o));
c.putInt16(0);
}
var v = c.length(), C = t.length(), y = new O.util.ByteBuffer();
y.fillWithByte(a, u);
var x = u * Math.ceil(C / u), T = new O.util.ByteBuffer();
for (o = 0; o < x; o++)
T.putByte(t.at(o % C));
var I = u * Math.ceil(v / u), B = new O.util.ByteBuffer();
for (o = 0; o < I; o++)
B.putByte(c.at(o % v));
var b = T;
b.putBuffer(B);
for (var V = Math.ceil(i / f), D = 1; D <= V; D++) {
var w = new O.util.ByteBuffer();
w.putBytes(y.bytes()), w.putBytes(b.bytes());
for (var G = 0; G < r; G++)
s.start(), s.update(w.getBytes()), w = s.digest();
var Y = new O.util.ByteBuffer();
for (o = 0; o < u; o++)
Y.putByte(w.at(o % f));
var re = Math.ceil(C / u) + Math.ceil(v / u), ae = new O.util.ByteBuffer();
for (n = 0; n < re; n++) {
var ie = new O.util.ByteBuffer(b.getBytes(u)), he = 511;
for (o = Y.length() - 1; o >= 0; o--)
he = he >> 8, he += Y.at(o) + ie.at(o), ie.setAt(o, he & 255);
ae.putBuffer(ie);
}
b = ae, l.putBuffer(w);
}
return l.truncate(l.length() - i), l;
};
Q.pbe.getCipher = function(e, t, a) {
switch (e) {
case Q.oids.pkcs5PBES2:
return Q.pbe.getCipherForPBES2(e, t, a);
case Q.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:
case Q.oids["pbewithSHAAnd40BitRC2-CBC"]:
return Q.pbe.getCipherForPKCS12PBE(e, t, a);
default:
var r = new Error("Cannot read encrypted PBE data block. Unsupported OID.");
throw r.oid = e, r.supportedOids = [
"pkcs5PBES2",
"pbeWithSHAAnd3-KeyTripleDES-CBC",
"pbewithSHAAnd40BitRC2-CBC"
], r;
}
};
Q.pbe.getCipherForPBES2 = function(e, t, a) {
var r = {}, i = [];
if (!A.validate(t, d0, r, i)) {
var s = new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");
throw s.errors = i, s;
}
if (e = A.derToOid(r.kdfOid), e !== Q.oids.pkcs5PBKDF2) {
var s = new Error("Cannot read encrypted private key. Unsupported key derivation function OID.");
throw s.oid = e, s.supportedOids = ["pkcs5PBKDF2"], s;
}
if (e = A.derToOid(r.encOid), e !== Q.oids["aes128-CBC"] && e !== Q.oids["aes192-CBC"] && e !== Q.oids["aes256-CBC"] && e !== Q.oids["des-EDE3-CBC"] && e !== Q.oids.desCBC) {
var s = new Error("Cannot read encrypted private key. Unsupported encryption scheme OID.");
throw s.oid = e, s.supportedOids = [
"aes128-CBC",
"aes192-CBC",
"aes256-CBC",
"des-EDE3-CBC",
"desCBC"
], s;
}
var n = r.kdfSalt, o = O.util.createBuffer(r.kdfIterationCount);
o = o.getInt(o.length() << 3);
var f, u;
switch (Q.oids[e]) {
case "aes128-CBC":
f = 16, u = O.aes.createDecryptionCipher;
break;
case "aes192-CBC":
f = 24, u = O.aes.createDecryptionCipher;
break;
case "aes256-CBC":
f = 32, u = O.aes.createDecryptionCipher;
break;
case "des-EDE3-CBC":
f = 24, u = O.des.createDecryptionCipher;
break;
case "desCBC":
f = 8, u = O.des.createDecryptionCipher;
break;
}
var l = hi(r.prfOid), c = O.pkcs5.pbkdf2(a, n, o, f, l), v = r.encIv, C = u(c);
return C.start(v), C;
};
Q.pbe.getCipherForPKCS12PBE = function(e, t, a) {
var r = {}, i = [];
if (!A.validate(t, p0, r, i)) {
var s = new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");
throw s.errors = i, s;
}
var n = O.util.createBuffer(r.salt), o = O.util.createBuffer(r.iterations);
o = o.getInt(o.length() << 3);
var f, u, l;
switch (e) {
case Q.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:
f = 24, u = 8, l = O.des.startDecrypting;
break;
case Q.oids["pbewithSHAAnd40BitRC2-CBC"]:
f = 5, u = 8, l = function(x, T) {
var I = O.rc2.createDecryptionCipher(x, 40);
return I.start(T, null), I;
};
break;
default:
var s = new Error("Cannot read PKCS #12 PBE data block. Unsupported OID.");
throw s.oid = e, s;
}
var c = hi(r.prfOid), v = Q.pbe.generatePkcs12Key(a, n, 1, o, f, c);
c.start();
var C = Q.pbe.generatePkcs12Key(a, n, 2, o, u, c);
return l(v, C);
};
Q.pbe.opensslDeriveBytes = function(e, t, a, r) {
if (typeof r > "u" || r === null) {
if (!("md5" in O.md))
throw new Error('"md5" hash algorithm unavailable.');
r = O.md.md5.create();
}
t === null && (t = "");
for (var i = [ka(r, e + t)], s = 16, n = 1; s < a; ++n, s += 16)
i.push(ka(r, i[n - 1] + e + t));
return i.join("").substr(0, a);
};
function ka(e, t) {
return e.start().update(t).digest().getBytes();
}
function hi(e) {
var t;
if (!e)
t = "hmacWithSHA1";
else if (t = Q.oids[A.derToOid(e)], !t) {
var a = new Error("Unsupported PRF OID.");
throw a.oid = e, a.supported = [
"hmacWithSHA1",
"hmacWithSHA224",
"hmacWithSHA256",
"hmacWithSHA384",
"hmacWithSHA512"
], a;
}
return di(t);
}
function di(e) {
var t = O.md;
switch (e) {
case "hmacWithSHA224":
t = O.md.sha512;
case "hmacWithSHA1":
case "hmacWithSHA256":
case "hmacWithSHA384":
case "hmacWithSHA512":
e = e.substr(8).toLowerCase();
break;
default:
var a = new Error("Unsupported PRF algorithm.");
throw a.algorithm = e, a.supported = [
"hmacWithSHA1",
"hmacWithSHA224",
"hmacWithSHA256",
"hmacWithSHA384",
"hmacWithSHA512"
], a;
}
if (!t || !(e in t))
throw new Error("Unknown hash algorithm: " + e);
return t[e].create();
}
function v0(e, t, a, r) {
var i = A.create(A.Class.UNIVERSAL, A.Type.SEQUENCE, !0, [
// salt
A.create(
A.Class.UNIVERSAL,
A.Type.OCTETSTRING,
!1,
e
),
// iteration count
A.create(
A.Class.UNIVERSAL,
A.Type.INTEGER,
!1,
t.getBytes()
)
]);
return r !== "hmacWithSHA1" && i.value.push(
// key length
A.create(
A.Class.UNIVERSAL,
A.Type.INTEGER,
!1,
O.util.hexToBytes(a.toString(16))
),
// AlgorithmIdentifier
A.create(A.Class.UNIVERSAL, A.Type.SEQUENCE, !0, [
// algorithm
A.create(
A.Class.UNIVERSAL,
A.Type.OID,
!1,
A.oidToDer(Q.oids[r]).getBytes()
),
// parameters (null)
A.create(A.Class.UNIVERSAL, A.Type.NULL, !1, "")
])
), i;
}
var Ft = z, P = Ft.asn1, Qt = Ft.pkcs7asn1 = Ft.pkcs7asn1 || {};
Ft.pkcs7 = Ft.pkcs7 || {};
Ft.pkcs7.asn1 = Qt;
var pi = {
name: "ContentInfo",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "ContentInfo.ContentType",
tagClass: P.Class.UNIVERSAL,
type: P.Type.OID,
constructed: !1,
capture: "contentType"
}, {
name: "ContentInfo.content",
tagClass: P.Class.CONTEXT_SPECIFIC,
type: 0,
constructed: !0,
optional: !0,
captureAsn1: "content"
}]
};
Qt.contentInfoValidator = pi;
var vi = {
name: "EncryptedContentInfo",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "EncryptedContentInfo.contentType",
tagClass: P.Class.UNIVERSAL,
type: P.Type.OID,
constructed: !1,
capture: "contentType"
}, {
name: "EncryptedContentInfo.contentEncryptionAlgorithm",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "EncryptedContentInfo.contentEncryptionAlgorithm.algorithm",
tagClass: P.Class.UNIVERSAL,
type: P.Type.OID,
constructed: !1,
capture: "encAlgorithm"
}, {
name: "EncryptedContentInfo.contentEncryptionAlgorithm.parameter",
tagClass: P.Class.UNIVERSAL,
captureAsn1: "encParameter"
}]
}, {
name: "EncryptedContentInfo.encryptedContent",
tagClass: P.Class.CONTEXT_SPECIFIC,
type: 0,
/* The PKCS#7 structure output by OpenSSL somewhat differs from what
* other implementations do generate.
*
* OpenSSL generates a structure like this:
* SEQUENCE {
* ...
* [0]
* 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38
* C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45
* ...
* }
*
* Whereas other implementations (and this PKCS#7 module) generate:
* SEQUENCE {
* ...
* [0] {
* OCTET STRING
* 26 DA 67 D2 17 9C 45 3C B1 2A A8 59 2F 29 33 38
* C3 C3 DF 86 71 74 7A 19 9F 40 D0 29 BE 85 90 45
* ...
* }
* }
*
* In order to support both, we just capture the context specific
* field here. The OCTET STRING bit is removed below.
*/
capture: "encryptedContent",
captureAsn1: "encryptedContentAsn1"
}]
};
Qt.envelopedDataValidator = {
name: "EnvelopedData",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "EnvelopedData.Version",
tagClass: P.Class.UNIVERSAL,
type: P.Type.INTEGER,
constructed: !1,
capture: "version"
}, {
name: "EnvelopedData.RecipientInfos",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SET,
constructed: !0,
captureAsn1: "recipientInfos"
}].concat(vi)
};
Qt.encryptedDataValidator = {
name: "EncryptedData",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "EncryptedData.Version",
tagClass: P.Class.UNIVERSAL,
type: P.Type.INTEGER,
constructed: !1,
capture: "version"
}].concat(vi)
};
var y0 = {
name: "SignerInfo",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "SignerInfo.version",
tagClass: P.Class.UNIVERSAL,
type: P.Type.INTEGER,
constructed: !1
}, {
name: "SignerInfo.issuerAndSerialNumber",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "SignerInfo.issuerAndSerialNumber.issuer",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
captureAsn1: "issuer"
}, {
name: "SignerInfo.issuerAndSerialNumber.serialNumber",
tagClass: P.Class.UNIVERSAL,
type: P.Type.INTEGER,
constructed: !1,
capture: "serial"
}]
}, {
name: "SignerInfo.digestAlgorithm",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "SignerInfo.digestAlgorithm.algorithm",
tagClass: P.Class.UNIVERSAL,
type: P.Type.OID,
constructed: !1,
capture: "digestAlgorithm"
}, {
name: "SignerInfo.digestAlgorithm.parameter",
tagClass: P.Class.UNIVERSAL,
constructed: !1,
captureAsn1: "digestParameter",
optional: !0
}]
}, {
name: "SignerInfo.authenticatedAttributes",
tagClass: P.Class.CONTEXT_SPECIFIC,
type: 0,
constructed: !0,
optional: !0,
capture: "authenticatedAttributes"
}, {
name: "SignerInfo.digestEncryptionAlgorithm",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
capture: "signatureAlgorithm"
}, {
name: "SignerInfo.encryptedDigest",
tagClass: P.Class.UNIVERSAL,
type: P.Type.OCTETSTRING,
constructed: !1,
capture: "signature"
}, {
name: "SignerInfo.unauthenticatedAttributes",
tagClass: P.Class.CONTEXT_SPECIFIC,
type: 1,
constructed: !0,
optional: !0,
capture: "unauthenticatedAttributes"
}]
};
Qt.signedDataValidator = {
name: "SignedData",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [
{
name: "SignedData.Version",
tagClass: P.Class.UNIVERSAL,
type: P.Type.INTEGER,
constructed: !1,
capture: "version"
},
{
name: "SignedData.DigestAlgorithms",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SET,
constructed: !0,
captureAsn1: "digestAlgorithms"
},
pi,
{
name: "SignedData.Certificates",
tagClass: P.Class.CONTEXT_SPECIFIC,
type: 0,
optional: !0,
captureAsn1: "certificates"
},
{
name: "SignedData.CertificateRevocationLists",
tagClass: P.Class.CONTEXT_SPECIFIC,
type: 1,
optional: !0,
captureAsn1: "crls"
},
{
name: "SignedData.SignerInfos",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SET,
capture: "signerInfos",
optional: !0,
value: [y0]
}
]
};
Qt.recipientInfoValidator = {
name: "RecipientInfo",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "RecipientInfo.version",
tagClass: P.Class.UNIVERSAL,
type: P.Type.INTEGER,
constructed: !1,
capture: "version"
}, {
name: "RecipientInfo.issuerAndSerial",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "RecipientInfo.issuerAndSerial.issuer",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
captureAsn1: "issuer"
}, {
name: "RecipientInfo.issuerAndSerial.serialNumber",
tagClass: P.Class.UNIVERSAL,
type: P.Type.INTEGER,
constructed: !1,
capture: "serial"
}]
}, {
name: "RecipientInfo.keyEncryptionAlgorithm",
tagClass: P.Class.UNIVERSAL,
type: P.Type.SEQUENCE,
constructed: !0,
value: [{
name: "RecipientInfo.keyEncryptionAlgorithm.algorithm",
tagClass: P.Class.UNIVERSAL,
type: P.Type.OID,
constructed: !1,
capture: "encAlgorithm"
}, {
name: "RecipientInfo.keyEncryptionAlgorithm.parameter",
tagClass: P.Class.UNIVERSAL,
constructed: !1,
captureAsn1: "encParameter",
optional: !0
}]
}, {
name: "RecipientInfo.encryptedKey",
tagClass: P.Class.UNIVERSAL,
type: P.Type.OCTETSTRING,
constructed: !1,
capture: "encKey"
}]
};
var Rt = z;
Rt.mgf = Rt.mgf || {};
var g0 = Rt.mgf.mgf1 = Rt.mgf1 = Rt.mgf1 || {};
g0.create = function(e) {
var t = {
/**
* Generate mask of specified length.
*
* @param {String} seed The seed for mask generation.
* @param maskLen Number of bytes to generate.
* @return {String} The generated mask.
*/
generate: function(a, r) {
for (var i = new Rt.util.ByteBuffer(), s = Math.ceil(r / e.digestLength), n = 0; n < s; n++) {
var o = new Rt.util.ByteBuffer();
o.putInt32(n), e.start(), e.update(a + o.getBytes()), i.putBuffer(e.digest());
}
return i.truncate(i.length() - r), i.getBytes();
}
};
return t;
};
var pr = z;
pr.mgf = pr.mgf || {};
pr.mgf.mgf1 = pr.mgf1;
var Bt = z, C0 = Bt.pss = Bt.pss || {};
C0.create = function(e) {
arguments.length === 3 && (e = {
md: arguments[0],
mgf: arguments[1],
saltLength: arguments[2]
});
var t = e.md, a = e.mgf, r = t.digestLength, i = e.salt || null;
typeof i == "string" && (i = Bt.util.createBuffer(i));
var s;
if ("saltLength" in e)
s = e.saltLength;
else if (i !== null)
s = i.length();
else
throw new Error("Salt length not specified or specific salt not given.");
if (i !== null && i.length() !== s)
throw new Error("Given salt length does not match length of given salt.");
var n = e.prng || Bt.random, o = {};
return o.encode = function(f, u) {
var l, c = u - 1, v = Math.ceil(c / 8), C = f.digest().getBytes();
if (v < r + s + 2)
throw new Error("Message is too long to encrypt.");
var y;
i === null ? y = n.getBytesSync(s) : y = i.bytes();
var x = new Bt.util.ByteBuffer();
x.fillWithByte(0, 8), x.putBytes(C), x.putBytes(y), t.start(), t.update(x.getBytes());
var T = t.digest().getBytes(), I = new Bt.util.ByteBuffer();
I.fillWithByte(0, v - s - r - 2), I.putByte(1), I.putBytes(y);
var B = I.getBytes(), b = v - r - 1, V = a.generate(T, b), D = "";
for (l = 0; l < b; l++)
D += String.fromCharCode(B.charCodeAt(l) ^ V.charCodeAt(l));
var w = 65280 >> 8 * v - c & 255;
return D = String.fromCharCode(D.charCodeAt(0) & ~w) + D.substr(1), D + T + String.fromCharCode(188);
}, o.verify = function(f, u, l) {
var c, v = l - 1, C = Math.ceil(v / 8);
if (u = u.substr(-C), C < r + s + 2)
throw new Error("Inconsistent parameters to PSS signature verification.");
if (u.charCodeAt(C - 1) !== 188)
throw new Error("Encoded message does not end in 0xBC.");
var y = C - r - 1, x = u.substr(0, y), T = u.substr(y, r), I = 65280 >> 8 * C - v & 255;
if (x.charCodeAt(0) & I)
throw new Error("Bits beyond keysize not zero as expected.");
var B = a.generate(T, y), b = "";
for (c = 0; c < y; c++)
b += String.fromCharCode(x.charCodeAt(c) ^ B.charCodeAt(c));
b = String.fromCharCode(b.charCodeAt(0) & ~I) + b.substr(1);
var V = C - r - s - 2;
for (c = 0; c < V; c++)
if (b.charCodeAt(c) !== 0)
throw new Error("Leftmost octets not zero as expected");
if (b.charCodeAt(V) !== 1)
throw new Error("Inconsistent PSS signature, 0x01 marker not found");
var D = b.substr(-s), w = new Bt.util.ByteBuffer();
w.fillWithByte(0, 8), w.putBytes(f), w.putBytes(D), t.start(), t.update(w.getBytes());
var G = t.digest().getBytes();
return T === G;
}, o;
};
var M = z, h = M.asn1, L = M.pki = M.pki || {}, Z = L.oids, de = {};
de.CN = Z.commonName;
de.commonName = "CN";
de.C = Z.countryName;
de.countryName = "C";
de.L = Z.localityName;
de.localityName = "L";
de.ST = Z.stateOrProvinceName;
de.stateOrProvinceName = "ST";
de.O = Z.organizationName;
de.organizationName = "O";
de.OU = Z.organizationalUnitName;
de.organizationalUnitName = "OU";
de.E = Z.emailAddress;
de.emailAddress = "E";
var yi = M.pki.rsa.publicKeyValidator, m0 = {
name: "Certificate",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
value: [{
name: "Certificate.TBSCertificate",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
captureAsn1: "tbsCertificate",
value: [
{
name: "Certificate.TBSCertificate.version",
tagClass: h.Class.CONTEXT_SPECIFIC,
type: 0,
constructed: !0,
optional: !0,
value: [{
name: "Certificate.TBSCertificate.version.integer",
tagClass: h.Class.UNIVERSAL,
type: h.Type.INTEGER,
constructed: !1,
capture: "certVersion"
}]
},
{
name: "Certificate.TBSCertificate.serialNumber",
tagClass: h.Class.UNIVERSAL,
type: h.Type.INTEGER,
constructed: !1,
capture: "certSerialNumber"
},
{
name: "Certificate.TBSCertificate.signature",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
value: [{
name: "Certificate.TBSCertificate.signature.algorithm",
tagClass: h.Class.UNIVERSAL,
type: h.Type.OID,
constructed: !1,
capture: "certinfoSignatureOid"
}, {
name: "Certificate.TBSCertificate.signature.parameters",
tagClass: h.Class.UNIVERSAL,
optional: !0,
captureAsn1: "certinfoSignatureParams"
}]
},
{
name: "Certificate.TBSCertificate.issuer",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
captureAsn1: "certIssuer"
},
{
name: "Certificate.TBSCertificate.validity",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
// Note: UTC and generalized times may both appear so the capture
// names are based on their detected order, the names used below
// are only for the common case, which validity time really means
// "notBefore" and which means "notAfter" will be determined by order
value: [{
// notBefore (Time) (UTC time case)
name: "Certificate.TBSCertificate.validity.notBefore (utc)",
tagClass: h.Class.UNIVERSAL,
type: h.Type.UTCTIME,
constructed: !1,
optional: !0,
capture: "certValidity1UTCTime"
}, {
// notBefore (Time) (generalized time case)
name: "Certificate.TBSCertificate.validity.notBefore (generalized)",
tagClass: h.Class.UNIVERSAL,
type: h.Type.GENERALIZEDTIME,
constructed: !1,
optional: !0,
capture: "certValidity2GeneralizedTime"
}, {
// notAfter (Time) (only UTC time is supported)
name: "Certificate.TBSCertificate.validity.notAfter (utc)",
tagClass: h.Class.UNIVERSAL,
type: h.Type.UTCTIME,
constructed: !1,
optional: !0,
capture: "certValidity3UTCTime"
}, {
// notAfter (Time) (only UTC time is supported)
name: "Certificate.TBSCertificate.validity.notAfter (generalized)",
tagClass: h.Class.UNIVERSAL,
type: h.Type.GENERALIZEDTIME,
constructed: !1,
optional: !0,
capture: "certValidity4GeneralizedTime"
}]
},
{
// Name (subject) (RDNSequence)
name: "Certificate.TBSCertificate.subject",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
captureAsn1: "certSubject"
},
// SubjectPublicKeyInfo
yi,
{
// issuerUniqueID (optional)
name: "Certificate.TBSCertificate.issuerUniqueID",
tagClass: h.Class.CONTEXT_SPECIFIC,
type: 1,
constructed: !0,
optional: !0,
value: [{
name: "Certificate.TBSCertificate.issuerUniqueID.id",
tagClass: h.Class.UNIVERSAL,
type: h.Type.BITSTRING,
constructed: !1,
// TODO: support arbitrary bit length ids
captureBitStringValue: "certIssuerUniqueId"
}]
},
{
// subjectUniqueID (optional)
name: "Certificate.TBSCertificate.subjectUniqueID",
tagClass: h.Class.CONTEXT_SPECIFIC,
type: 2,
constructed: !0,
optional: !0,
value: [{
name: "Certificate.TBSCertificate.subjectUniqueID.id",
tagClass: h.Class.UNIVERSAL,
type: h.Type.BITSTRING,
constructed: !1,
// TODO: support arbitrary bit length ids
captureBitStringValue: "certSubjectUniqueId"
}]
},
{
// Extensions (optional)
name: "Certificate.TBSCertificate.extensions",
tagClass: h.Class.CONTEXT_SPECIFIC,
type: 3,
constructed: !0,
captureAsn1: "certExtensions",
optional: !0
}
]
}, {
// AlgorithmIdentifier (signature algorithm)
name: "Certificate.signatureAlgorithm",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
value: [{
// algorithm
name: "Certificate.signatureAlgorithm.algorithm",
tagClass: h.Class.UNIVERSAL,
type: h.Type.OID,
constructed: !1,
capture: "certSignatureOid"
}, {
name: "Certificate.TBSCertificate.signature.parameters",
tagClass: h.Class.UNIVERSAL,
optional: !0,
captureAsn1: "certSignatureParams"
}]
}, {
// SignatureValue
name: "Certificate.signatureValue",
tagClass: h.Class.UNIVERSAL,
type: h.Type.BITSTRING,
constructed: !1,
captureBitStringValue: "certSignature"
}]
}, E0 = {
name: "rsapss",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
value: [{
name: "rsapss.hashAlgorithm",
tagClass: h.Class.CONTEXT_SPECIFIC,
type: 0,
constructed: !0,
value: [{
name: "rsapss.hashAlgorithm.AlgorithmIdentifier",
tagClass: h.Class.UNIVERSAL,
type: h.Class.SEQUENCE,
constructed: !0,
optional: !0,
value: [{
name: "rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm",
tagClass: h.Class.UNIVERSAL,
type: h.Type.OID,
constructed: !1,
capture: "hashOid"
/* parameter block omitted, for SHA1 NULL anyhow. */
}]
}]
}, {
name: "rsapss.maskGenAlgorithm",
tagClass: h.Class.CONTEXT_SPECIFIC,
type: 1,
constructed: !0,
value: [{
name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier",
tagClass: h.Class.UNIVERSAL,
type: h.Class.SEQUENCE,
constructed: !0,
optional: !0,
value: [{
name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm",
tagClass: h.Class.UNIVERSAL,
type: h.Type.OID,
constructed: !1,
capture: "maskGenOid"
}, {
name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier.params",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
value: [{
name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm",
tagClass: h.Class.UNIVERSAL,
type: h.Type.OID,
constructed: !1,
capture: "maskGenHashOid"
/* parameter block omitted, for SHA1 NULL anyhow. */
}]
}]
}]
}, {
name: "rsapss.saltLength",
tagClass: h.Class.CONTEXT_SPECIFIC,
type: 2,
optional: !0,
value: [{
name: "rsapss.saltLength.saltLength",
tagClass: h.Class.UNIVERSAL,
type: h.Class.INTEGER,
constructed: !1,
capture: "saltLength"
}]
}, {
name: "rsapss.trailerField",
tagClass: h.Class.CONTEXT_SPECIFIC,
type: 3,
optional: !0,
value: [{
name: "rsapss.trailer.trailer",
tagClass: h.Class.UNIVERSAL,
type: h.Class.INTEGER,
constructed: !1,
capture: "trailer"
}]
}]
}, x0 = {
name: "CertificationRequestInfo",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
captureAsn1: "certificationRequestInfo",
value: [
{
name: "CertificationRequestInfo.integer",
tagClass: h.Class.UNIVERSAL,
type: h.Type.INTEGER,
constructed: !1,
capture: "certificationRequestInfoVersion"
},
{
// Name (subject) (RDNSequence)
name: "CertificationRequestInfo.subject",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
captureAsn1: "certificationRequestInfoSubject"
},
// SubjectPublicKeyInfo
yi,
{
name: "CertificationRequestInfo.attributes",
tagClass: h.Class.CONTEXT_SPECIFIC,
type: 0,
constructed: !0,
optional: !0,
capture: "certificationRequestInfoAttributes",
value: [{
name: "CertificationRequestInfo.attributes",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
value: [{
name: "CertificationRequestInfo.attributes.type",
tagClass: h.Class.UNIVERSAL,
type: h.Type.OID,
constructed: !1
}, {
name: "CertificationRequestInfo.attributes.value",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SET,
constructed: !0
}]
}]
}
]
}, S0 = {
name: "CertificationRequest",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
captureAsn1: "csr",
value: [
x0,
{
// AlgorithmIdentifier (signature algorithm)
name: "CertificationRequest.signatureAlgorithm",
tagClass: h.Class.UNIVERSAL,
type: h.Type.SEQUENCE,
constructed: !0,
value: [{
// algorithm
name: "CertificationRequest.signatureAlgorithm.algorithm",
tagClass: h.Class.UNIVERSAL,
type: h.Type.OID,
constructed: !1,
capture: "csrSignatureOid"
}, {
name: "CertificationRequest.signatureAlgorithm.parameters",
tagClass: h.Class.UNIVERSAL,
optional: !0,
captureAsn1: "csrSignatureParams"
}]
},
{
// signature
name: "CertificationRequest.signature",
tagClass: h.Class.UNIVERSAL,
type: h.Type.BITSTRING,
constructed: !1,
captureBitStringValue: "csrSignature"
}
]
};
L.RDNAttributesAsArray = function(e, t) {
for (var a = [], r, i, s, n = 0; n < e.value.length; ++n) {
r = e.value[n];
for (var o = 0; o < r.value.length; ++o)
s = {}, i = r.value[o], s.type = h.derToOid(i.value[0].value), s.value = i.value[1].value, s.valueTagClass = i.value[1].type, s.type in Z && (s.name = Z[s.type], s.name in de && (s.shortName = de[s.name])), t && (t.update(s.type), t.update(s.value)), a.push(s);
}
return a;
};
L.CRIAttributesAsArray = function(e) {
for (var t = [], a = 0; a < e.length; ++a)
for (var r = e[a], i = h.derToOid(r.value[0].value), s = r.value[1].value, n = 0; n < s.length; ++n) {
var o = {};
if (o.type = i, o.value = s[n].value, o.valueTagClass = s[n].type, o.type in Z && (o.name = Z[o.type], o.name in de && (o.shortName = de[o.name])), o.type === Z.extensionRequest) {
o.extensions = [];
for (var f = 0; f < o.value.length; ++f)
o.extensions.push(L.certificateExtensionFromAsn1(o.value[f]));
}
t.push(o);
}
return t;
};
function St(e, t) {
typeof t == "string" && (t = { shortName: t });
for (var a = null, r, i = 0; a === null && i < e.attributes.length; ++i)
r = e.attributes[i], (t.type && t.type === r.type || t.name && t.name === r.name || t.shortName && t.shortName === r.shortName) && (a = r);
return a;
}
var vr = function(e, t, a) {
var r = {};
if (e !== Z["RSASSA-PSS"])
return r;
a && (r = {
hash: {
algorithmOid: Z.sha1
},
mgf: {
algorithmOid: Z.mgf1,
hash: {
algorithmOid: Z.sha1
}
},
saltLength: 20
});
var i = {}, s = [];
if (!h.validate(t, E0, i, s)) {
var n = new Error("Cannot read RSASSA-PSS parameter block.");
throw n.errors = s, n;
}
return i.hashOid !== void 0 && (r.hash = r.hash || {}, r.hash.algorithmOid = h.derToOid(i.hashOid)), i.maskGenOid !== void 0 && (r.mgf = r.mgf || {}, r.mgf.algorithmOid = h.derToOid(i.maskGenOid), r.mgf.hash = r.mgf.hash || {}, r.mgf.hash.algorithmOid = h.derToOid(i.maskGenHashOid)), i.saltLength !== void 0 && (r.saltLength = i.saltLength.charCodeAt(0)), r;
}, br = function(e) {
switch (Z[e.signatureOid]) {
case "sha1WithRSAEncryption":
case "sha1WithRSASignature":
return M.md.sha1.create();
case "md5WithRSAEncryption":
return M.md.md5.create();
case "sha256WithRSAEncryption":
return M.md.sha256.create();
case "sha384WithRSAEncryption":
return M.md.sha384.create();
case "sha512WithRSAEncryption":
return M.md.sha512.create();
case "RSASSA-PSS":
return M.md.sha256.create();
default:
var t = new Error(
"Could not compute " + e.type + " digest. Unknown signature OID."
);
throw t.signatureOid = e.signatureOid, t;
}
}, gi = function(e) {
var t = e.certificate, a;
switch (t.signatureOid) {
case Z.sha1WithRSAEncryption:
case Z.sha1WithRSASignature:
break;
case Z["RSASSA-PSS"]:
var r, i;
if (r = Z[t.signatureParameters.mgf.hash.algorithmOid], r === void 0 || M.md[r] === void 0) {
var s = new Error("Unsupported MGF hash function.");
throw s.oid = t.signatureParameters.mgf.hash.algorithmOid, s.name = r, s;
}
if (i = Z[t.signatureParameters.mgf.algorithmOid], i === void 0 || M.mgf[i] === void 0) {
var s = new Error("Unsupported MGF function.");
throw s.oid = t.signatureParameters.mgf.algorithmOid, s.name = i, s;
}
if (i = M.mgf[i].create(M.md[r].create()), r = Z[t.signatureParameters.hash.algorithmOid], r === void 0 || M.md[r] === void 0) {
var s = new Error("Unsupported RSASSA-PSS hash function.");
throw s.oid = t.signatureParameters.hash.algorithmOid, s.name = r, s;
}
a = M.pss.create(
M.md[r].create(),
i,
t.signatureParameters.saltLength
);
break;
}
return t.publicKey.verify(
e.md.digest().getBytes(),
e.signature,
a
);
};
L.certificateFromPem = function(e, t, a) {
var r = M.pem.decode(e)[0];
if (r.type !== "CERTIFICATE" && r.type !== "X509 CERTIFICATE" && r.type !== "TRUSTED CERTIFICATE") {
var i = new Error(
'Could not convert certificate from PEM; PEM header type is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".'
);
throw i.headerType = r.type, i;
}
if (r.procType && r.procType.type === "ENCRYPTED")
throw new Error(
"Could not convert certificate from PEM; PEM is encrypted."
);
var s = h.fromDer(r.body, a);
return L.certificateFromAsn1(s, t);
};
L.certificateToPem = function(e, t) {
var a = {
type: "CERTIFICATE",
body: h.toDer(L.certificateToAsn1(e)).getBytes()
};
return M.pem.encode(a, { maxline: t });
};
L.publicKeyFromPem = function(e) {
var t = M.pem.decode(e)[0];
if (t.type !== "PUBLIC KEY" && t.type !== "RSA PUBLIC KEY") {
var a = new Error('Could not convert public key from PEM; PEM header type is not "PUBLIC KEY" or "RSA PUBLIC KEY".');
throw a.headerType = t.type, a;
}
if (t.procType && t.procType.type === "ENCRYPTED")
throw new Error("Could not convert public key from PEM; PEM is encrypted.");
var r = h.fromDer(t.body);
return L.publicKeyFromAsn1(r);
};
L.publicKeyToPem = function(e, t) {
var a = {
type: "PUBLIC KEY",
body: h.toDer(L.publicKeyToAsn1(e)).getBytes()
};
return M.pem.encode(a, { maxline: t });
};
L.publicKeyToRSAPublicKeyPem = function(e, t) {
var a = {
type: "RSA PUBLIC KEY",
body: h.toDer(L.publicKeyToRSAPublicKey(e)).getBytes()
};
return M.pem.encode(a, { maxline: t });
};
L.getPublicKeyFingerprint = function(e, t) {
t = t || {};
var a = t.md || M.md.sha1.create(), r = t.type || "RSAPublicKey", i;
switch (r) {
case "RSAPublicKey":
i = h.toDer(L.publicKeyToRSAPublicKey(e)).getBytes();
break;
case "SubjectPublicKeyInfo":
i = h.toDer(L.publicKeyToAsn1(e)).getBytes();
break;
default:
throw new Error('Unknown fingerprint type "' + t.type + '".');
}
a.start(), a.update(i);
var s = a.digest();
if (t.encoding === "hex") {
var n = s.toHex();
return t.delimiter ? n.match(/.{2}/g).join(t.delimiter) : n;
} else {
if (t.encoding === "binary")
return s.getBytes();
if (t.encoding)
throw new Error('Unknown encoding "' + t.encoding + '".');
}
return s;
};
L.certificationRequestFromPem = function(e, t, a) {
var r = M.pem.decode(e)[0];
if (r.type !== "CERTIFICATE REQUEST") {
var i = new Error('Could not convert certification request from PEM; PEM header type is not "CERTIFICATE REQUEST".');
throw i.headerType = r.type, i;
}
if (r.procType && r.procType.type === "ENCRYPTED")
throw new Error("Could not convert certification request from PEM; PEM is encrypted.");
var s = h.fromDer(r.body, a);
return L.certificationRequestFromAsn1(s, t);
};
L.certificationRequestToPem = function(e, t) {
var a = {
type: "CERTIFICATE REQUEST",
body: h.toDer(L.certificationRequestToAsn1(e)).getBytes()
};
return M.pem.encode(a, { maxline: t });
};
L.createCertificate = function() {
var e = {};
return e.version = 2, e.serialNumber = "00", e.signatureOid = null, e.signature = null, e.siginfo = {}, e.siginfo.algorithmOid = null, e.validity = {}, e.validity.notBefore = /* @__PURE__ */ new Date(), e.validity.notAfter = /* @__PURE__ */ new Date(), e.issuer = {}, e.issuer.getField = function(t) {
return St(e.issuer, t);
}, e.issuer.addField = function(t) {
Ze([t]), e.issuer.attributes.push(t);
}, e.issuer.attributes = [], e.issuer.hash = null, e.subject = {}, e.subject.getField = function(t) {
return St(e.subject, t);
}, e.subject.addField = function(t) {
Ze([t]), e.subject.attributes.push(t);
}, e.subject.attributes = [], e.subject.hash = null, e.extensions = [], e.publicKey = null, e.md = null, e.setSubject = function(t, a) {
Ze(t), e.subject.attributes = t, delete e.subject.uniqueId, a && (e.subject.uniqueId = a), e.subject.hash = null;
}, e.setIssuer = function(t, a) {
Ze(t), e.issuer.attributes = t, delete e.issuer.uniqueId, a && (e.issuer.uniqueId = a), e.issuer.hash = null;
}, e.setExtensions = function(t) {
for (var a = 0; a < t.length; ++a)
Ci(t[a], { cert: e });
e.extensions = t;
}, e.getExtension = function(t) {
typeof t == "string" && (t = { name: t });
for (var a = null, r, i = 0; a === null && i < e.extensions.length; ++i)
r = e.extensions[i], (t.id && r.id === t.id || t.name && r.name === t.name) && (a = r);
return a;
}, e.sign = function(t, a) {
e.md = a || M.md.sha1.create();
var r = Z[e.md.algorithm + "WithRSAEncryption"];
if (!r) {
var i = new Error("Could not compute certificate digest. Unknown message digest algorithm OID.");
throw i.algorithm = e.md.algorithm, i;
}
e.signatureOid = e.siginfo.algorithmOid = r, e.tbsCertificate = L.getTBSCertificate(e);
var s = h.toDer(e.tbsCertificate);
e.md.update(s.getBytes()), e.signature = t.sign(e.md);
}, e.verify = function(t) {
var a = !1;
if (!e.issued(t)) {
var r = t.issuer, i = e.subject, s = new Error(
"The parent certificate did not issue the given child certificate; the child certificate's issuer does not match the parent's subject."
);
throw s.expectedIssuer = i.attributes, s.actualIssuer = r.attributes, s;
}
var n = t.md;
if (n === null) {
n = br({
signatureOid: t.signatureOid,
type: "certificate"
});
var o = t.tbsCertificate || L.getTBSCertificate(t), f = h.toDer(o);
n.update(f.getBytes());
}
return n !== null && (a = gi({
certificate: e,
md: n,
signature: t.signature
})), a;
}, e.isIssuer = function(t) {
var a = !1, r = e.issuer, i = t.subject;
if (r.hash && i.hash)
a = r.hash === i.hash;
else if (r.attributes.length === i.attributes.length) {
a = !0;
for (var s, n, o = 0; a && o < r.attributes.length; ++o)
s = r.attributes[o], n = i.attributes[o], (s.type !== n.type || s.value !== n.value) && (a = !1);
}
return a;
}, e.issued = function(t) {
return t.isIssuer(e);
}, e.generateSubjectKeyIdentifier = function() {
return L.getPublicKeyFingerprint(e.publicKey, { type: "RSAPublicKey" });
}, e.verifySubjectKeyIdentifier = function() {
for (var t = Z.subjectKeyIdentifier, a = 0; a < e.extensions.length; ++a) {
var r = e.extensions[a];
if (r.id === t) {
var i = e.generateSubjectKeyIdentifier().getBytes();
return M.util.hexToBytes(r.subjectKeyIdentifier) === i;
}
}
return !1;
}, e;
};
L.certificateFromAsn1 = function(e, t) {
var a = {}, r = [];
if (!h.validate(e, m0, a, r)) {
var i = new Error("Cannot read X.509 certificate. ASN.1 object is not an X509v3 Certificate.");
throw i.errors = r, i;
}
var s = h.derToOid(a.publicKeyOid);
if (s !== L.oids.rsaEncryption)
throw new Error("Cannot read public key. OID is not RSA.");
var n = L.createCertificate();
n.version = a.certVersion ? a.certVersion.charCodeAt(0) : 0;
var o = M.util.createBuffer(a.certSerialNumber);
n.serialNumber = o.toHex(), n.signatureOid = M.asn1.derToOid(a.certSignatureOid), n.signatureParameters = vr(
n.signatureOid,
a.certSignatureParams,
!0
), n.siginfo.algorithmOid = M.asn1.derToOid(a.certinfoSignatureOid), n.siginfo.parameters = vr(
n.siginfo.algorithmOid,
a.certinfoSignatureParams,
!1
), n.signature = a.certSignature;
var f = [];
if (a.certValidity1UTCTime !== void 0 && f.push(h.utcTimeToDate(a.certValidity1UTCTime)), a.certValidity2GeneralizedTime !== void 0 && f.push(h.generalizedTimeToDate(
a.certValidity2GeneralizedTime
)), a.certValidity3UTCTime !== void 0 && f.push(h.utcTimeToDate(a.certValidity3UTCTime)), a.certValidity4GeneralizedTime !== void 0 && f.push(h.generalizedTimeToDate(
a.certValidity4GeneralizedTime
)), f.length > 2)
throw new Error("Cannot read notBefore/notAfter validity times; more than two times were provided in the certificate.");
if (f.length < 2)
throw new Error("Cannot read notBefore/notAfter validity times; they were not provided as either UTCTime or GeneralizedTime.");
if (n.validity.notBefore = f[0], n.validity.notAfter = f[1], n.tbsCertificate = a.tbsCertificate, t) {
n.md = br({
signatureOid: n.signatureOid,
type: "certificate"
});
var u = h.toDer(n.tbsCertificate);
n.md.update(u.getBytes());
}
var l = M.md.sha1.create(), c = h.toDer(a.certIssuer);
l.update(c.getBytes()), n.issuer.getField = function(y) {
return St(n.issuer, y);
}, n.issuer.addField = function(y) {
Ze([y]), n.issuer.attributes.push(y);
}, n.issuer.attributes = L.RDNAttributesAsArray(a.certIssuer), a.certIssuerUniqueId && (n.issuer.uniqueId = a.certIssuerUniqueId), n.issuer.hash = l.digest().toHex();
var v = M.md.sha1.create(), C = h.toDer(a.certSubject);
return v.update(C.getBytes()), n.subject.getField = function(y) {
return St(n.subject, y);
}, n.subject.addField = function(y) {
Ze([y]), n.subject.attributes.push(y);
}, n.subject.attributes = L.RDNAttributesAsArray(a.certSubject), a.certSubjectUniqueId && (n.subject.uniqueId = a.certSubjectUniqueId), n.subject.hash = v.digest().toHex(), a.certExtensions ? n.extensions = L.certificateExtensionsFromAsn1(a.certExtensions) : n.extensions = [], n.publicKey = L.publicKeyFromAsn1(a.subjectPublicKeyInfo), n;
};
L.certificateExtensionsFromAsn1 = function(e) {
for (var t = [], a = 0; a < e.value.length; ++a)
for (var r = e.value[a], i = 0; i < r.value.length; ++i)
t.push(L.certificateExtensionFromAsn1(r.value[i]));
return t;
};
L.certificateExtensionFromAsn1 = function(e) {
var t = {};
if (t.id = h.derToOid(e.value[0].value), t.critical = !1, e.value[1].type === h.Type.BOOLEAN ? (t.critical = e.value[1].value.charCodeAt(0) !== 0, t.value = e.value[2].value) : t.value = e.value[1].value, t.id in Z) {
if (t.name = Z[t.id], t.name === "keyUsage") {
var a = h.fromDer(t.value), r = 0, i = 0;
a.value.length > 1 && (r = a.value.charCodeAt(1), i = a.value.length > 2 ? a.value.charCodeAt(2) : 0), t.digitalSignature = (r & 128) === 128, t.nonRepudiation = (r & 64) === 64, t.keyEncipherment = (r & 32) === 32, t.dataEncipherment = (r & 16) === 16, t.keyAgreement = (r & 8) === 8, t.keyCertSign = (r & 4) === 4, t.cRLSign = (r & 2) === 2, t.encipherOnly = (r & 1) === 1, t.decipherOnly = (i & 128) === 128;
} else if (t.name === "basicConstraints") {
var a = h.fromDer(t.value);
a.value.length > 0 && a.value[0].type === h.Type.BOOLEAN ? t.cA = a.value[0].value.charCodeAt(0) !== 0 : t.cA = !1;
var s = null;
a.value.length > 0 && a.value[0].type === h.Type.INTEGER ? s = a.value[0].value : a.value.length > 1 && (s = a.value[1].value), s !== null && (t.pathLenConstraint = h.derToInteger(s));
} else if (t.name === "extKeyUsage")
for (var a = h.fromDer(t.value), n = 0; n < a.value.length; ++n) {
var o = h.derToOid(a.value[n].value);
o in Z ? t[Z[o]] = !0 : t[o] = !0;
}
else if (t.name === "nsCertType") {
var a = h.fromDer(t.value), r = 0;
a.value.length > 1 && (r = a.value.charCodeAt(1)), t.client = (r & 128) === 128, t.server = (r & 64) === 64, t.email = (r & 32) === 32, t.objsign = (r & 16) === 16, t.reserved = (r & 8) === 8, t.sslCA = (r & 4) === 4, t.emailCA = (r & 2) === 2, t.objCA = (r & 1) === 1;
} else if (t.name === "subjectAltName" || t.name === "issuerAltName") {
t.altNames = [];
for (var f, a = h.fromDer(t.value), u = 0; u < a.value.length; ++u) {
f = a.value[u];
var l = {
type: f.type,
value: f.value
};
switch (t.altNames.push(l), f.type) {
case 1:
case 2:
case 6:
break;
case 7:
l.ip = M.util.bytesToIP(f.value);
break;
case 8:
l.oid = h.derToOid(f.value);
break;
}
}
} else if (t.name === "subjectKeyIdentifier") {
var a = h.fromDer(t.value);
t.subjectKeyIdentifier = M.util.bytesToHex(a.value);
}
}
return t;
};
L.certificationRequestFromAsn1 = function(e, t) {
var a = {}, r = [];
if (!h.validate(e, S0, a, r)) {
var i = new Error("Cannot read PKCS#10 certificate request. ASN.1 object is not a PKCS#10 CertificationRequest.");
throw i.errors = r, i;
}
var s = h.derToOid(a.publicKeyOid);
if (s !== L.oids.rsaEncryption)
throw new Error("Cannot read public key. OID is not RSA.");
var n = L.createCertificationRequest();
if (n.version = a.csrVersion ? a.csrVersion.charCodeAt(0) : 0, n.signatureOid = M.asn1.derToOid(a.csrSignatureOid), n.signatureParameters = vr(
n.signatureOid,
a.csrSignatureParams,
!0
), n.siginfo.algorithmOid = M.asn1.derToOid(a.csrSignatureOid), n.siginfo.parameters = vr(
n.siginfo.algorithmOid,
a.csrSignatureParams,
!1
), n.signature = a.csrSignature, n.certificationRequestInfo = a.certificationRequestInfo, t) {
n.md = br({
signatureOid: n.signatureOid,
type: "certification request"
});
var o = h.toDer(n.certificationRequestInfo);
n.md.update(o.getBytes());
}
var f = M.md.sha1.create();
return n.subject.getField = function(u) {
return St(n.subject, u);
}, n.subject.addField = function(u) {
Ze([u]), n.subject.attributes.push(u);
}, n.subject.attributes = L.RDNAttributesAsArray(
a.certificationRequestInfoSubject,
f
), n.subject.hash = f.digest().toHex(), n.publicKey = L.publicKeyFromAsn1(a.subjectPublicKeyInfo), n.getAttribute = function(u) {
return St(n, u);
}, n.addAttribute = function(u) {
Ze([u]), n.attributes.push(u);
}, n.attributes = L.CRIAttributesAsArray(
a.certificationRequestInfoAttributes || []
), n;
};
L.createCertificationRequest = function() {
var e = {};
return e.version = 0, e.signatureOid = null, e.signature = null, e.siginfo = {}, e.siginfo.algorithmOid = null, e.subject = {}, e.subject.getField = function(t) {
return St(e.subject, t);
}, e.subject.addField = function(t) {
Ze([t]), e.subject.attributes.push(t);
}, e.subject.attributes = [], e.subject.hash = null, e.publicKey = null, e.attributes = [], e.getAttribute = function(t) {
return St(e, t);
}, e.addAttribute = function(t) {
Ze([t]), e.attributes.push(t);
}, e.md = null, e.setSubject = function(t) {
Ze(t), e.subject.attributes = t, e.subject.hash = null;
}, e.setAttributes = function(t) {
Ze(t), e.attributes = t;
}, e.sign = function(t, a) {
e.md = a || M.md.sha1.create();
var r = Z[e.md.algorithm + "WithRSAEncryption"];
if (!r) {
var i = new Error("Could not compute certification request digest. Unknown message digest algorithm OID.");
throw i.algorithm = e.md.algorithm, i;
}
e.signatureOid = e.siginfo.algorithmOid = r, e.certificationRequestInfo = L.getCertificationRequestInfo(e);
var s = h.toDer(e.certificationRequestInfo);
e.md.update(s.getBytes()), e.signature = t.sign(e.md);
}, e.verify = function() {
var t = !1, a = e.md;
if (a === null) {
a = br({
signatureOid: e.signatureOid,
type: "certification request"
});
var r = e.certificationRequestInfo || L.getCertificationRequestInfo(e), i = h.toDer(r);
a.update(i.getBytes());
}
return a !== null && (t = gi({
certificate: e,
md: a,
signature: e.signature
})), t;
}, e;
};
function Kt(e) {
for (var t = h.create(
h.Class.UNIVERSAL,
h.Type.SEQUENCE,
!0,
[]
), a, r, i = e.attributes, s = 0; s < i.length; ++s) {
a = i[s];
var n = a.value, o = h.Type.PRINTABLESTRING;
"valueTagClass" in a && (o = a.valueTagClass, o === h.Type.UTF8 && (n = M.util.encodeUtf8(n))), r = h.create(h.Class.UNIVERSAL, h.Type.SET, !0, [
h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
// AttributeType
h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(a.type).getBytes()
),
// AttributeValue
h.create(h.Class.UNIVERSAL, o, !1, n)
])
]), t.value.push(r);
}
return t;
}
function Ze(e) {
for (var t, a = 0; a < e.length; ++a) {
if (t = e[a], typeof t.name > "u" && (t.type && t.type in L.oids ? t.name = L.oids[t.type] : t.shortName && t.shortName in de && (t.name = L.oids[de[t.shortName]])), typeof t.type > "u")
if (t.name && t.name in L.oids)
t.type = L.oids[t.name];
else {
var r = new Error("Attribute type not specified.");
throw r.attribute = t, r;
}
if (typeof t.shortName > "u" && t.name && t.name in de && (t.shortName = de[t.name]), t.type === Z.extensionRequest && (t.valueConstructed = !0, t.valueTagClass = h.Type.SEQUENCE, !t.value && t.extensions)) {
t.value = [];
for (var i = 0; i < t.extensions.length; ++i)
t.value.push(L.certificateExtensionToAsn1(
Ci(t.extensions[i])
));
}
if (typeof t.value > "u") {
var r = new Error("Attribute value not specified.");
throw r.attribute = t, r;
}
}
}
function Ci(e, t) {
if (t = t || {}, typeof e.name > "u" && e.id && e.id in L.oids && (e.name = L.oids[e.id]), typeof e.id > "u")
if (e.name && e.name in L.oids)
e.id = L.oids[e.name];
else {
var a = new Error("Extension ID not specified.");
throw a.extension = e, a;
}
if (typeof e.value < "u")
return e;
if (e.name === "keyUsage") {
var r = 0, i = 0, s = 0;
e.digitalSignature && (i |= 128, r = 7), e.nonRepudiation && (i |= 64, r = 6), e.keyEncipherment && (i |= 32, r = 5), e.dataEncipherment && (i |= 16, r = 4), e.keyAgreement && (i |= 8, r = 3), e.keyCertSign && (i |= 4, r = 2), e.cRLSign && (i |= 2, r = 1), e.encipherOnly && (i |= 1, r = 0), e.decipherOnly && (s |= 128, r = 7);
var n = String.fromCharCode(r);
s !== 0 ? n += String.fromCharCode(i) + String.fromCharCode(s) : i !== 0 && (n += String.fromCharCode(i)), e.value = h.create(
h.Class.UNIVERSAL,
h.Type.BITSTRING,
!1,
n
);
} else if (e.name === "basicConstraints")
e.value = h.create(
h.Class.UNIVERSAL,
h.Type.SEQUENCE,
!0,
[]
), e.cA && e.value.value.push(h.create(
h.Class.UNIVERSAL,
h.Type.BOOLEAN,
!1,
String.fromCharCode(255)
)), "pathLenConstraint" in e && e.value.value.push(h.create(
h.Class.UNIVERSAL,
h.Type.INTEGER,
!1,
h.integerToDer(e.pathLenConstraint).getBytes()
));
else if (e.name === "extKeyUsage") {
e.value = h.create(
h.Class.UNIVERSAL,
h.Type.SEQUENCE,
!0,
[]
);
var o = e.value.value;
for (var f in e)
e[f] === !0 && (f in Z ? o.push(h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(Z[f]).getBytes()
)) : f.indexOf(".") !== -1 && o.push(h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(f).getBytes()
)));
} else if (e.name === "nsCertType") {
var r = 0, i = 0;
e.client && (i |= 128, r = 7), e.server && (i |= 64, r = 6), e.email && (i |= 32, r = 5), e.objsign && (i |= 16, r = 4), e.reserved && (i |= 8, r = 3), e.sslCA && (i |= 4, r = 2), e.emailCA && (i |= 2, r = 1), e.objCA && (i |= 1, r = 0);
var n = String.fromCharCode(r);
i !== 0 && (n += String.fromCharCode(i)), e.value = h.create(
h.Class.UNIVERSAL,
h.Type.BITSTRING,
!1,
n
);
} else if (e.name === "subjectAltName" || e.name === "issuerAltName") {
e.value = h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, []);
for (var u, l = 0; l < e.altNames.length; ++l) {
u = e.altNames[l];
var n = u.value;
if (u.type === 7 && u.ip) {
if (n = M.util.bytesFromIP(u.ip), n === null) {
var a = new Error(
'Extension "ip" value is not a valid IPv4 or IPv6 address.'
);
throw a.extension = e, a;
}
} else
u.type === 8 && (u.oid ? n = h.oidToDer(h.oidToDer(u.oid)) : n = h.oidToDer(n));
e.value.value.push(h.create(
h.Class.CONTEXT_SPECIFIC,
u.type,
!1,
n
));
}
} else if (e.name === "nsComment" && t.cert) {
if (!/^[\x00-\x7F]*$/.test(e.comment) || e.comment.length < 1 || e.comment.length > 128)
throw new Error('Invalid "nsComment" content.');
e.value = h.create(
h.Class.UNIVERSAL,
h.Type.IA5STRING,
!1,
e.comment
);
} else if (e.name === "subjectKeyIdentifier" && t.cert) {
var c = t.cert.generateSubjectKeyIdentifier();
e.subjectKeyIdentifier = c.toHex(), e.value = h.create(
h.Class.UNIVERSAL,
h.Type.OCTETSTRING,
!1,
c.getBytes()
);
} else if (e.name === "authorityKeyIdentifier" && t.cert) {
e.value = h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, []);
var o = e.value.value;
if (e.keyIdentifier) {
var v = e.keyIdentifier === !0 ? t.cert.generateSubjectKeyIdentifier().getBytes() : e.keyIdentifier;
o.push(
h.create(h.Class.CONTEXT_SPECIFIC, 0, !1, v)
);
}
if (e.authorityCertIssuer) {
var C = [
h.create(h.Class.CONTEXT_SPECIFIC, 4, !0, [
Kt(e.authorityCertIssuer === !0 ? t.cert.issuer : e.authorityCertIssuer)
])
];
o.push(
h.create(h.Class.CONTEXT_SPECIFIC, 1, !0, C)
);
}
if (e.serialNumber) {
var y = M.util.hexToBytes(e.serialNumber === !0 ? t.cert.serialNumber : e.serialNumber);
o.push(
h.create(h.Class.CONTEXT_SPECIFIC, 2, !1, y)
);
}
} else if (e.name === "cRLDistributionPoints") {
e.value = h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, []);
for (var o = e.value.value, x = h.create(
h.Class.UNIVERSAL,
h.Type.SEQUENCE,
!0,
[]
), T = h.create(
h.Class.CONTEXT_SPECIFIC,
0,
!0,
[]
), u, l = 0; l < e.altNames.length; ++l) {
u = e.altNames[l];
var n = u.value;
if (u.type === 7 && u.ip) {
if (n = M.util.bytesFromIP(u.ip), n === null) {
var a = new Error(
'Extension "ip" value is not a valid IPv4 or IPv6 address.'
);
throw a.extension = e, a;
}
} else
u.type === 8 && (u.oid ? n = h.oidToDer(h.oidToDer(u.oid)) : n = h.oidToDer(n));
T.value.push(h.create(
h.Class.CONTEXT_SPECIFIC,
u.type,
!1,
n
));
}
x.value.push(h.create(
h.Class.CONTEXT_SPECIFIC,
0,
!0,
[T]
)), o.push(x);
}
if (typeof e.value > "u") {
var a = new Error("Extension value not specified.");
throw a.extension = e, a;
}
return e;
}
function fa(e, t) {
switch (e) {
case Z["RSASSA-PSS"]:
var a = [];
return t.hash.algorithmOid !== void 0 && a.push(h.create(h.Class.CONTEXT_SPECIFIC, 0, !0, [
h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(t.hash.algorithmOid).getBytes()
),
h.create(h.Class.UNIVERSAL, h.Type.NULL, !1, "")
])
])), t.mgf.algorithmOid !== void 0 && a.push(h.create(h.Class.CONTEXT_SPECIFIC, 1, !0, [
h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(t.mgf.algorithmOid).getBytes()
),
h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(t.mgf.hash.algorithmOid).getBytes()
),
h.create(h.Class.UNIVERSAL, h.Type.NULL, !1, "")
])
])
])), t.saltLength !== void 0 && a.push(h.create(h.Class.CONTEXT_SPECIFIC, 2, !0, [
h.create(
h.Class.UNIVERSAL,
h.Type.INTEGER,
!1,
h.integerToDer(t.saltLength).getBytes()
)
])), h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, a);
default:
return h.create(h.Class.UNIVERSAL, h.Type.NULL, !1, "");
}
}
function T0(e) {
var t = h.create(h.Class.CONTEXT_SPECIFIC, 0, !0, []);
if (e.attributes.length === 0)
return t;
for (var a = e.attributes, r = 0; r < a.length; ++r) {
var i = a[r], s = i.value, n = h.Type.UTF8;
"valueTagClass" in i && (n = i.valueTagClass), n === h.Type.UTF8 && (s = M.util.encodeUtf8(s));
var o = !1;
"valueConstructed" in i && (o = i.valueConstructed);
var f = h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
// AttributeType
h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(i.type).getBytes()
),
h.create(h.Class.UNIVERSAL, h.Type.SET, !0, [
// AttributeValue
h.create(
h.Class.UNIVERSAL,
n,
o,
s
)
])
]);
t.value.push(f);
}
return t;
}
var I0 = /* @__PURE__ */ new Date("1950-01-01T00:00:00Z"), A0 = /* @__PURE__ */ new Date("2050-01-01T00:00:00Z");
function Ua(e) {
return e >= I0 && e < A0 ? h.create(
h.Class.UNIVERSAL,
h.Type.UTCTIME,
!1,
h.dateToUtcTime(e)
) : h.create(
h.Class.UNIVERSAL,
h.Type.GENERALIZEDTIME,
!1,
h.dateToGeneralizedTime(e)
);
}
L.getTBSCertificate = function(e) {
var t = Ua(e.validity.notBefore), a = Ua(e.validity.notAfter), r = h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
// version
h.create(h.Class.CONTEXT_SPECIFIC, 0, !0, [
// integer
h.create(
h.Class.UNIVERSAL,
h.Type.INTEGER,
!1,
h.integerToDer(e.version).getBytes()
)
]),
// serialNumber
h.create(
h.Class.UNIVERSAL,
h.Type.INTEGER,
!1,
M.util.hexToBytes(e.serialNumber)
),
// signature
h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
// algorithm
h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(e.siginfo.algorithmOid).getBytes()
),
// parameters
fa(
e.siginfo.algorithmOid,
e.siginfo.parameters
)
]),
// issuer
Kt(e.issuer),
// validity
h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
t,
a
]),
// subject
Kt(e.subject),
// SubjectPublicKeyInfo
L.publicKeyToAsn1(e.publicKey)
]);
return e.issuer.uniqueId && r.value.push(
h.create(h.Class.CONTEXT_SPECIFIC, 1, !0, [
h.create(
h.Class.UNIVERSAL,
h.Type.BITSTRING,
!1,
// TODO: support arbitrary bit length ids
String.fromCharCode(0) + e.issuer.uniqueId
)
])
), e.subject.uniqueId && r.value.push(
h.create(h.Class.CONTEXT_SPECIFIC, 2, !0, [
h.create(
h.Class.UNIVERSAL,
h.Type.BITSTRING,
!1,
// TODO: support arbitrary bit length ids
String.fromCharCode(0) + e.subject.uniqueId
)
])
), e.extensions.length > 0 && r.value.push(L.certificateExtensionsToAsn1(e.extensions)), r;
};
L.getCertificationRequestInfo = function(e) {
var t = h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
// version
h.create(
h.Class.UNIVERSAL,
h.Type.INTEGER,
!1,
h.integerToDer(e.version).getBytes()
),
// subject
Kt(e.subject),
// SubjectPublicKeyInfo
L.publicKeyToAsn1(e.publicKey),
// attributes
T0(e)
]);
return t;
};
L.distinguishedNameToAsn1 = function(e) {
return Kt(e);
};
L.certificateToAsn1 = function(e) {
var t = e.tbsCertificate || L.getTBSCertificate(e);
return h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
// TBSCertificate
t,
// AlgorithmIdentifier (signature algorithm)
h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
// algorithm
h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(e.signatureOid).getBytes()
),
// parameters
fa(e.signatureOid, e.signatureParameters)
]),
// SignatureValue
h.create(
h.Class.UNIVERSAL,
h.Type.BITSTRING,
!1,
String.fromCharCode(0) + e.signature
)
]);
};
L.certificateExtensionsToAsn1 = function(e) {
var t = h.create(h.Class.CONTEXT_SPECIFIC, 3, !0, []), a = h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, []);
t.value.push(a);
for (var r = 0; r < e.length; ++r)
a.value.push(L.certificateExtensionToAsn1(e[r]));
return t;
};
L.certificateExtensionToAsn1 = function(e) {
var t = h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, []);
t.value.push(h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(e.id).getBytes()
)), e.critical && t.value.push(h.create(
h.Class.UNIVERSAL,
h.Type.BOOLEAN,
!1,
String.fromCharCode(255)
));
var a = e.value;
return typeof e.value != "string" && (a = h.toDer(a).getBytes()), t.value.push(h.create(
h.Class.UNIVERSAL,
h.Type.OCTETSTRING,
!1,
a
)), t;
};
L.certificationRequestToAsn1 = function(e) {
var t = e.certificationRequestInfo || L.getCertificationRequestInfo(e);
return h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
// CertificationRequestInfo
t,
// AlgorithmIdentifier (signature algorithm)
h.create(h.Class.UNIVERSAL, h.Type.SEQUENCE, !0, [
// algorithm
h.create(
h.Class.UNIVERSAL,
h.Type.OID,
!1,
h.oidToDer(e.signatureOid).getBytes()
),
// parameters
fa(e.signatureOid, e.signatureParameters)
]),
// signature
h.create(
h.Class.UNIVERSAL,
h.Type.BITSTRING,
!1,
String.fromCharCode(0) + e.signature
)
]);
};
L.createCaStore = function(e) {
var t = {
// stored certificates
certs: {}
};
t.getIssuer = function(n) {
var o = a(n.issuer);
return o;
}, t.addCertificate = function(n) {
if (typeof n == "string" && (n = M.pki.certificateFromPem(n)), r(n.subject), !t.hasCertificate(n))
if (n.subject.hash in t.certs) {
var o = t.certs[n.subject.hash];
M.util.isArray(o) || (o = [o]), o.push(n), t.certs[n.subject.hash] = o;
} else
t.certs[n.subject.hash] = n;
}, t.hasCertificate = function(n) {
typeof n == "string" && (n = M.pki.certificateFromPem(n));
var o = a(n.subject);
if (!o)
return !1;
M.util.isArray(o) || (o = [o]);
for (var f = h.toDer(L.certificateToAsn1(n)).getBytes(), u = 0; u < o.length; ++u) {
var l = h.toDer(L.certificateToAsn1(o[u])).getBytes();
if (f === l)
return !0;
}
return !1;
}, t.listAllCertificates = function() {
var n = [];
for (var o in t.certs)
if (t.certs.hasOwnProperty(o)) {
var f = t.certs[o];
if (!M.util.isArray(f))
n.push(f);
else
for (var u = 0; u < f.length; ++u)
n.push(f[u]);
}
return n;
}, t.removeCertificate = function(n) {
var o;
if (typeof n == "string" && (n = M.pki.certificateFromPem(n)), r(n.subject), !t.hasCertificate(n))
return null;
var f = a(n.subject);
if (!M.util.isArray(f))
return o = t.certs[n.subject.hash], delete t.certs[n.subject.hash], o;
for (var u = h.toDer(L.certificateToAsn1(n)).getBytes(), l = 0; l < f.length; ++l) {
var c = h.toDer(L.certificateToAsn1(f[l])).getBytes();
u === c && (o = f[l], f.splice(l, 1));
}
return f.length === 0 && delete t.certs[n.subject.hash], o;
};
function a(n) {
return r(n), t.certs[n.hash] || null;
}
function r(n) {
if (!n.hash) {
var o = M.md.sha1.create();
n.attributes = L.RDNAttributesAsArray(Kt(n), o), n.hash = o.digest().toHex();
}
}
if (e)
for (var i = 0; i < e.length; ++i) {
var s = e[i];
t.addCertificate(s);
}
return t;
};
L.certificateError = {
bad_certificate: "forge.pki.BadCertificate",
unsupported_certificate: "forge.pki.UnsupportedCertificate",
certificate_revoked: "forge.pki.CertificateRevoked",
certificate_expired: "forge.pki.CertificateExpired",
certificate_unknown: "forge.pki.CertificateUnknown",
unknown_ca: "forge.pki.UnknownCertificateAuthority"
};
L.verifyCertificateChain = function(e, t, a) {
typeof a == "function" && (a = { verify: a }), a = a || {}, t = t.slice(0);
var r = t.slice(0), i = a.validityCheckDate;
typeof i > "u" && (i = /* @__PURE__ */ new Date());
var s = !0, n = null, o = 0;
do {
var f = t.shift(), u = null, l = !1;
if (i && (i < f.validity.notBefore || i > f.validity.notAfter) && (n = {
message: "Certificate is not valid yet or has expired.",
error: L.certificateError.certificate_expired,
notBefore: f.validity.notBefore,
notAfter: f.validity.notAfter,
// TODO: we might want to reconsider renaming 'now' to
// 'validityCheckDate' should this API be changed in the future.
now: i
}), n === null) {
if (u = t[0] || e.getIssuer(f), u === null && f.isIssuer(f) && (l = !0, u = f), u) {
var c = u;
M.util.isArray(c) || (c = [c]);
for (var v = !1; !v && c.length > 0; ) {
u = c.shift();
try {
v = u.verify(f);
} catch {
}
}
v || (n = {
message: "Certificate signature is invalid.",
error: L.certificateError.bad_certificate
});
}
n === null && (!u || l) && !e.hasCertificate(f) && (n = {
message: "Certificate is not trusted.",
error: L.certificateError.unknown_ca
});
}
if (n === null && u && !f.isIssuer(u) && (n = {
message: "Certificate issuer is invalid.",
error: L.certificateError.bad_certificate
}), n === null)
for (var C = {
keyUsage: !0,
basicConstraints: !0
}, y = 0; n === null && y < f.extensions.length; ++y) {
var x = f.extensions[y];
x.critical && !(x.name in C) && (n = {
message: "Certificate has an unsupported critical extension.",
error: L.certificateError.unsupported_certificate
});
}
if (n === null && (!s || t.length === 0 && (!u || l))) {
var T = f.getExtension("basicConstraints"), I = f.getExtension("keyUsage");
if (I !== null && (!I.keyCertSign || T === null) && (n = {
message: "Certificate keyUsage or basicConstraints conflict or indicate that the certificate is not a CA. If the certificate is the only one in the chain or isn't the first then the certificate must be a valid CA.",
error: L.certificateError.bad_certificate
}), n === null && T !== null && !T.cA && (n = {
message: "Certificate basicConstraints indicates the certificate is not a CA.",
error: L.certificateError.bad_certificate
}), n === null && I !== null && "pathLenConstraint" in T) {
var B = o - 1;
B > T.pathLenConstraint && (n = {
message: "Certificate basicConstraints pathLenConstraint violated.",
error: L.certificateError.bad_certificate
});
}
}
var b = n === null ? !0 : n.error, V = a.verify ? a.verify(b, o, r) : b;
if (V === !0)
n = null;
else
throw b === !0 && (n = {
message: "The application rejected the certificate.",
error: L.certificateError.bad_certificate
}), (V || V === 0) && (typeof V == "object" && !M.util.isArray(V) ? (V.message && (n.message = V.message), V.error && (n.error = V.error)) : typeof V == "string" && (n.error = V)), n;
s = !1, ++o;
} while (t.length > 0);
return !0;
};
var oe = z, g = oe.asn1, X = oe.pki, Jt = oe.pkcs12 = oe.pkcs12 || {}, mi = {
name: "ContentInfo",
tagClass: g.Class.UNIVERSAL,
type: g.Type.SEQUENCE,
// a ContentInfo
constructed: !0,
value: [{
name: "ContentInfo.contentType",
tagClass: g.Class.UNIVERSAL,
type: g.Type.OID,
constructed: !1,
capture: "contentType"
}, {
name: "ContentInfo.content",
tagClass: g.Class.CONTEXT_SPECIFIC,
constructed: !0,
captureAsn1: "content"
}]
}, B0 = {
name: "PFX",
tagClass: g.Class.UNIVERSAL,
type: g.Type.SEQUENCE,
constructed: !0,
value: [
{
name: "PFX.version",
tagClass: g.Class.UNIVERSAL,
type: g.Type.INTEGER,
constructed: !1,
capture: "version"
},
mi,
{
name: "PFX.macData",
tagClass: g.Class.UNIVERSAL,
type: g.Type.SEQUENCE,
constructed: !0,
optional: !0,
captureAsn1: "mac",
value: [{
name: "PFX.macData.mac",
tagClass: g.Class.UNIVERSAL,
type: g.Type.SEQUENCE,
// DigestInfo
constructed: !0,
value: [{
name: "PFX.macData.mac.digestAlgorithm",
tagClass: g.Class.UNIVERSAL,
type: g.Type.SEQUENCE,
// DigestAlgorithmIdentifier
constructed: !0,
value: [{
name: "PFX.macData.mac.digestAlgorithm.algorithm",
tagClass: g.Class.UNIVERSAL,
type: g.Type.OID,
constructed: !1,
capture: "macAlgorithm"
}, {
name: "PFX.macData.mac.digestAlgorithm.parameters",
optional: !0,
tagClass: g.Class.UNIVERSAL,
captureAsn1: "macAlgorithmParameters"
}]
}, {
name: "PFX.macData.mac.digest",
tagClass: g.Class.UNIVERSAL,
type: g.Type.OCTETSTRING,
constructed: !1,
capture: "macDigest"
}]
}, {
name: "PFX.macData.macSalt",
tagClass: g.Class.UNIVERSAL,
type: g.Type.OCTETSTRING,
constructed: !1,
capture: "macSalt"
}, {
name: "PFX.macData.iterations",
tagClass: g.Class.UNIVERSAL,
type: g.Type.INTEGER,
constructed: !1,
optional: !0,
capture: "macIterations"
}]
}
]
}, b0 = {
name: "SafeBag",
tagClass: g.Class.UNIVERSAL,
type: g.Type.SEQUENCE,
constructed: !0,
value: [{
name: "SafeBag.bagId",
tagClass: g.Class.UNIVERSAL,
type: g.Type.OID,
constructed: !1,
capture: "bagId"
}, {
name: "SafeBag.bagValue",
tagClass: g.Class.CONTEXT_SPECIFIC,
constructed: !0,
captureAsn1: "bagValue"
}, {
name: "SafeBag.bagAttributes",
tagClass: g.Class.UNIVERSAL,
type: g.Type.SET,
constructed: !0,
optional: !0,
capture: "bagAttributes"
}]
}, _0 = {
name: "Attribute",
tagClass: g.Class.UNIVERSAL,
type: g.Type.SEQUENCE,
constructed: !0,
value: [{
name: "Attribute.attrId",
tagClass: g.Class.UNIVERSAL,
type: g.Type.OID,
constructed: !1,
capture: "oid"
}, {
name: "Attribute.attrValues",
tagClass: g.Class.UNIVERSAL,
type: g.Type.SET,
constructed: !0,
capture: "values"
}]
}, N0 = {
name: "CertBag",
tagClass: g.Class.UNIVERSAL,
type: g.Type.SEQUENCE,
constructed: !0,
value: [{
name: "CertBag.certId",
tagClass: g.Class.UNIVERSAL,
type: g.Type.OID,
constructed: !1,
capture: "certId"
}, {
name: "CertBag.certValue",
tagClass: g.Class.CONTEXT_SPECIFIC,
constructed: !0,
/* So far we only support X.509 certificates (which are wrapped in
an OCTET STRING, hence hard code that here). */
value: [{
name: "CertBag.certValue[0]",
tagClass: g.Class.UNIVERSAL,
type: g.Class.OCTETSTRING,
constructed: !1,
capture: "cert"
}]
}]
};
function zt(e, t, a, r) {
for (var i = [], s = 0; s < e.length; s++)
for (var n = 0; n < e[s].safeBags.length; n++) {
var o = e[s].safeBags[n];
if (!(r !== void 0 && o.type !== r)) {
if (t === null) {
i.push(o);
continue;
}
o.attributes[t] !== void 0 && o.attributes[t].indexOf(a) >= 0 && i.push(o);
}
}
return i;
}
Jt.pkcs12FromAsn1 = function(e, t, a) {
typeof t == "string" ? (a = t, t = !0) : t === void 0 && (t = !0);
var r = {}, i = [];
if (!g.validate(e, B0, r, i)) {
var s = new Error("Cannot read PKCS#12 PFX. ASN.1 object is not an PKCS#12 PFX.");
throw s.errors = s, s;
}
var n = {
version: r.version.charCodeAt(0),
safeContents: [],
/**
* Gets bags with matching attributes.
*
* @param filter the attributes to filter by:
* [localKeyId] the localKeyId to search for.
* [localKeyIdHex] the localKeyId in hex to search for.
* [friendlyName] the friendly name to search for.
* [bagType] bag type to narrow each attribute search by.
*
* @return a map of attribute type to an array of matching bags or, if no
* attribute was given but a bag type, the map key will be the
* bag type.
*/
getBags: function(T) {
var I = {}, B;
return "localKeyId" in T ? B = T.localKeyId : "localKeyIdHex" in T && (B = oe.util.hexToBytes(T.localKeyIdHex)), B === void 0 && !("friendlyName" in T) && "bagType" in T && (I[T.bagType] = zt(
n.safeContents,
null,
null,
T.bagType
)), B !== void 0 && (I.localKeyId = zt(
n.safeContents,
"localKeyId",
B,
T.bagType
)), "friendlyName" in T && (I.friendlyName = zt(
n.safeContents,
"friendlyName",
T.friendlyName,
T.bagType
)), I;
},
/**
* DEPRECATED: use getBags() instead.
*
* Get bags with matching friendlyName attribute.
*
* @param friendlyName the friendly name to search for.
* @param [bagType] bag type to narrow search by.
*
* @return an array of bags with matching friendlyName attribute.
*/
getBagsByFriendlyName: function(T, I) {
return zt(
n.safeContents,
"friendlyName",
T,
I
);
},
/**
* DEPRECATED: use getBags() instead.
*
* Get bags with matching localKeyId attribute.
*
* @param localKeyId the localKeyId to search for.
* @param [bagType] bag type to narrow search by.
*
* @return an array of bags with matching localKeyId attribute.
*/
getBagsByLocalKeyId: function(T, I) {
return zt(
n.safeContents,
"localKeyId",
T,
I
);
}
};
if (r.version.charCodeAt(0) !== 3) {
var s = new Error("PKCS#12 PFX of version other than 3 not supported.");
throw s.version = r.version.charCodeAt(0), s;
}
if (g.derToOid(r.contentType) !== X.oids.data) {
var s = new Error("Only PKCS#12 PFX in password integrity mode supported.");
throw s.oid = g.derToOid(r.contentType), s;
}
var o = r.content.value[0];
if (o.tagClass !== g.Class.UNIVERSAL || o.type !== g.Type.OCTETSTRING)
throw new Error("PKCS#12 authSafe content data is not an OCTET STRING.");
if (o = la(o), r.mac) {
var f = null, u = 0, l = g.derToOid(r.macAlgorithm);
switch (l) {
case X.oids.sha1:
f = oe.md.sha1.create(), u = 20;
break;
case X.oids.sha256:
f = oe.md.sha256.create(), u = 32;
break;
case X.oids.sha384:
f = oe.md.sha384.create(), u = 48;
break;
case X.oids.sha512:
f = oe.md.sha512.create(), u = 64;
break;
case X.oids.md5:
f = oe.md.md5.create(), u = 16;
break;
}
if (f === null)
throw new Error("PKCS#12 uses unsupported MAC algorithm: " + l);
var c = new oe.util.ByteBuffer(r.macSalt), v = "macIterations" in r ? parseInt(oe.util.bytesToHex(r.macIterations), 16) : 1, C = Jt.generateKey(
a,
c,
3,
v,
u,
f
), y = oe.hmac.create();
y.start(f, C), y.update(o.value);
var x = y.getMac();
if (x.getBytes() !== r.macDigest)
throw new Error("PKCS#12 MAC could not be verified. Invalid password?");
} else if (Array.isArray(e.value) && e.value.length > 2)
throw new Error("Invalid PKCS#12. macData field present but MAC was not validated.");
return R0(n, o.value, t, a), n;
};
function la(e) {
if (e.composed || e.constructed) {
for (var t = oe.util.createBuffer(), a = 0; a < e.value.length; ++a)
t.putBytes(e.value[a].value);
e.composed = e.constructed = !1, e.value = t.getBytes();
}
return e;
}
function R0(e, t, a, r) {
if (t = g.fromDer(t, a), t.tagClass !== g.Class.UNIVERSAL || t.type !== g.Type.SEQUENCE || t.constructed !== !0)
throw new Error("PKCS#12 AuthenticatedSafe expected to be a SEQUENCE OF ContentInfo");
for (var i = 0; i < t.value.length; i++) {
var s = t.value[i], n = {}, o = [];
if (!g.validate(s, mi, n, o)) {
var f = new Error("Cannot read ContentInfo.");
throw f.errors = o, f;
}
var u = {
encrypted: !1
}, l = null, c = n.content.value[0];
switch (g.derToOid(n.contentType)) {
case X.oids.data:
if (c.tagClass !== g.Class.UNIVERSAL || c.type !== g.Type.OCTETSTRING)
throw new Error("PKCS#12 SafeContents Data is not an OCTET STRING.");
l = la(c).value;
break;
case X.oids.encryptedData:
l = w0(c, r), u.encrypted = !0;
break;
default:
var f = new Error("Unsupported PKCS#12 contentType.");
throw f.contentType = g.derToOid(n.contentType), f;
}
u.safeBags = L0(l, a, r), e.safeContents.push(u);
}
}
function w0(e, t) {
var a = {}, r = [];
if (!g.validate(
e,
oe.pkcs7.asn1.encryptedDataValidator,
a,
r
)) {
var i = new Error("Cannot read EncryptedContentInfo.");
throw i.errors = r, i;
}
var s = g.derToOid(a.contentType);
if (s !== X.oids.data) {
var i = new Error(
"PKCS#12 EncryptedContentInfo ContentType is not Data."
);
throw i.oid = s, i;
}
s = g.derToOid(a.encAlgorithm);
var n = X.pbe.getCipher(s, a.encParameter, t), o = la(a.encryptedContentAsn1), f = oe.util.createBuffer(o.value);
if (n.update(f), !n.finish())
throw new Error("Failed to decrypt PKCS#12 SafeContents.");
return n.output.getBytes();
}
function L0(e, t, a) {
if (!t && e.length === 0)
return [];
if (e = g.fromDer(e, t), e.tagClass !== g.Class.UNIVERSAL || e.type !== g.Type.SEQUENCE || e.constructed !== !0)
throw new Error(
"PKCS#12 SafeContents expected to be a SEQUENCE OF SafeBag."
);
for (var r = [], i = 0; i < e.value.length; i++) {
var s = e.value[i], n = {}, o = [];
if (!g.validate(s, b0, n, o)) {
var f = new Error("Cannot read SafeBag.");
throw f.errors = o, f;
}
var u = {
type: g.derToOid(n.bagId),
attributes: D0(n.bagAttributes)
};
r.push(u);
var l, c, v = n.bagValue.value[0];
switch (u.type) {
case X.oids.pkcs8ShroudedKeyBag:
if (v = X.decryptPrivateKeyInfo(v, a), v === null)
throw new Error(
"Unable to decrypt PKCS#8 ShroudedKeyBag, wrong password?"
);
case X.oids.keyBag:
try {
u.key = X.privateKeyFromAsn1(v);
} catch {
u.key = null, u.asn1 = v;
}
continue;
case X.oids.certBag:
l = N0, c = function() {
if (g.derToOid(n.certId) !== X.oids.x509Certificate) {
var y = new Error(
"Unsupported certificate type, only X.509 supported."
);
throw y.oid = g.derToOid(n.certId), y;
}
var x = g.fromDer(n.cert, t);
try {
u.cert = X.certificateFromAsn1(x, !0);
} catch {
u.cert = null, u.asn1 = x;
}
};
break;
default:
var f = new Error("Unsupported PKCS#12 SafeBag type.");
throw f.oid = u.type, f;
}
if (l !== void 0 && !g.validate(v, l, n, o)) {
var f = new Error("Cannot read PKCS#12 " + l.name);
throw f.errors = o, f;
}
c();
}
return r;
}
function D0(e) {
var t = {};
if (e !== void 0)
for (var a = 0; a < e.length; ++a) {
var r = {}, i = [];
if (!g.validate(e[a], _0, r, i)) {
var s = new Error("Cannot read PKCS#12 BagAttribute.");
throw s.errors = i, s;
}
var n = g.derToOid(r.oid);
if (X.oids[n] !== void 0) {
t[X.oids[n]] = [];
for (var o = 0; o < r.values.length; ++o)
t[X.oids[n]].push(r.values[o].value);
}
}
return t;
}
Jt.toPkcs12Asn1 = function(e, t, a, r) {
r = r || {}, r.saltSize = r.saltSize || 8, r.count = r.count || 2048, r.algorithm = r.algorithm || r.encAlgorithm || "aes128", "useMac" in r || (r.useMac = !0), "localKeyId" in r || (r.localKeyId = null), "generateLocalKeyId" in r || (r.generateLocalKeyId = !0);
var i = r.localKeyId, s;
if (i !== null)
i = oe.util.hexToBytes(i);
else if (r.generateLocalKeyId)
if (t) {
var n = oe.util.isArray(t) ? t[0] : t;
typeof n == "string" && (n = X.certificateFromPem(n));
var o = oe.md.sha1.create();
o.update(g.toDer(X.certificateToAsn1(n)).getBytes()), i = o.digest().getBytes();
} else
i = oe.random.getBytes(20);
var f = [];
i !== null && f.push(
// localKeyID
g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// attrId
g.create(
g.Class.UNIVERSAL,
g.Type.OID,
!1,
g.oidToDer(X.oids.localKeyId).getBytes()
),
// attrValues
g.create(g.Class.UNIVERSAL, g.Type.SET, !0, [
g.create(
g.Class.UNIVERSAL,
g.Type.OCTETSTRING,
!1,
i
)
])
])
), "friendlyName" in r && f.push(
// friendlyName
g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// attrId
g.create(
g.Class.UNIVERSAL,
g.Type.OID,
!1,
g.oidToDer(X.oids.friendlyName).getBytes()
),
// attrValues
g.create(g.Class.UNIVERSAL, g.Type.SET, !0, [
g.create(
g.Class.UNIVERSAL,
g.Type.BMPSTRING,
!1,
r.friendlyName
)
])
])
), f.length > 0 && (s = g.create(g.Class.UNIVERSAL, g.Type.SET, !0, f));
var u = [], l = [];
t !== null && (oe.util.isArray(t) ? l = t : l = [t]);
for (var c = [], v = 0; v < l.length; ++v) {
t = l[v], typeof t == "string" && (t = X.certificateFromPem(t));
var C = v === 0 ? s : void 0, y = X.certificateToAsn1(t), x = g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// bagId
g.create(
g.Class.UNIVERSAL,
g.Type.OID,
!1,
g.oidToDer(X.oids.certBag).getBytes()
),
// bagValue
g.create(g.Class.CONTEXT_SPECIFIC, 0, !0, [
// CertBag
g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// certId
g.create(
g.Class.UNIVERSAL,
g.Type.OID,
!1,
g.oidToDer(X.oids.x509Certificate).getBytes()
),
// certValue (x509Certificate)
g.create(g.Class.CONTEXT_SPECIFIC, 0, !0, [
g.create(
g.Class.UNIVERSAL,
g.Type.OCTETSTRING,
!1,
g.toDer(y).getBytes()
)
])
])
]),
// bagAttributes (OPTIONAL)
C
]);
c.push(x);
}
if (c.length > 0) {
var T = g.create(
g.Class.UNIVERSAL,
g.Type.SEQUENCE,
!0,
c
), I = (
// PKCS#7 ContentInfo
g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// contentType
g.create(
g.Class.UNIVERSAL,
g.Type.OID,
!1,
// OID for the content type is 'data'
g.oidToDer(X.oids.data).getBytes()
),
// content
g.create(g.Class.CONTEXT_SPECIFIC, 0, !0, [
g.create(
g.Class.UNIVERSAL,
g.Type.OCTETSTRING,
!1,
g.toDer(T).getBytes()
)
])
])
);
u.push(I);
}
var B = null;
if (e !== null) {
var b = X.wrapRsaPrivateKey(X.privateKeyToAsn1(e));
a === null ? B = g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// bagId
g.create(
g.Class.UNIVERSAL,
g.Type.OID,
!1,
g.oidToDer(X.oids.keyBag).getBytes()
),
// bagValue
g.create(g.Class.CONTEXT_SPECIFIC, 0, !0, [
// PrivateKeyInfo
b
]),
// bagAttributes (OPTIONAL)
s
]) : B = g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// bagId
g.create(
g.Class.UNIVERSAL,
g.Type.OID,
!1,
g.oidToDer(X.oids.pkcs8ShroudedKeyBag).getBytes()
),
// bagValue
g.create(g.Class.CONTEXT_SPECIFIC, 0, !0, [
// EncryptedPrivateKeyInfo
X.encryptPrivateKeyInfo(b, a, r)
]),
// bagAttributes (OPTIONAL)
s
]);
var V = g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [B]), D = (
// PKCS#7 ContentInfo
g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// contentType
g.create(
g.Class.UNIVERSAL,
g.Type.OID,
!1,
// OID for the content type is 'data'
g.oidToDer(X.oids.data).getBytes()
),
// content
g.create(g.Class.CONTEXT_SPECIFIC, 0, !0, [
g.create(
g.Class.UNIVERSAL,
g.Type.OCTETSTRING,
!1,
g.toDer(V).getBytes()
)
])
])
);
u.push(D);
}
var w = g.create(
g.Class.UNIVERSAL,
g.Type.SEQUENCE,
!0,
u
), G;
if (r.useMac) {
var o = oe.md.sha1.create(), Y = new oe.util.ByteBuffer(
oe.random.getBytes(r.saltSize)
), re = r.count, e = Jt.generateKey(a, Y, 3, re, 20), ae = oe.hmac.create();
ae.start(o, e), ae.update(g.toDer(w).getBytes());
var ie = ae.getMac();
G = g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// mac DigestInfo
g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// digestAlgorithm
g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// algorithm = SHA-1
g.create(
g.Class.UNIVERSAL,
g.Type.OID,
!1,
g.oidToDer(X.oids.sha1).getBytes()
),
// parameters = Null
g.create(g.Class.UNIVERSAL, g.Type.NULL, !1, "")
]),
// digest
g.create(
g.Class.UNIVERSAL,
g.Type.OCTETSTRING,
!1,
ie.getBytes()
)
]),
// macSalt OCTET STRING
g.create(
g.Class.UNIVERSAL,
g.Type.OCTETSTRING,
!1,
Y.getBytes()
),
// iterations INTEGER (XXX: Only support count < 65536)
g.create(
g.Class.UNIVERSAL,
g.Type.INTEGER,
!1,
g.integerToDer(re).getBytes()
)
]);
}
return g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// version (3)
g.create(
g.Class.UNIVERSAL,
g.Type.INTEGER,
!1,
g.integerToDer(3).getBytes()
),
// PKCS#7 ContentInfo
g.create(g.Class.UNIVERSAL, g.Type.SEQUENCE, !0, [
// contentType
g.create(
g.Class.UNIVERSAL,
g.Type.OID,
!1,
// OID for the content type is 'data'
g.oidToDer(X.oids.data).getBytes()
),
// content
g.create(g.Class.CONTEXT_SPECIFIC, 0, !0, [
g.create(
g.Class.UNIVERSAL,
g.Type.OCTETSTRING,
!1,
g.toDer(w).getBytes()
)
])
]),
G
]);
};
Jt.generateKey = oe.pbe.generatePkcs12Key;
var Tt = z, ca = Tt.asn1, Mt = Tt.pki = Tt.pki || {};
Mt.pemToDer = function(e) {
var t = Tt.pem.decode(e)[0];
if (t.procType && t.procType.type === "ENCRYPTED")
throw new Error("Could not convert PEM to DER; PEM is encrypted.");
return Tt.util.createBuffer(t.body);
};
Mt.privateKeyFromPem = function(e) {
var t = Tt.pem.decode(e)[0];
if (t.type !== "PRIVATE KEY" && t.type !== "RSA PRIVATE KEY") {
var a = new Error('Could not convert private key from PEM; PEM header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".');
throw a.headerType = t.type, a;
}
if (t.procType && t.procType.type === "ENCRYPTED")
throw new Error("Could not convert private key from PEM; PEM is encrypted.");
var r = ca.fromDer(t.body);
return Mt.privateKeyFromAsn1(r);
};
Mt.privateKeyToPem = function(e, t) {
var a = {
type: "RSA PRIVATE KEY",
body: ca.toDer(Mt.privateKeyToAsn1(e)).getBytes()
};
return Tt.pem.encode(a, { maxline: t });
};
Mt.privateKeyInfoToPem = function(e, t) {
var a = {
type: "PRIVATE KEY",
body: ca.toDer(e).getBytes()
};
return Tt.pem.encode(a, { maxline: t });
};
var _ = z, _r = function(e, t, a, r) {
var i = _.util.createBuffer(), s = e.length >> 1, n = s + (e.length & 1), o = e.substr(0, n), f = e.substr(s, n), u = _.util.createBuffer(), l = _.hmac.create();
a = t + a;
var c = Math.ceil(r / 16), v = Math.ceil(r / 20);
l.start("MD5", o);
var C = _.util.createBuffer();
u.putBytes(a);
for (var y = 0; y < c; ++y)
l.start(null, null), l.update(u.getBytes()), u.putBuffer(l.digest()), l.start(null, null), l.update(u.bytes() + a), C.putBuffer(l.digest());
l.start("SHA1", f);
var x = _.util.createBuffer();
u.clear(), u.putBytes(a);
for (var y = 0; y < v; ++y)
l.start(null, null), l.update(u.getBytes()), u.putBuffer(l.digest()), l.start(null, null), l.update(u.bytes() + a), x.putBuffer(l.digest());
return i.putBytes(_.util.xorBytes(
C.getBytes(),
x.getBytes(),
r
)), i;
}, k0 = function(e, t, a) {
var r = _.hmac.create();
r.start("SHA1", e);
var i = _.util.createBuffer();
return i.putInt32(t[0]), i.putInt32(t[1]), i.putByte(a.type), i.putByte(a.version.major), i.putByte(a.version.minor), i.putInt16(a.length), i.putBytes(a.fragment.bytes()), r.update(i.getBytes()), r.digest().getBytes();
}, U0 = function(e, t, a) {
var r = !1;
try {
var i = e.deflate(t.fragment.getBytes());
t.fragment = _.util.createBuffer(i), t.length = i.length, r = !0;
} catch {
}
return r;
}, P0 = function(e, t, a) {
var r = !1;
try {
var i = e.inflate(t.fragment.getBytes());
t.fragment = _.util.createBuffer(i), t.length = i.length, r = !0;
} catch {
}
return r;
}, ze = function(e, t) {
var a = 0;
switch (t) {
case 1:
a = e.getByte();
break;
case 2:
a = e.getInt16();
break;
case 3:
a = e.getInt24();
break;
case 4:
a = e.getInt32();
break;
}
return _.util.createBuffer(e.getBytes(a));
}, We = function(e, t, a) {
e.putInt(a.length(), t << 3), e.putBuffer(a);
}, p = {};
p.Versions = {
TLS_1_0: { major: 3, minor: 1 },
TLS_1_1: { major: 3, minor: 2 },
TLS_1_2: { major: 3, minor: 3 }
};
p.SupportedVersions = [
p.Versions.TLS_1_1,
p.Versions.TLS_1_0
];
p.Version = p.SupportedVersions[0];
p.MaxFragment = 16384 - 1024;
p.ConnectionEnd = {
server: 0,
client: 1
};
p.PRFAlgorithm = {
tls_prf_sha256: 0
};
p.BulkCipherAlgorithm = {
none: null,
rc4: 0,
des3: 1,
aes: 2
};
p.CipherType = {
stream: 0,
block: 1,
aead: 2
};
p.MACAlgorithm = {
none: null,
hmac_md5: 0,
hmac_sha1: 1,
hmac_sha256: 2,
hmac_sha384: 3,
hmac_sha512: 4
};
p.CompressionMethod = {
none: 0,
deflate: 1
};
p.ContentType = {
change_cipher_spec: 20,
alert: 21,
handshake: 22,
application_data: 23,
heartbeat: 24
};
p.HandshakeType = {
hello_request: 0,
client_hello: 1,
server_hello: 2,
certificate: 11,
server_key_exchange: 12,
certificate_request: 13,
server_hello_done: 14,
certificate_verify: 15,
client_key_exchange: 16,
finished: 20
};
p.Alert = {};
p.Alert.Level = {
warning: 1,
fatal: 2
};
p.Alert.Description = {
close_notify: 0,
unexpected_message: 10,
bad_record_mac: 20,
decryption_failed: 21,
record_overflow: 22,
decompression_failure: 30,
handshake_failure: 40,
bad_certificate: 42,
unsupported_certificate: 43,
certificate_revoked: 44,
certificate_expired: 45,
certificate_unknown: 46,
illegal_parameter: 47,
unknown_ca: 48,
access_denied: 49,
decode_error: 50,
decrypt_error: 51,
export_restriction: 60,
protocol_version: 70,
insufficient_security: 71,
internal_error: 80,
user_canceled: 90,
no_renegotiation: 100
};
p.HeartbeatMessageType = {
heartbeat_request: 1,
heartbeat_response: 2
};
p.CipherSuites = {};
p.getCipherSuite = function(e) {
var t = null;
for (var a in p.CipherSuites) {
var r = p.CipherSuites[a];
if (r.id[0] === e.charCodeAt(0) && r.id[1] === e.charCodeAt(1)) {
t = r;
break;
}
}
return t;
};
p.handleUnexpected = function(e, t) {
var a = !e.open && e.entity === p.ConnectionEnd.client;
a || e.error(e, {
message: "Unexpected message. Received TLS record out of order.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.unexpected_message
}
});
};
p.handleHelloRequest = function(e, t, a) {
!e.handshaking && e.handshakes > 0 && (p.queue(e, p.createAlert(e, {
level: p.Alert.Level.warning,
description: p.Alert.Description.no_renegotiation
})), p.flush(e)), e.process();
};
p.parseHelloMessage = function(e, t, a) {
var r = null, i = e.entity === p.ConnectionEnd.client;
if (a < 38)
e.error(e, {
message: i ? "Invalid ServerHello message. Message too short." : "Invalid ClientHello message. Message too short.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.illegal_parameter
}
});
else {
var s = t.fragment, n = s.length();
if (r = {
version: {
major: s.getByte(),
minor: s.getByte()
},
random: _.util.createBuffer(s.getBytes(32)),
session_id: ze(s, 1),
extensions: []
}, i ? (r.cipher_suite = s.getBytes(2), r.compression_method = s.getByte()) : (r.cipher_suites = ze(s, 2), r.compression_methods = ze(s, 1)), n = a - (n - s.length()), n > 0) {
for (var o = ze(s, 2); o.length() > 0; )
r.extensions.push({
type: [o.getByte(), o.getByte()],
data: ze(o, 2)
});
if (!i)
for (var f = 0; f < r.extensions.length; ++f) {
var u = r.extensions[f];
if (u.type[0] === 0 && u.type[1] === 0)
for (var l = ze(u.data, 2); l.length() > 0; ) {
var c = l.getByte();
if (c !== 0)
break;
e.session.extensions.server_name.serverNameList.push(
ze(l, 2).getBytes()
);
}
}
}
if (e.session.version && (r.version.major !== e.session.version.major || r.version.minor !== e.session.version.minor))
return e.error(e, {
message: "TLS version change is disallowed during renegotiation.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.protocol_version
}
});
if (i)
e.session.cipherSuite = p.getCipherSuite(r.cipher_suite);
else
for (var v = _.util.createBuffer(r.cipher_suites.bytes()); v.length() > 0 && (e.session.cipherSuite = p.getCipherSuite(v.getBytes(2)), e.session.cipherSuite === null); )
;
if (e.session.cipherSuite === null)
return e.error(e, {
message: "No cipher suites in common.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.handshake_failure
},
cipherSuite: _.util.bytesToHex(r.cipher_suite)
});
i ? e.session.compressionMethod = r.compression_method : e.session.compressionMethod = p.CompressionMethod.none;
}
return r;
};
p.createSecurityParameters = function(e, t) {
var a = e.entity === p.ConnectionEnd.client, r = t.random.bytes(), i = a ? e.session.sp.client_random : r, s = a ? r : p.createRandom().getBytes();
e.session.sp = {
entity: e.entity,
prf_algorithm: p.PRFAlgorithm.tls_prf_sha256,
bulk_cipher_algorithm: null,
cipher_type: null,
enc_key_length: null,
block_length: null,
fixed_iv_length: null,
record_iv_length: null,
mac_algorithm: null,
mac_length: null,
mac_key_length: null,
compression_algorithm: e.session.compressionMethod,
pre_master_secret: null,
master_secret: null,
client_random: i,
server_random: s
};
};
p.handleServerHello = function(e, t, a) {
var r = p.parseHelloMessage(e, t, a);
if (!e.fail) {
if (r.version.minor <= e.version.minor)
e.version.minor = r.version.minor;
else
return e.error(e, {
message: "Incompatible TLS version.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.protocol_version
}
});
e.session.version = e.version;
var i = r.session_id.bytes();
i.length > 0 && i === e.session.id ? (e.expect = Ei, e.session.resuming = !0, e.session.sp.server_random = r.random.bytes()) : (e.expect = O0, e.session.resuming = !1, p.createSecurityParameters(e, r)), e.session.id = i, e.process();
}
};
p.handleClientHello = function(e, t, a) {
var r = p.parseHelloMessage(e, t, a);
if (!e.fail) {
var i = r.session_id.bytes(), s = null;
if (e.sessionCache && (s = e.sessionCache.getSession(i), s === null ? i = "" : (s.version.major !== r.version.major || s.version.minor > r.version.minor) && (s = null, i = "")), i.length === 0 && (i = _.random.getBytes(32)), e.session.id = i, e.session.clientHelloVersion = r.version, e.session.sp = {}, s)
e.version = e.session.version = s.version, e.session.sp = s.sp;
else {
for (var n, o = 1; o < p.SupportedVersions.length && (n = p.SupportedVersions[o], !(n.minor <= r.version.minor)); ++o)
;
e.version = { major: n.major, minor: n.minor }, e.session.version = e.version;
}
s !== null ? (e.expect = ha, e.session.resuming = !0, e.session.sp.client_random = r.random.bytes()) : (e.expect = e.verifyClient !== !1 ? Q0 : Qr, e.session.resuming = !1, p.createSecurityParameters(e, r)), e.open = !0, p.queue(e, p.createRecord(e, {
type: p.ContentType.handshake,
data: p.createServerHello(e)
})), e.session.resuming ? (p.queue(e, p.createRecord(e, {
type: p.ContentType.change_cipher_spec,
data: p.createChangeCipherSpec()
})), e.state.pending = p.createConnectionState(e), e.state.current.write = e.state.pending.write, p.queue(e, p.createRecord(e, {
type: p.ContentType.handshake,
data: p.createFinished(e)
}))) : (p.queue(e, p.createRecord(e, {
type: p.ContentType.handshake,
data: p.createCertificate(e)
})), e.fail || (p.queue(e, p.createRecord(e, {
type: p.ContentType.handshake,
data: p.createServerKeyExchange(e)
})), e.verifyClient !== !1 && p.queue(e, p.createRecord(e, {
type: p.ContentType.handshake,
data: p.createCertificateRequest(e)
})), p.queue(e, p.createRecord(e, {
type: p.ContentType.handshake,
data: p.createServerHelloDone(e)
})))), p.flush(e), e.process();
}
};
p.handleCertificate = function(e, t, a) {
if (a < 3)
return e.error(e, {
message: "Invalid Certificate message. Message too short.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.illegal_parameter
}
});
var r = t.fragment, i = {
certificate_list: ze(r, 3)
}, s, n, o = [];
try {
for (; i.certificate_list.length() > 0; )
s = ze(i.certificate_list, 3), n = _.asn1.fromDer(s), s = _.pki.certificateFromAsn1(n, !0), o.push(s);
} catch (u) {
return e.error(e, {
message: "Could not parse certificate list.",
cause: u,
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.bad_certificate
}
});
}
var f = e.entity === p.ConnectionEnd.client;
(f || e.verifyClient === !0) && o.length === 0 ? e.error(e, {
message: f ? "No server certificate provided." : "No client certificate provided.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.illegal_parameter
}
}) : o.length === 0 ? e.expect = f ? Pa : Qr : (f ? e.session.serverCertificate = o[0] : e.session.clientCertificate = o[0], p.verifyCertificateChain(e, o) && (e.expect = f ? Pa : Qr)), e.process();
};
p.handleServerKeyExchange = function(e, t, a) {
if (a > 0)
return e.error(e, {
message: "Invalid key parameters. Only RSA is supported.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.unsupported_certificate
}
});
e.expect = F0, e.process();
};
p.handleClientKeyExchange = function(e, t, a) {
if (a < 48)
return e.error(e, {
message: "Invalid key parameters. Only RSA is supported.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.unsupported_certificate
}
});
var r = t.fragment, i = {
enc_pre_master_secret: ze(r, 2).getBytes()
}, s = null;
if (e.getPrivateKey)
try {
s = e.getPrivateKey(e, e.session.serverCertificate), s = _.pki.privateKeyFromPem(s);
} catch (f) {
e.error(e, {
message: "Could not get private key.",
cause: f,
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.internal_error
}
});
}
if (s === null)
return e.error(e, {
message: "No private key set.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.internal_error
}
});
try {
var n = e.session.sp;
n.pre_master_secret = s.decrypt(i.enc_pre_master_secret);
var o = e.session.clientHelloVersion;
if (o.major !== n.pre_master_secret.charCodeAt(0) || o.minor !== n.pre_master_secret.charCodeAt(1))
throw new Error("TLS version rollback attack detected.");
} catch {
n.pre_master_secret = _.random.getBytes(48);
}
e.expect = ha, e.session.clientCertificate !== null && (e.expect = z0), e.process();
};
p.handleCertificateRequest = function(e, t, a) {
if (a < 3)
return e.error(e, {
message: "Invalid CertificateRequest. Message too short.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.illegal_parameter
}
});
var r = t.fragment, i = {
certificate_types: ze(r, 1),
certificate_authorities: ze(r, 2)
};
e.session.certificateRequest = i, e.expect = K0, e.process();
};
p.handleCertificateVerify = function(e, t, a) {
if (a < 2)
return e.error(e, {
message: "Invalid CertificateVerify. Message too short.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.illegal_parameter
}
});
var r = t.fragment;
r.read -= 4;
var i = r.bytes();
r.read += 4;
var s = {
signature: ze(r, 2).getBytes()
}, n = _.util.createBuffer();
n.putBuffer(e.session.md5.digest()), n.putBuffer(e.session.sha1.digest()), n = n.getBytes();
try {
var o = e.session.clientCertificate;
if (!o.publicKey.verify(n, s.signature, "NONE"))
throw new Error("CertificateVerify signature does not match.");
e.session.md5.update(i), e.session.sha1.update(i);
} catch {
return e.error(e, {
message: "Bad signature in CertificateVerify.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.handshake_failure
}
});
}
e.expect = ha, e.process();
};
p.handleServerHelloDone = function(e, t, a) {
if (a > 0)
return e.error(e, {
message: "Invalid ServerHelloDone message. Invalid length.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.record_overflow
}
});
if (e.serverCertificate === null) {
var r = {
message: "No server certificate provided. Not enough security.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.insufficient_security
}
}, i = 0, s = e.verify(e, r.alert.description, i, []);
if (s !== !0)
return (s || s === 0) && (typeof s == "object" && !_.util.isArray(s) ? (s.message && (r.message = s.message), s.alert && (r.alert.description = s.alert)) : typeof s == "number" && (r.alert.description = s)), e.error(e, r);
}
e.session.certificateRequest !== null && (t = p.createRecord(e, {
type: p.ContentType.handshake,
data: p.createCertificate(e)
}), p.queue(e, t)), t = p.createRecord(e, {
type: p.ContentType.handshake,
data: p.createClientKeyExchange(e)
}), p.queue(e, t), e.expect = G0;
var n = function(o, f) {
o.session.certificateRequest !== null && o.session.clientCertificate !== null && p.queue(o, p.createRecord(o, {
type: p.ContentType.handshake,
data: p.createCertificateVerify(o, f)
})), p.queue(o, p.createRecord(o, {
type: p.ContentType.change_cipher_spec,
data: p.createChangeCipherSpec()
})), o.state.pending = p.createConnectionState(o), o.state.current.write = o.state.pending.write, p.queue(o, p.createRecord(o, {
type: p.ContentType.handshake,
data: p.createFinished(o)
})), o.expect = Ei, p.flush(o), o.process();
};
if (e.session.certificateRequest === null || e.session.clientCertificate === null)
return n(e, null);
p.getClientSignature(e, n);
};
p.handleChangeCipherSpec = function(e, t) {
if (t.fragment.getByte() !== 1)
return e.error(e, {
message: "Invalid ChangeCipherSpec message received.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.illegal_parameter
}
});
var a = e.entity === p.ConnectionEnd.client;
(e.session.resuming && a || !e.session.resuming && !a) && (e.state.pending = p.createConnectionState(e)), e.state.current.read = e.state.pending.read, (!e.session.resuming && a || e.session.resuming && !a) && (e.state.pending = null), e.expect = a ? M0 : Y0, e.process();
};
p.handleFinished = function(e, t, a) {
var r = t.fragment;
r.read -= 4;
var i = r.bytes();
r.read += 4;
var s = t.fragment.getBytes();
r = _.util.createBuffer(), r.putBuffer(e.session.md5.digest()), r.putBuffer(e.session.sha1.digest());
var n = e.entity === p.ConnectionEnd.client, o = n ? "server finished" : "client finished", f = e.session.sp, u = 12, l = _r;
if (r = l(f.master_secret, o, r.getBytes(), u), r.getBytes() !== s)
return e.error(e, {
message: "Invalid verify_data in Finished message.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.decrypt_error
}
});
e.session.md5.update(i), e.session.sha1.update(i), (e.session.resuming && n || !e.session.resuming && !n) && (p.queue(e, p.createRecord(e, {
type: p.ContentType.change_cipher_spec,
data: p.createChangeCipherSpec()
})), e.state.current.write = e.state.pending.write, e.state.pending = null, p.queue(e, p.createRecord(e, {
type: p.ContentType.handshake,
data: p.createFinished(e)
}))), e.expect = n ? H0 : X0, e.handshaking = !1, ++e.handshakes, e.peerCertificate = n ? e.session.serverCertificate : e.session.clientCertificate, p.flush(e), e.isConnected = !0, e.connected(e), e.process();
};
p.handleAlert = function(e, t) {
var a = t.fragment, r = {
level: a.getByte(),
description: a.getByte()
}, i;
switch (r.description) {
case p.Alert.Description.close_notify:
i = "Connection closed.";
break;
case p.Alert.Description.unexpected_message:
i = "Unexpected message.";
break;
case p.Alert.Description.bad_record_mac:
i = "Bad record MAC.";
break;
case p.Alert.Description.decryption_failed:
i = "Decryption failed.";
break;
case p.Alert.Description.record_overflow:
i = "Record overflow.";
break;
case p.Alert.Description.decompression_failure:
i = "Decompression failed.";
break;
case p.Alert.Description.handshake_failure:
i = "Handshake failure.";
break;
case p.Alert.Description.bad_certificate:
i = "Bad certificate.";
break;
case p.Alert.Description.unsupported_certificate:
i = "Unsupported certificate.";
break;
case p.Alert.Description.certificate_revoked:
i = "Certificate revoked.";
break;
case p.Alert.Description.certificate_expired:
i = "Certificate expired.";
break;
case p.Alert.Description.certificate_unknown:
i = "Certificate unknown.";
break;
case p.Alert.Description.illegal_parameter:
i = "Illegal parameter.";
break;
case p.Alert.Description.unknown_ca:
i = "Unknown certificate authority.";
break;
case p.Alert.Description.access_denied:
i = "Access denied.";
break;
case p.Alert.Description.decode_error:
i = "Decode error.";
break;
case p.Alert.Description.decrypt_error:
i = "Decrypt error.";
break;
case p.Alert.Description.export_restriction:
i = "Export restriction.";
break;
case p.Alert.Description.protocol_version:
i = "Unsupported protocol version.";
break;
case p.Alert.Description.insufficient_security:
i = "Insufficient security.";
break;
case p.Alert.Description.internal_error:
i = "Internal error.";
break;
case p.Alert.Description.user_canceled:
i = "User canceled.";
break;
case p.Alert.Description.no_renegotiation:
i = "Renegotiation not supported.";
break;
default:
i = "Unknown error.";
break;
}
if (r.description === p.Alert.Description.close_notify)
return e.close();
e.error(e, {
message: i,
send: !1,
// origin is the opposite end
origin: e.entity === p.ConnectionEnd.client ? "server" : "client",
alert: r
}), e.process();
};
p.handleHandshake = function(e, t) {
var a = t.fragment, r = a.getByte(), i = a.getInt24();
if (i > a.length())
return e.fragmented = t, t.fragment = _.util.createBuffer(), a.read -= 4, e.process();
e.fragmented = null, a.read -= 4;
var s = a.bytes(i + 4);
a.read += 4, r in yr[e.entity][e.expect] ? (e.entity === p.ConnectionEnd.server && !e.open && !e.fail && (e.handshaking = !0, e.session = {
version: null,
extensions: {
server_name: {
serverNameList: []
}
},
cipherSuite: null,
compressionMethod: null,
serverCertificate: null,
clientCertificate: null,
md5: _.md.md5.create(),
sha1: _.md.sha1.create()
}), r !== p.HandshakeType.hello_request && r !== p.HandshakeType.certificate_verify && r !== p.HandshakeType.finished && (e.session.md5.update(s), e.session.sha1.update(s)), yr[e.entity][e.expect][r](e, t, i)) : p.handleUnexpected(e, t);
};
p.handleApplicationData = function(e, t) {
e.data.putBuffer(t.fragment), e.dataReady(e), e.process();
};
p.handleHeartbeat = function(e, t) {
var a = t.fragment, r = a.getByte(), i = a.getInt16(), s = a.getBytes(i);
if (r === p.HeartbeatMessageType.heartbeat_request) {
if (e.handshaking || i > s.length)
return e.process();
p.queue(e, p.createRecord(e, {
type: p.ContentType.heartbeat,
data: p.createHeartbeat(
p.HeartbeatMessageType.heartbeat_response,
s
)
})), p.flush(e);
} else if (r === p.HeartbeatMessageType.heartbeat_response) {
if (s !== e.expectedHeartbeatPayload)
return e.process();
e.heartbeatReceived && e.heartbeatReceived(e, _.util.createBuffer(s));
}
e.process();
};
var V0 = 0, O0 = 1, Pa = 2, F0 = 3, K0 = 4, Ei = 5, M0 = 6, H0 = 7, G0 = 8, q0 = 0, Q0 = 1, Qr = 2, z0 = 3, ha = 4, Y0 = 5, X0 = 6, d = p.handleUnexpected, xi = p.handleChangeCipherSpec, Te = p.handleAlert, Me = p.handleHandshake, Si = p.handleApplicationData, Ie = p.handleHeartbeat, da = [];
da[p.ConnectionEnd.client] = [
// CC,AL,HS,AD,HB
/*SHE*/
[d, Te, Me, d, Ie],
/*SCE*/
[d, Te, Me, d, Ie],
/*SKE*/
[d, Te, Me, d, Ie],
/*SCR*/
[d, Te, Me, d, Ie],
/*SHD*/
[d, Te, Me, d, Ie],
/*SCC*/
[xi, Te, d, d, Ie],
/*SFI*/
[d, Te, Me, d, Ie],
/*SAD*/
[d, Te, Me, Si, Ie],
/*SER*/
[d, Te, Me, d, Ie]
];
da[p.ConnectionEnd.server] = [
// CC,AL,HS,AD
/*CHE*/
[d, Te, Me, d, Ie],
/*CCE*/
[d, Te, Me, d, Ie],
/*CKE*/
[d, Te, Me, d, Ie],
/*CCV*/
[d, Te, Me, d, Ie],
/*CCC*/
[xi, Te, d, d, Ie],
/*CFI*/
[d, Te, Me, d, Ie],
/*CAD*/
[d, Te, Me, Si, Ie],
/*CER*/
[d, Te, Me, d, Ie]
];
var vt = p.handleHelloRequest, W0 = p.handleServerHello, Ti = p.handleCertificate, Va = p.handleServerKeyExchange, wr = p.handleCertificateRequest, ir = p.handleServerHelloDone, Ii = p.handleFinished, yr = [];
yr[p.ConnectionEnd.client] = [
// HR,01,SH,03,04,05,06,07,08,09,10,SC,SK,CR,HD,15,CK,17,18,19,FI
/*SHE*/
[d, d, W0, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d],
/*SCE*/
[vt, d, d, d, d, d, d, d, d, d, d, Ti, Va, wr, ir, d, d, d, d, d, d],
/*SKE*/
[vt, d, d, d, d, d, d, d, d, d, d, d, Va, wr, ir, d, d, d, d, d, d],
/*SCR*/
[vt, d, d, d, d, d, d, d, d, d, d, d, d, wr, ir, d, d, d, d, d, d],
/*SHD*/
[vt, d, d, d, d, d, d, d, d, d, d, d, d, d, ir, d, d, d, d, d, d],
/*SCC*/
[vt, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d],
/*SFI*/
[vt, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, Ii],
/*SAD*/
[vt, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d],
/*SER*/
[vt, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d]
];
var j0 = p.handleClientHello, $0 = p.handleClientKeyExchange, Z0 = p.handleCertificateVerify;
yr[p.ConnectionEnd.server] = [
// 01,CH,02,03,04,05,06,07,08,09,10,CC,12,13,14,CV,CK,17,18,19,FI
/*CHE*/
[d, j0, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d],
/*CCE*/
[d, d, d, d, d, d, d, d, d, d, d, Ti, d, d, d, d, d, d, d, d, d],
/*CKE*/
[d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, $0, d, d, d, d],
/*CCV*/
[d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, Z0, d, d, d, d, d],
/*CCC*/
[d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d],
/*CFI*/
[d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, Ii],
/*CAD*/
[d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d],
/*CER*/
[d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d, d]
];
p.generateKeys = function(e, t) {
var a = _r, r = t.client_random + t.server_random;
e.session.resuming || (t.master_secret = a(
t.pre_master_secret,
"master secret",
r,
48
).bytes(), t.pre_master_secret = null), r = t.server_random + t.client_random;
var i = 2 * t.mac_key_length + 2 * t.enc_key_length, s = e.version.major === p.Versions.TLS_1_0.major && e.version.minor === p.Versions.TLS_1_0.minor;
s && (i += 2 * t.fixed_iv_length);
var n = a(t.master_secret, "key expansion", r, i), o = {
client_write_MAC_key: n.getBytes(t.mac_key_length),
server_write_MAC_key: n.getBytes(t.mac_key_length),
client_write_key: n.getBytes(t.enc_key_length),
server_write_key: n.getBytes(t.enc_key_length)
};
return s && (o.client_write_IV = n.getBytes(t.fixed_iv_length), o.server_write_IV = n.getBytes(t.fixed_iv_length)), o;
};
p.createConnectionState = function(e) {
var t = e.entity === p.ConnectionEnd.client, a = function() {
var s = {
// two 32-bit numbers, first is most significant
sequenceNumber: [0, 0],
macKey: null,
macLength: 0,
macFunction: null,
cipherState: null,
cipherFunction: function(n) {
return !0;
},
compressionState: null,
compressFunction: function(n) {
return !0;
},
updateSequenceNumber: function() {
s.sequenceNumber[1] === 4294967295 ? (s.sequenceNumber[1] = 0, ++s.sequenceNumber[0]) : ++s.sequenceNumber[1];
}
};
return s;
}, r = {
read: a(),
write: a()
};
if (r.read.update = function(s, n) {
return r.read.cipherFunction(n, r.read) ? r.read.compressFunction(s, n, r.read) || s.error(s, {
message: "Could not decompress record.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.decompression_failure
}
}) : s.error(s, {
message: "Could not decrypt record or bad MAC.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
// doesn't matter if decryption failed or MAC was
// invalid, return the same error so as not to reveal
// which one occurred
description: p.Alert.Description.bad_record_mac
}
}), !s.fail;
}, r.write.update = function(s, n) {
return r.write.compressFunction(s, n, r.write) ? r.write.cipherFunction(n, r.write) || s.error(s, {
message: "Could not encrypt record.",
send: !1,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.internal_error
}
}) : s.error(s, {
message: "Could not compress record.",
send: !1,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.internal_error
}
}), !s.fail;
}, e.session) {
var i = e.session.sp;
switch (e.session.cipherSuite.initSecurityParameters(i), i.keys = p.generateKeys(e, i), r.read.macKey = t ? i.keys.server_write_MAC_key : i.keys.client_write_MAC_key, r.write.macKey = t ? i.keys.client_write_MAC_key : i.keys.server_write_MAC_key, e.session.cipherSuite.initConnectionState(r, e, i), i.compression_algorithm) {
case p.CompressionMethod.none:
break;
case p.CompressionMethod.deflate:
r.read.compressFunction = P0, r.write.compressFunction = U0;
break;
default:
throw new Error("Unsupported compression algorithm.");
}
}
return r;
};
p.createRandom = function() {
var e = /* @__PURE__ */ new Date(), t = +e + e.getTimezoneOffset() * 6e4, a = _.util.createBuffer();
return a.putInt32(t), a.putBytes(_.random.getBytes(28)), a;
};
p.createRecord = function(e, t) {
if (!t.data)
return null;
var a = {
type: t.type,
version: {
major: e.version.major,
minor: e.version.minor
},
length: t.data.length(),
fragment: t.data
};
return a;
};
p.createAlert = function(e, t) {
var a = _.util.createBuffer();
return a.putByte(t.level), a.putByte(t.description), p.createRecord(e, {
type: p.ContentType.alert,
data: a
});
};
p.createClientHello = function(e) {
e.session.clientHelloVersion = {
major: e.version.major,
minor: e.version.minor
};
for (var t = _.util.createBuffer(), a = 0; a < e.cipherSuites.length; ++a) {
var r = e.cipherSuites[a];
t.putByte(r.id[0]), t.putByte(r.id[1]);
}
var i = t.length(), s = _.util.createBuffer();
s.putByte(p.CompressionMethod.none);
var n = s.length(), o = _.util.createBuffer();
if (e.virtualHost) {
var f = _.util.createBuffer();
f.putByte(0), f.putByte(0);
var u = _.util.createBuffer();
u.putByte(0), We(u, 2, _.util.createBuffer(e.virtualHost));
var l = _.util.createBuffer();
We(l, 2, u), We(f, 2, l), o.putBuffer(f);
}
var c = o.length();
c > 0 && (c += 2);
var v = e.session.id, C = v.length + 1 + // session ID vector
2 + // version (major + minor)
4 + 28 + // random time and random bytes
2 + i + // cipher suites vector
1 + n + // compression methods vector
c, y = _.util.createBuffer();
return y.putByte(p.HandshakeType.client_hello), y.putInt24(C), y.putByte(e.version.major), y.putByte(e.version.minor), y.putBytes(e.session.sp.client_random), We(y, 1, _.util.createBuffer(v)), We(y, 2, t), We(y, 1, s), c > 0 && We(y, 2, o), y;
};
p.createServerHello = function(e) {
var t = e.session.id, a = t.length + 1 + // session ID vector
2 + // version (major + minor)
4 + 28 + // random time and random bytes
2 + // chosen cipher suite
1, r = _.util.createBuffer();
return r.putByte(p.HandshakeType.server_hello), r.putInt24(a), r.putByte(e.version.major), r.putByte(e.version.minor), r.putBytes(e.session.sp.server_random), We(r, 1, _.util.createBuffer(t)), r.putByte(e.session.cipherSuite.id[0]), r.putByte(e.session.cipherSuite.id[1]), r.putByte(e.session.compressionMethod), r;
};
p.createCertificate = function(e) {
var t = e.entity === p.ConnectionEnd.client, a = null;
if (e.getCertificate) {
var r;
t ? r = e.session.certificateRequest : r = e.session.extensions.server_name.serverNameList, a = e.getCertificate(e, r);
}
var i = _.util.createBuffer();
if (a !== null)
try {
_.util.isArray(a) || (a = [a]);
for (var s = null, n = 0; n < a.length; ++n) {
var o = _.pem.decode(a[n])[0];
if (o.type !== "CERTIFICATE" && o.type !== "X509 CERTIFICATE" && o.type !== "TRUSTED CERTIFICATE") {
var f = new Error('Could not convert certificate from PEM; PEM header type is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".');
throw f.headerType = o.type, f;
}
if (o.procType && o.procType.type === "ENCRYPTED")
throw new Error("Could not convert certificate from PEM; PEM is encrypted.");
var u = _.util.createBuffer(o.body);
s === null && (s = _.asn1.fromDer(u.bytes(), !1));
var l = _.util.createBuffer();
We(l, 3, u), i.putBuffer(l);
}
a = _.pki.certificateFromAsn1(s), t ? e.session.clientCertificate = a : e.session.serverCertificate = a;
} catch (C) {
return e.error(e, {
message: "Could not send certificate list.",
cause: C,
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.bad_certificate
}
});
}
var c = 3 + i.length(), v = _.util.createBuffer();
return v.putByte(p.HandshakeType.certificate), v.putInt24(c), We(v, 3, i), v;
};
p.createClientKeyExchange = function(e) {
var t = _.util.createBuffer();
t.putByte(e.session.clientHelloVersion.major), t.putByte(e.session.clientHelloVersion.minor), t.putBytes(_.random.getBytes(46));
var a = e.session.sp;
a.pre_master_secret = t.getBytes();
var r = e.session.serverCertificate.publicKey;
t = r.encrypt(a.pre_master_secret);
var i = t.length + 2, s = _.util.createBuffer();
return s.putByte(p.HandshakeType.client_key_exchange), s.putInt24(i), s.putInt16(t.length), s.putBytes(t), s;
};
p.createServerKeyExchange = function(e) {
var t = _.util.createBuffer();
return t;
};
p.getClientSignature = function(e, t) {
var a = _.util.createBuffer();
a.putBuffer(e.session.md5.digest()), a.putBuffer(e.session.sha1.digest()), a = a.getBytes(), e.getSignature = e.getSignature || function(r, i, s) {
var n = null;
if (r.getPrivateKey)
try {
n = r.getPrivateKey(r, r.session.clientCertificate), n = _.pki.privateKeyFromPem(n);
} catch (o) {
r.error(r, {
message: "Could not get private key.",
cause: o,
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.internal_error
}
});
}
n === null ? r.error(r, {
message: "No private key set.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.internal_error
}
}) : i = n.sign(i, null), s(r, i);
}, e.getSignature(e, a, t);
};
p.createCertificateVerify = function(e, t) {
var a = t.length + 2, r = _.util.createBuffer();
return r.putByte(p.HandshakeType.certificate_verify), r.putInt24(a), r.putInt16(t.length), r.putBytes(t), r;
};
p.createCertificateRequest = function(e) {
var t = _.util.createBuffer();
t.putByte(1);
var a = _.util.createBuffer();
for (var r in e.caStore.certs) {
var i = e.caStore.certs[r], s = _.pki.distinguishedNameToAsn1(i.subject), n = _.asn1.toDer(s);
a.putInt16(n.length()), a.putBuffer(n);
}
var o = 1 + t.length() + 2 + a.length(), f = _.util.createBuffer();
return f.putByte(p.HandshakeType.certificate_request), f.putInt24(o), We(f, 1, t), We(f, 2, a), f;
};
p.createServerHelloDone = function(e) {
var t = _.util.createBuffer();
return t.putByte(p.HandshakeType.server_hello_done), t.putInt24(0), t;
};
p.createChangeCipherSpec = function() {
var e = _.util.createBuffer();
return e.putByte(1), e;
};
p.createFinished = function(e) {
var t = _.util.createBuffer();
t.putBuffer(e.session.md5.digest()), t.putBuffer(e.session.sha1.digest());
var a = e.entity === p.ConnectionEnd.client, r = e.session.sp, i = 12, s = _r, n = a ? "client finished" : "server finished";
t = s(r.master_secret, n, t.getBytes(), i);
var o = _.util.createBuffer();
return o.putByte(p.HandshakeType.finished), o.putInt24(t.length()), o.putBuffer(t), o;
};
p.createHeartbeat = function(e, t, a) {
typeof a > "u" && (a = t.length);
var r = _.util.createBuffer();
r.putByte(e), r.putInt16(a), r.putBytes(t);
var i = r.length(), s = Math.max(16, i - a - 3);
return r.putBytes(_.random.getBytes(s)), r;
};
p.queue = function(e, t) {
if (t && !(t.fragment.length() === 0 && (t.type === p.ContentType.handshake || t.type === p.ContentType.alert || t.type === p.ContentType.change_cipher_spec))) {
if (t.type === p.ContentType.handshake) {
var a = t.fragment.bytes();
e.session.md5.update(a), e.session.sha1.update(a), a = null;
}
var r;
if (t.fragment.length() <= p.MaxFragment)
r = [t];
else {
r = [];
for (var i = t.fragment.bytes(); i.length > p.MaxFragment; )
r.push(p.createRecord(e, {
type: t.type,
data: _.util.createBuffer(i.slice(0, p.MaxFragment))
})), i = i.slice(p.MaxFragment);
i.length > 0 && r.push(p.createRecord(e, {
type: t.type,
data: _.util.createBuffer(i)
}));
}
for (var s = 0; s < r.length && !e.fail; ++s) {
var n = r[s], o = e.state.current.write;
o.update(e, n) && e.records.push(n);
}
}
};
p.flush = function(e) {
for (var t = 0; t < e.records.length; ++t) {
var a = e.records[t];
e.tlsData.putByte(a.type), e.tlsData.putByte(a.version.major), e.tlsData.putByte(a.version.minor), e.tlsData.putInt16(a.fragment.length()), e.tlsData.putBuffer(e.records[t].fragment);
}
return e.records = [], e.tlsDataReady(e);
};
var Lr = function(e) {
switch (e) {
case !0:
return !0;
case _.pki.certificateError.bad_certificate:
return p.Alert.Description.bad_certificate;
case _.pki.certificateError.unsupported_certificate:
return p.Alert.Description.unsupported_certificate;
case _.pki.certificateError.certificate_revoked:
return p.Alert.Description.certificate_revoked;
case _.pki.certificateError.certificate_expired:
return p.Alert.Description.certificate_expired;
case _.pki.certificateError.certificate_unknown:
return p.Alert.Description.certificate_unknown;
case _.pki.certificateError.unknown_ca:
return p.Alert.Description.unknown_ca;
default:
return p.Alert.Description.bad_certificate;
}
}, J0 = function(e) {
switch (e) {
case !0:
return !0;
case p.Alert.Description.bad_certificate:
return _.pki.certificateError.bad_certificate;
case p.Alert.Description.unsupported_certificate:
return _.pki.certificateError.unsupported_certificate;
case p.Alert.Description.certificate_revoked:
return _.pki.certificateError.certificate_revoked;
case p.Alert.Description.certificate_expired:
return _.pki.certificateError.certificate_expired;
case p.Alert.Description.certificate_unknown:
return _.pki.certificateError.certificate_unknown;
case p.Alert.Description.unknown_ca:
return _.pki.certificateError.unknown_ca;
default:
return _.pki.certificateError.bad_certificate;
}
};
p.verifyCertificateChain = function(e, t) {
try {
var a = {};
for (var r in e.verifyOptions)
a[r] = e.verifyOptions[r];
a.verify = function(s, n, o) {
var f = Lr(s), u = e.verify(e, s, n, o);
if (u !== !0) {
if (typeof u == "object" && !_.util.isArray(u)) {
var l = new Error("The application rejected the certificate.");
throw l.send = !0, l.alert = {
level: p.Alert.Level.fatal,
description: p.Alert.Description.bad_certificate
}, u.message && (l.message = u.message), u.alert && (l.alert.description = u.alert), l;
}
u !== s && (u = J0(u));
}
return u;
}, _.pki.verifyCertificateChain(e.caStore, t, a);
} catch (s) {
var i = s;
(typeof i != "object" || _.util.isArray(i)) && (i = {
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: Lr(s)
}
}), "send" in i || (i.send = !0), "alert" in i || (i.alert = {
level: p.Alert.Level.fatal,
description: Lr(i.error)
}), e.error(e, i);
}
return !e.fail;
};
p.createSessionCache = function(e, t) {
var a = null;
if (e && e.getSession && e.setSession && e.order)
a = e;
else {
a = {}, a.cache = e || {}, a.capacity = Math.max(t || 100, 1), a.order = [];
for (var r in e)
a.order.length <= t ? a.order.push(r) : delete e[r];
a.getSession = function(i) {
var s = null, n = null;
if (i ? n = _.util.bytesToHex(i) : a.order.length > 0 && (n = a.order[0]), n !== null && n in a.cache) {
s = a.cache[n], delete a.cache[n];
for (var o in a.order)
if (a.order[o] === n) {
a.order.splice(o, 1);
break;
}
}
return s;
}, a.setSession = function(i, s) {
if (a.order.length === a.capacity) {
var n = a.order.shift();
delete a.cache[n];
}
var n = _.util.bytesToHex(i);
a.order.push(n), a.cache[n] = s;
};
}
return a;
};
p.createConnection = function(e) {
var t = null;
e.caStore ? _.util.isArray(e.caStore) ? t = _.pki.createCaStore(e.caStore) : t = e.caStore : t = _.pki.createCaStore();
var a = e.cipherSuites || null;
if (a === null) {
a = [];
for (var r in p.CipherSuites)
a.push(p.CipherSuites[r]);
}
var i = e.server ? p.ConnectionEnd.server : p.ConnectionEnd.client, s = e.sessionCache ? p.createSessionCache(e.sessionCache) : null, n = {
version: { major: p.Version.major, minor: p.Version.minor },
entity: i,
sessionId: e.sessionId,
caStore: t,
sessionCache: s,
cipherSuites: a,
connected: e.connected,
virtualHost: e.virtualHost || null,
verifyClient: e.verifyClient || !1,
verify: e.verify || function(l, c, v, C) {
return c;
},
verifyOptions: e.verifyOptions || {},
getCertificate: e.getCertificate || null,
getPrivateKey: e.getPrivateKey || null,
getSignature: e.getSignature || null,
input: _.util.createBuffer(),
tlsData: _.util.createBuffer(),
data: _.util.createBuffer(),
tlsDataReady: e.tlsDataReady,
dataReady: e.dataReady,
heartbeatReceived: e.heartbeatReceived,
closed: e.closed,
error: function(l, c) {
c.origin = c.origin || (l.entity === p.ConnectionEnd.client ? "client" : "server"), c.send && (p.queue(l, p.createAlert(l, c.alert)), p.flush(l));
var v = c.fatal !== !1;
v && (l.fail = !0), e.error(l, c), v && l.close(!1);
},
deflate: e.deflate || null,
inflate: e.inflate || null
};
n.reset = function(l) {
n.version = { major: p.Version.major, minor: p.Version.minor }, n.record = null, n.session = null, n.peerCertificate = null, n.state = {
pending: null,
current: null
}, n.expect = n.entity === p.ConnectionEnd.client ? V0 : q0, n.fragmented = null, n.records = [], n.open = !1, n.handshakes = 0, n.handshaking = !1, n.isConnected = !1, n.fail = !(l || typeof l > "u"), n.input.clear(), n.tlsData.clear(), n.data.clear(), n.state.current = p.createConnectionState(n);
}, n.reset();
var o = function(l, c) {
var v = c.type - p.ContentType.change_cipher_spec, C = da[l.entity][l.expect];
v in C ? C[v](l, c) : p.handleUnexpected(l, c);
}, f = function(l) {
var c = 0, v = l.input, C = v.length();
if (C < 5)
c = 5 - C;
else {
l.record = {
type: v.getByte(),
version: {
major: v.getByte(),
minor: v.getByte()
},
length: v.getInt16(),
fragment: _.util.createBuffer(),
ready: !1
};
var y = l.record.version.major === l.version.major;
y && l.session && l.session.version && (y = l.record.version.minor === l.version.minor), y || l.error(l, {
message: "Incompatible TLS version.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.protocol_version
}
});
}
return c;
}, u = function(l) {
var c = 0, v = l.input, C = v.length();
if (C < l.record.length)
c = l.record.length - C;
else {
l.record.fragment.putBytes(v.getBytes(l.record.length)), v.compact();
var y = l.state.current.read;
y.update(l, l.record) && (l.fragmented !== null && (l.fragmented.type === l.record.type ? (l.fragmented.fragment.putBuffer(l.record.fragment), l.record = l.fragmented) : l.error(l, {
message: "Invalid fragmented record.",
send: !0,
alert: {
level: p.Alert.Level.fatal,
description: p.Alert.Description.unexpected_message
}
})), l.record.ready = !0);
}
return c;
};
return n.handshake = function(l) {
if (n.entity !== p.ConnectionEnd.client)
n.error(n, {
message: "Cannot initiate handshake as a server.",
fatal: !1
});
else if (n.handshaking)
n.error(n, {
message: "Handshake already in progress.",
fatal: !1
});
else {
n.fail && !n.open && n.handshakes === 0 && (n.fail = !1), n.handshaking = !0, l = l || "";
var c = null;
l.length > 0 && (n.sessionCache && (c = n.sessionCache.getSession(l)), c === null && (l = "")), l.length === 0 && n.sessionCache && (c = n.sessionCache.getSession(), c !== null && (l = c.id)), n.session = {
id: l,
version: null,
cipherSuite: null,
compressionMethod: null,
serverCertificate: null,
certificateRequest: null,
clientCertificate: null,
sp: {},
md5: _.md.md5.create(),
sha1: _.md.sha1.create()
}, c && (n.version = c.version, n.session.sp = c.sp), n.session.sp.client_random = p.createRandom().getBytes(), n.open = !0, p.queue(n, p.createRecord(n, {
type: p.ContentType.handshake,
data: p.createClientHello(n)
})), p.flush(n);
}
}, n.process = function(l) {
var c = 0;
return l && n.input.putBytes(l), n.fail || (n.record !== null && n.record.ready && n.record.fragment.isEmpty() && (n.record = null), n.record === null && (c = f(n)), !n.fail && n.record !== null && !n.record.ready && (c = u(n)), !n.fail && n.record !== null && n.record.ready && o(n, n.record)), c;
}, n.prepare = function(l) {
return p.queue(n, p.createRecord(n, {
type: p.ContentType.application_data,
data: _.util.createBuffer(l)
})), p.flush(n);
}, n.prepareHeartbeatRequest = function(l, c) {
return l instanceof _.util.ByteBuffer && (l = l.bytes()), typeof c > "u" && (c = l.length), n.expectedHeartbeatPayload = l, p.queue(n, p.createRecord(n, {
type: p.ContentType.heartbeat,
data: p.createHeartbeat(
p.HeartbeatMessageType.heartbeat_request,
l,
c
)
})), p.flush(n);
}, n.close = function(l) {
if (!n.fail && n.sessionCache && n.session) {
var c = {
id: n.session.id,
version: n.session.version,
sp: n.session.sp
};
c.sp.keys = null, n.sessionCache.setSession(c.id, c);
}
n.open && (n.open = !1, n.input.clear(), (n.isConnected || n.handshaking) && (n.isConnected = n.handshaking = !1, p.queue(n, p.createAlert(n, {
level: p.Alert.Level.warning,
description: p.Alert.Description.close_notify
})), p.flush(n)), n.closed(n)), n.reset(l);
}, n;
};
_.tls = _.tls || {};
for (var Dr in p)
typeof p[Dr] != "function" && (_.tls[Dr] = p[Dr]);
_.tls.prf_tls1 = _r;
_.tls.hmac_sha1 = k0;
_.tls.createSessionCache = p.createSessionCache;
_.tls.createConnection = p.createConnection;
var xt = z, Je = xt.tls;
Je.CipherSuites.TLS_RSA_WITH_AES_128_CBC_SHA = {
id: [0, 47],
name: "TLS_RSA_WITH_AES_128_CBC_SHA",
initSecurityParameters: function(e) {
e.bulk_cipher_algorithm = Je.BulkCipherAlgorithm.aes, e.cipher_type = Je.CipherType.block, e.enc_key_length = 16, e.block_length = 16, e.fixed_iv_length = 16, e.record_iv_length = 16, e.mac_algorithm = Je.MACAlgorithm.hmac_sha1, e.mac_length = 20, e.mac_key_length = 20;
},
initConnectionState: Ai
};
Je.CipherSuites.TLS_RSA_WITH_AES_256_CBC_SHA = {
id: [0, 53],
name: "TLS_RSA_WITH_AES_256_CBC_SHA",
initSecurityParameters: function(e) {
e.bulk_cipher_algorithm = Je.BulkCipherAlgorithm.aes, e.cipher_type = Je.CipherType.block, e.enc_key_length = 32, e.block_length = 16, e.fixed_iv_length = 16, e.record_iv_length = 16, e.mac_algorithm = Je.MACAlgorithm.hmac_sha1, e.mac_length = 20, e.mac_key_length = 20;
},
initConnectionState: Ai
};
function Ai(e, t, a) {
var r = t.entity === xt.tls.ConnectionEnd.client;
e.read.cipherState = {
init: !1,
cipher: xt.cipher.createDecipher("AES-CBC", r ? a.keys.server_write_key : a.keys.client_write_key),
iv: r ? a.keys.server_write_IV : a.keys.client_write_IV
}, e.write.cipherState = {
init: !1,
cipher: xt.cipher.createCipher("AES-CBC", r ? a.keys.client_write_key : a.keys.server_write_key),
iv: r ? a.keys.client_write_IV : a.keys.server_write_IV
}, e.read.cipherFunction = ao, e.write.cipherFunction = eo, e.read.macLength = e.write.macLength = a.mac_length, e.read.macFunction = e.write.macFunction = Je.hmac_sha1;
}
function eo(e, t) {
var a = !1, r = t.macFunction(t.macKey, t.sequenceNumber, e);
e.fragment.putBytes(r), t.updateSequenceNumber();
var i;
e.version.minor === Je.Versions.TLS_1_0.minor ? i = t.cipherState.init ? null : t.cipherState.iv : i = xt.random.getBytesSync(16), t.cipherState.init = !0;
var s = t.cipherState.cipher;
return s.start({ iv: i }), e.version.minor >= Je.Versions.TLS_1_1.minor && s.output.putBytes(i), s.update(e.fragment), s.finish(to) && (e.fragment = s.output, e.length = e.fragment.length(), a = !0), a;
}
function to(e, t, a) {
if (!a) {
var r = e - t.length() % e;
t.fillWithByte(r - 1, r);
}
return !0;
}
function ro(e, t, a) {
var r = !0;
if (a) {
for (var i = t.length(), s = t.last(), n = i - 1 - s; n < i - 1; ++n)
r = r && t.at(n) == s;
r && t.truncate(s + 1);
}
return r;
}
function ao(e, t) {
var a = !1, r;
e.version.minor === Je.Versions.TLS_1_0.minor ? r = t.cipherState.init ? null : t.cipherState.iv : r = e.fragment.getBytes(16), t.cipherState.init = !0;
var i = t.cipherState.cipher;
i.start({ iv: r }), i.update(e.fragment), a = i.finish(ro);
var s = t.macLength, n = xt.random.getBytesSync(s), o = i.output.length();
o >= s ? (e.fragment = i.output.getBytes(o - s), n = i.output.getBytes(s)) : e.fragment = i.output.getBytes(), e.fragment = xt.util.createBuffer(e.fragment), e.length = e.fragment.length();
var f = t.macFunction(t.macKey, t.sequenceNumber, e);
return t.updateSequenceNumber(), a = io(t.macKey, n, f) && a, a;
}
function io(e, t, a) {
var r = xt.hmac.create();
return r.start("SHA1", e), r.update(t), t = r.digest().getBytes(), r.start(null, null), r.update(a), a = r.digest().getBytes(), t === a;
}
var le = z, rr = le.sha512 = le.sha512 || {};
le.md.sha512 = le.md.algorithms.sha512 = rr;
var Bi = le.sha384 = le.sha512.sha384 = le.sha512.sha384 || {};
Bi.create = function() {
return rr.create("SHA-384");
};
le.md.sha384 = le.md.algorithms.sha384 = Bi;
le.sha512.sha256 = le.sha512.sha256 || {
create: function() {
return rr.create("SHA-512/256");
}
};
le.md["sha512/256"] = le.md.algorithms["sha512/256"] = le.sha512.sha256;
le.sha512.sha224 = le.sha512.sha224 || {
create: function() {
return rr.create("SHA-512/224");
}
};
le.md["sha512/224"] = le.md.algorithms["sha512/224"] = le.sha512.sha224;
rr.create = function(e) {
if (bi || no(), typeof e > "u" && (e = "SHA-512"), !(e in bt))
throw new Error("Invalid SHA-512 algorithm: " + e);
for (var t = bt[e], a = null, r = le.util.createBuffer(), i = new Array(80), s = 0; s < 80; ++s)
i[s] = new Array(2);
var n = 64;
switch (e) {
case "SHA-384":
n = 48;
break;
case "SHA-512/256":
n = 32;
break;
case "SHA-512/224":
n = 28;
break;
}
var o = {
// SHA-512 => sha512
algorithm: e.replace("-", "").toLowerCase(),
blockLength: 128,
digestLength: n,
// 56-bit length of message so far (does not including padding)
messageLength: 0,
// true message length
fullMessageLength: null,
// size of message length in bytes
messageLengthSize: 16
};
return o.start = function() {
o.messageLength = 0, o.fullMessageLength = o.messageLength128 = [];
for (var f = o.messageLengthSize / 4, u = 0; u < f; ++u)
o.fullMessageLength.push(0);
r = le.util.createBuffer(), a = new Array(t.length);
for (var u = 0; u < t.length; ++u)
a[u] = t[u].slice(0);
return o;
}, o.start(), o.update = function(f, u) {
u === "utf8" && (f = le.util.encodeUtf8(f));
var l = f.length;
o.messageLength += l, l = [l / 4294967296 >>> 0, l >>> 0];
for (var c = o.fullMessageLength.length - 1; c >= 0; --c)
o.fullMessageLength[c] += l[1], l[1] = l[0] + (o.fullMessageLength[c] / 4294967296 >>> 0), o.fullMessageLength[c] = o.fullMessageLength[c] >>> 0, l[0] = l[1] / 4294967296 >>> 0;
return r.putBytes(f), Oa(a, i, r), (r.read > 2048 || r.length() === 0) && r.compact(), o;
}, o.digest = function() {
var f = le.util.createBuffer();
f.putBytes(r.bytes());
var u = o.fullMessageLength[o.fullMessageLength.length - 1] + o.messageLengthSize, l = u & o.blockLength - 1;
f.putBytes(zr.substr(0, o.blockLength - l));
for (var c, v, C = o.fullMessageLength[0] * 8, y = 0; y < o.fullMessageLength.length - 1; ++y)
c = o.fullMessageLength[y + 1] * 8, v = c / 4294967296 >>> 0, C += v, f.putInt32(C >>> 0), C = c >>> 0;
f.putInt32(C);
for (var x = new Array(a.length), y = 0; y < a.length; ++y)
x[y] = a[y].slice(0);
Oa(x, i, f);
var T = le.util.createBuffer(), I;
e === "SHA-512" ? I = x.length : e === "SHA-384" ? I = x.length - 2 : I = x.length - 4;
for (var y = 0; y < I; ++y)
T.putInt32(x[y][0]), (y !== I - 1 || e !== "SHA-512/224") && T.putInt32(x[y][1]);
return T;
}, o;
};
var zr = null, bi = !1, Yr = null, bt = null;
function no() {
zr = String.fromCharCode(128), zr += le.util.fillString(String.fromCharCode(0), 128), Yr = [
[1116352408, 3609767458],
[1899447441, 602891725],
[3049323471, 3964484399],
[3921009573, 2173295548],
[961987163, 4081628472],
[1508970993, 3053834265],
[2453635748, 2937671579],
[2870763221, 3664609560],
[3624381080, 2734883394],
[310598401, 1164996542],
[607225278, 1323610764],
[1426881987, 3590304994],
[1925078388, 4068182383],
[2162078206, 991336113],
[2614888103, 633803317],
[3248222580, 3479774868],
[3835390401, 2666613458],
[4022224774, 944711139],
[264347078, 2341262773],
[604807628, 2007800933],
[770255983, 1495990901],
[1249150122, 1856431235],
[1555081692, 3175218132],
[1996064986, 2198950837],
[2554220882, 3999719339],
[2821834349, 766784016],
[2952996808, 2566594879],
[3210313671, 3203337956],
[3336571891, 1034457026],
[3584528711, 2466948901],
[113926993, 3758326383],
[338241895, 168717936],
[666307205, 1188179964],
[773529912, 1546045734],
[1294757372, 1522805485],
[1396182291, 2643833823],
[1695183700, 2343527390],
[1986661051, 1014477480],
[2177026350, 1206759142],
[2456956037, 344077627],
[2730485921, 1290863460],
[2820302411, 3158454273],
[3259730800, 3505952657],
[3345764771, 106217008],
[3516065817, 3606008344],
[3600352804, 1432725776],
[4094571909, 1467031594],
[275423344, 851169720],
[430227734, 3100823752],
[506948616, 1363258195],
[659060556, 3750685593],
[883997877, 3785050280],
[958139571, 3318307427],
[1322822218, 3812723403],
[1537002063, 2003034995],
[1747873779, 3602036899],
[1955562222, 1575990012],
[2024104815, 1125592928],
[2227730452, 2716904306],
[2361852424, 442776044],
[2428436474, 593698344],
[2756734187, 3733110249],
[3204031479, 2999351573],
[3329325298, 3815920427],
[3391569614, 3928383900],
[3515267271, 566280711],
[3940187606, 3454069534],
[4118630271, 4000239992],
[116418474, 1914138554],
[174292421, 2731055270],
[289380356, 3203993006],
[460393269, 320620315],
[685471733, 587496836],
[852142971, 1086792851],
[1017036298, 365543100],
[1126000580, 2618297676],
[1288033470, 3409855158],
[1501505948, 4234509866],
[1607167915, 987167468],
[1816402316, 1246189591]
], bt = {}, bt["SHA-512"] = [
[1779033703, 4089235720],
[3144134277, 2227873595],
[1013904242, 4271175723],
[2773480762, 1595750129],
[1359893119, 2917565137],
[2600822924, 725511199],
[528734635, 4215389547],
[1541459225, 327033209]
], bt["SHA-384"] = [
[3418070365, 3238371032],
[1654270250, 914150663],
[2438529370, 812702999],
[355462360, 4144912697],
[1731405415, 4290775857],
[2394180231, 1750603025],
[3675008525, 1694076839],
[1203062813, 3204075428]
], bt["SHA-512/256"] = [
[573645204, 4230739756],
[2673172387, 3360449730],
[596883563, 1867755857],
[2520282905, 1497426621],
[2519219938, 2827943907],
[3193839141, 1401305490],
[721525244, 746961066],
[246885852, 2177182882]
], bt["SHA-512/224"] = [
[2352822216, 424955298],
[1944164710, 2312950998],
[502970286, 855612546],
[1738396948, 1479516111],
[258812777, 2077511080],
[2011393907, 79989058],
[1067287976, 1780299464],
[286451373, 2446758561]
], bi = !0;
}
function Oa(e, t, a) {
for (var r, i, s, n, o, f, u, l, c, v, C, y, x, T, I, B, b, V, D, w, G, Y, re, ae, ie, he, Qe, Xe, ne, pe, F, It, Dt, ve, ye, Ce = a.length(); Ce >= 128; ) {
for (ne = 0; ne < 16; ++ne)
t[ne][0] = a.getInt32() >>> 0, t[ne][1] = a.getInt32() >>> 0;
for (; ne < 80; ++ne)
It = t[ne - 2], pe = It[0], F = It[1], r = ((pe >>> 19 | F << 13) ^ // ROTR 19
(F >>> 29 | pe << 3) ^ // ROTR 61/(swap + ROTR 29)
pe >>> 6) >>> 0, i = ((pe << 13 | F >>> 19) ^ // ROTR 19
(F << 3 | pe >>> 29) ^ // ROTR 61/(swap + ROTR 29)
(pe << 26 | F >>> 6)) >>> 0, ve = t[ne - 15], pe = ve[0], F = ve[1], s = ((pe >>> 1 | F << 31) ^ // ROTR 1
(pe >>> 8 | F << 24) ^ // ROTR 8
pe >>> 7) >>> 0, n = ((pe << 31 | F >>> 1) ^ // ROTR 1
(pe << 24 | F >>> 8) ^ // ROTR 8
(pe << 25 | F >>> 7)) >>> 0, Dt = t[ne - 7], ye = t[ne - 16], F = i + Dt[1] + n + ye[1], t[ne][0] = r + Dt[0] + s + ye[0] + (F / 4294967296 >>> 0) >>> 0, t[ne][1] = F >>> 0;
for (x = e[0][0], T = e[0][1], I = e[1][0], B = e[1][1], b = e[2][0], V = e[2][1], D = e[3][0], w = e[3][1], G = e[4][0], Y = e[4][1], re = e[5][0], ae = e[5][1], ie = e[6][0], he = e[6][1], Qe = e[7][0], Xe = e[7][1], ne = 0; ne < 80; ++ne)
u = ((G >>> 14 | Y << 18) ^ // ROTR 14
(G >>> 18 | Y << 14) ^ // ROTR 18
(Y >>> 9 | G << 23)) >>> 0, l = ((G << 18 | Y >>> 14) ^ // ROTR 14
(G << 14 | Y >>> 18) ^ // ROTR 18
(Y << 23 | G >>> 9)) >>> 0, c = (ie ^ G & (re ^ ie)) >>> 0, v = (he ^ Y & (ae ^ he)) >>> 0, o = ((x >>> 28 | T << 4) ^ // ROTR 28
(T >>> 2 | x << 30) ^ // ROTR 34/(swap + ROTR 2)
(T >>> 7 | x << 25)) >>> 0, f = ((x << 4 | T >>> 28) ^ // ROTR 28
(T << 30 | x >>> 2) ^ // ROTR 34/(swap + ROTR 2)
(T << 25 | x >>> 7)) >>> 0, C = (x & I | b & (x ^ I)) >>> 0, y = (T & B | V & (T ^ B)) >>> 0, F = Xe + l + v + Yr[ne][1] + t[ne][1], r = Qe + u + c + Yr[ne][0] + t[ne][0] + (F / 4294967296 >>> 0) >>> 0, i = F >>> 0, F = f + y, s = o + C + (F / 4294967296 >>> 0) >>> 0, n = F >>> 0, Qe = ie, Xe = he, ie = re, he = ae, re = G, ae = Y, F = w + i, G = D + r + (F / 4294967296 >>> 0) >>> 0, Y = F >>> 0, D = b, w = V, b = I, V = B, I = x, B = T, F = i + n, x = r + s + (F / 4294967296 >>> 0) >>> 0, T = F >>> 0;
F = e[0][1] + T, e[0][0] = e[0][0] + x + (F / 4294967296 >>> 0) >>> 0, e[0][1] = F >>> 0, F = e[1][1] + B, e[1][0] = e[1][0] + I + (F / 4294967296 >>> 0) >>> 0, e[1][1] = F >>> 0, F = e[2][1] + V, e[2][0] = e[2][0] + b + (F / 4294967296 >>> 0) >>> 0, e[2][1] = F >>> 0, F = e[3][1] + w, e[3][0] = e[3][0] + D + (F / 4294967296 >>> 0) >>> 0, e[3][1] = F >>> 0, F = e[4][1] + Y, e[4][0] = e[4][0] + G + (F / 4294967296 >>> 0) >>> 0, e[4][1] = F >>> 0, F = e[5][1] + ae, e[5][0] = e[5][0] + re + (F / 4294967296 >>> 0) >>> 0, e[5][1] = F >>> 0, F = e[6][1] + he, e[6][0] = e[6][0] + ie + (F / 4294967296 >>> 0) >>> 0, e[6][1] = F >>> 0, F = e[7][1] + Xe, e[7][0] = e[7][0] + Qe + (F / 4294967296 >>> 0) >>> 0, e[7][1] = F >>> 0, Ce -= 128;
}
}
var pa = {}, so = z, Ee = so.asn1;
pa.privateKeyValidator = {
// PrivateKeyInfo
name: "PrivateKeyInfo",
tagClass: Ee.Class.UNIVERSAL,
type: Ee.Type.SEQUENCE,
constructed: !0,
value: [{
// Version (INTEGER)
name: "PrivateKeyInfo.version",
tagClass: Ee.Class.UNIVERSAL,
type: Ee.Type.INTEGER,
constructed: !1,
capture: "privateKeyVersion"
}, {
// privateKeyAlgorithm
name: "PrivateKeyInfo.privateKeyAlgorithm",
tagClass: Ee.Class.UNIVERSAL,
type: Ee.Type.SEQUENCE,
constructed: !0,
value: [{
name: "AlgorithmIdentifier.algorithm",
tagClass: Ee.Class.UNIVERSAL,
type: Ee.Type.OID,
constructed: !1,
capture: "privateKeyOid"
}]
}, {
// PrivateKey
name: "PrivateKeyInfo",
tagClass: Ee.Class.UNIVERSAL,
type: Ee.Type.OCTETSTRING,
constructed: !1,
capture: "privateKey"
}]
};
pa.publicKeyValidator = {
name: "SubjectPublicKeyInfo",
tagClass: Ee.Class.UNIVERSAL,
type: Ee.Type.SEQUENCE,
constructed: !0,
captureAsn1: "subjectPublicKeyInfo",
value: [
{
name: "SubjectPublicKeyInfo.AlgorithmIdentifier",
tagClass: Ee.Class.UNIVERSAL,
type: Ee.Type.SEQUENCE,
constructed: !0,
value: [{
name: "AlgorithmIdentifier.algorithm",
tagClass: Ee.Class.UNIVERSAL,
type: Ee.Type.OID,
constructed: !1,
capture: "publicKeyOid"
}]
},
// capture group for ed25519PublicKey
{
tagClass: Ee.Class.UNIVERSAL,
type: Ee.Type.BITSTRING,
constructed: !1,
composed: !0,
captureBitStringValue: "ed25519PublicKey"
}
// FIXME: this is capture group for rsaPublicKey, use it in this API or
// discard?
/* {
// subjectPublicKey
name: 'SubjectPublicKeyInfo.subjectPublicKey',
tagClass: asn1.Class.UNIVERSAL,
type: asn1.Type.BITSTRING,
constructed: false,
value: [{
// RSAPublicKey
name: 'SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey',
tagClass: asn1.Class.UNIVERSAL,
type: asn1.Type.SEQUENCE,
constructed: true,
optional: true,
captureAsn1: 'rsaPublicKey'
}]
} */
]
};
var Ae = z, _i = pa, oo = _i.publicKeyValidator, uo = _i.privateKeyValidator;
if (typeof fo > "u")
var fo = Ae.jsbn.BigInteger;
var Xr = Ae.util.ByteBuffer, qe = typeof Buffer > "u" ? Uint8Array : Buffer;
Ae.pki = Ae.pki || {};
Ae.pki.ed25519 = Ae.ed25519 = Ae.ed25519 || {};
var W = Ae.ed25519;
W.constants = {};
W.constants.PUBLIC_KEY_BYTE_LENGTH = 32;
W.constants.PRIVATE_KEY_BYTE_LENGTH = 64;
W.constants.SEED_BYTE_LENGTH = 32;
W.constants.SIGN_BYTE_LENGTH = 64;
W.constants.HASH_BYTE_LENGTH = 64;
W.generateKeyPair = function(e) {
e = e || {};
var t = e.seed;
if (t === void 0)
t = Ae.random.getBytesSync(W.constants.SEED_BYTE_LENGTH);
else if (typeof t == "string") {
if (t.length !== W.constants.SEED_BYTE_LENGTH)
throw new TypeError(
'"seed" must be ' + W.constants.SEED_BYTE_LENGTH + " bytes in length."
);
} else if (!(t instanceof Uint8Array))
throw new TypeError(
'"seed" must be a node.js Buffer, Uint8Array, or a binary string.'
);
t = dt({ message: t, encoding: "binary" });
for (var a = new qe(W.constants.PUBLIC_KEY_BYTE_LENGTH), r = new qe(W.constants.PRIVATE_KEY_BYTE_LENGTH), i = 0; i < 32; ++i)
r[i] = t[i];
return po(a, r), { publicKey: a, privateKey: r };
};
W.privateKeyFromAsn1 = function(e) {
var t = {}, a = [], r = Ae.asn1.validate(e, uo, t, a);
if (!r) {
var i = new Error("Invalid Key.");
throw i.errors = a, i;
}
var s = Ae.asn1.derToOid(t.privateKeyOid), n = Ae.oids.EdDSA25519;
if (s !== n)
throw new Error('Invalid OID "' + s + '"; OID must be "' + n + '".');
var o = t.privateKey, f = dt({
message: Ae.asn1.fromDer(o).value,
encoding: "binary"
});
return { privateKeyBytes: f };
};
W.publicKeyFromAsn1 = function(e) {
var t = {}, a = [], r = Ae.asn1.validate(e, oo, t, a);
if (!r) {
var i = new Error("Invalid Key.");
throw i.errors = a, i;
}
var s = Ae.asn1.derToOid(t.publicKeyOid), n = Ae.oids.EdDSA25519;
if (s !== n)
throw new Error('Invalid OID "' + s + '"; OID must be "' + n + '".');
var o = t.ed25519PublicKey;
if (o.length !== W.constants.PUBLIC_KEY_BYTE_LENGTH)
throw new Error("Key length is invalid.");
return dt({
message: o,
encoding: "binary"
});
};
W.publicKeyFromPrivateKey = function(e) {
e = e || {};
var t = dt({
message: e.privateKey,
encoding: "binary"
});
if (t.length !== W.constants.PRIVATE_KEY_BYTE_LENGTH)
throw new TypeError(
'"options.privateKey" must have a byte length of ' + W.constants.PRIVATE_KEY_BYTE_LENGTH
);
for (var a = new qe(W.constants.PUBLIC_KEY_BYTE_LENGTH), r = 0; r < a.length; ++r)
a[r] = t[32 + r];
return a;
};
W.sign = function(e) {
e = e || {};
var t = dt(e), a = dt({
message: e.privateKey,
encoding: "binary"
});
if (a.length === W.constants.SEED_BYTE_LENGTH) {
var r = W.generateKeyPair({ seed: a });
a = r.privateKey;
} else if (a.length !== W.constants.PRIVATE_KEY_BYTE_LENGTH)
throw new TypeError(
'"options.privateKey" must have a byte length of ' + W.constants.SEED_BYTE_LENGTH + " or " + W.constants.PRIVATE_KEY_BYTE_LENGTH
);
var i = new qe(
W.constants.SIGN_BYTE_LENGTH + t.length
);
vo(i, t, t.length, a);
for (var s = new qe(W.constants.SIGN_BYTE_LENGTH), n = 0; n < s.length; ++n)
s[n] = i[n];
return s;
};
W.verify = function(e) {
e = e || {};
var t = dt(e);
if (e.signature === void 0)
throw new TypeError(
'"options.signature" must be a node.js Buffer, a Uint8Array, a forge ByteBuffer, or a binary string.'
);
var a = dt({
message: e.signature,
encoding: "binary"
});
if (a.length !== W.constants.SIGN_BYTE_LENGTH)
throw new TypeError(
'"options.signature" must have a byte length of ' + W.constants.SIGN_BYTE_LENGTH
);
var r = dt({
message: e.publicKey,
encoding: "binary"
});
if (r.length !== W.constants.PUBLIC_KEY_BYTE_LENGTH)
throw new TypeError(
'"options.publicKey" must have a byte length of ' + W.constants.PUBLIC_KEY_BYTE_LENGTH
);
var i = new qe(W.constants.SIGN_BYTE_LENGTH + t.length), s = new qe(W.constants.SIGN_BYTE_LENGTH + t.length), n;
for (n = 0; n < W.constants.SIGN_BYTE_LENGTH; ++n)
i[n] = a[n];
for (n = 0; n < t.length; ++n)
i[n + W.constants.SIGN_BYTE_LENGTH] = t[n];
return yo(s, i, i.length, r) >= 0;
};
function dt(e) {
var t = e.message;
if (t instanceof Uint8Array || t instanceof qe)
return t;
var a = e.encoding;
if (t === void 0)
if (e.md)
t = e.md.digest().getBytes(), a = "binary";
else
throw new TypeError('"options.message" or "options.md" not specified.');
if (typeof t == "string" && !a)
throw new TypeError('"options.encoding" must be "binary" or "utf8".');
if (typeof t == "string") {
if (typeof Buffer < "u")
return Buffer.from(t, a);
t = new Xr(t, a);
} else if (!(t instanceof Xr))
throw new TypeError(
'"options.message" must be a node.js Buffer, a Uint8Array, a forge ByteBuffer, or a string with "options.encoding" specifying its encoding.'
);
for (var r = new qe(t.length()), i = 0; i < r.length; ++i)
r[i] = t.at(i);
return r;
}
var Wr = H(), gr = H([1]), lo = H([
30883,
4953,
19914,
30187,
55467,
16705,
2637,
112,
59544,
30585,
16505,
36039,
65139,
11119,
27886,
20995
]), co = H([
61785,
9906,
39828,
60374,
45398,
33411,
5274,
224,
53552,
61171,
33010,
6542,
64743,
22239,
55772,
9222
]), Fa = H([
54554,
36645,
11616,
51542,
42930,
38181,
51040,
26924,
56412,
64982,
57905,
49316,
21502,
52590,
14035,
8553
]), Ka = H([
26200,
26214,
26214,
26214,
26214,
26214,
26214,
26214,
26214,
26214,
26214,
26214,
26214,
26214,
26214,
26214
]), kr = new Float64Array([
237,
211,
245,
92,
26,
99,
18,
88,
214,
156,
247,
162,
222,
249,
222,
20,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
0,
16
]), ho = H([
41136,
18958,
6951,
50414,
58488,
44335,
6150,
12099,
55207,
15867,
153,
11085,
57099,
20417,
9344,
11139
]);
function $t(e, t) {
var a = Ae.md.sha512.create(), r = new Xr(e);
a.update(r.getBytes(t), "binary");
var i = a.digest().getBytes();
if (typeof Buffer < "u")
return Buffer.from(i, "binary");
for (var s = new qe(W.constants.HASH_BYTE_LENGTH), n = 0; n < 64; ++n)
s[n] = i.charCodeAt(n);
return s;
}
function po(e, t) {
var a = [H(), H(), H(), H()], r, i = $t(t, 32);
for (i[0] &= 248, i[31] &= 127, i[31] |= 64, ya(a, i), va(e, a), r = 0; r < 32; ++r)
t[r + 32] = e[r];
return 0;
}
function vo(e, t, a, r) {
var i, s, n = new Float64Array(64), o = [H(), H(), H(), H()], f = $t(r, 32);
f[0] &= 248, f[31] &= 127, f[31] |= 64;
var u = a + 64;
for (i = 0; i < a; ++i)
e[64 + i] = t[i];
for (i = 0; i < 32; ++i)
e[32 + i] = f[32 + i];
var l = $t(e.subarray(32), a + 32);
for (jr(l), ya(o, l), va(e, o), i = 32; i < 64; ++i)
e[i] = r[i];
var c = $t(e, a + 64);
for (jr(c), i = 32; i < 64; ++i)
n[i] = 0;
for (i = 0; i < 32; ++i)
n[i] = l[i];
for (i = 0; i < 32; ++i)
for (s = 0; s < 32; s++)
n[i + s] += c[i] * f[s];
return Ni(e.subarray(32), n), u;
}
function yo(e, t, a, r) {
var i, s, n = new qe(32), o = [H(), H(), H(), H()], f = [H(), H(), H(), H()];
if (s = -1, a < 64 || go(f, r))
return -1;
for (i = 0; i < a; ++i)
e[i] = t[i];
for (i = 0; i < 32; ++i)
e[i + 32] = r[i];
var u = $t(e, a);
if (jr(u), Li(o, f, u), ya(f, t.subarray(32)), $r(o, f), va(n, o), a -= 64, Ri(t, 0, n, 0)) {
for (i = 0; i < a; ++i)
e[i] = 0;
return -1;
}
for (i = 0; i < a; ++i)
e[i] = t[i + 64];
return s = a, s;
}
function Ni(e, t) {
var a, r, i, s;
for (r = 63; r >= 32; --r) {
for (a = 0, i = r - 32, s = r - 12; i < s; ++i)
t[i] += a - 16 * t[r] * kr[i - (r - 32)], a = t[i] + 128 >> 8, t[i] -= a * 256;
t[i] += a, t[r] = 0;
}
for (a = 0, i = 0; i < 32; ++i)
t[i] += a - (t[31] >> 4) * kr[i], a = t[i] >> 8, t[i] &= 255;
for (i = 0; i < 32; ++i)
t[i] -= a * kr[i];
for (r = 0; r < 32; ++r)
t[r + 1] += t[r] >> 8, e[r] = t[r] & 255;
}
function jr(e) {
for (var t = new Float64Array(64), a = 0; a < 64; ++a)
t[a] = e[a], e[a] = 0;
Ni(e, t);
}
function $r(e, t) {
var a = H(), r = H(), i = H(), s = H(), n = H(), o = H(), f = H(), u = H(), l = H();
Vt(a, e[1], e[0]), Vt(l, t[1], t[0]), se(a, a, l), Ut(r, e[0], e[1]), Ut(l, t[0], t[1]), se(r, r, l), se(i, e[3], t[3]), se(i, i, co), se(s, e[2], t[2]), Ut(s, s, s), Vt(n, r, a), Vt(o, s, i), Ut(f, s, i), Ut(u, r, a), se(e[0], n, o), se(e[1], u, f), se(e[2], f, o), se(e[3], n, u);
}
function Ma(e, t, a) {
for (var r = 0; r < 4; ++r)
Di(e[r], t[r], a);
}
function va(e, t) {
var a = H(), r = H(), i = H();
xo(i, t[2]), se(a, t[0], i), se(r, t[1], i), Cr(e, r), e[31] ^= wi(a) << 7;
}
function Cr(e, t) {
var a, r, i, s = H(), n = H();
for (a = 0; a < 16; ++a)
n[a] = t[a];
for (Ur(n), Ur(n), Ur(n), r = 0; r < 2; ++r) {
for (s[0] = n[0] - 65517, a = 1; a < 15; ++a)
s[a] = n[a] - 65535 - (s[a - 1] >> 16 & 1), s[a - 1] &= 65535;
s[15] = n[15] - 32767 - (s[14] >> 16 & 1), i = s[15] >> 16 & 1, s[14] &= 65535, Di(n, s, 1 - i);
}
for (a = 0; a < 16; a++)
e[2 * a] = n[a] & 255, e[2 * a + 1] = n[a] >> 8;
}
function go(e, t) {
var a = H(), r = H(), i = H(), s = H(), n = H(), o = H(), f = H();
return mt(e[2], gr), Co(e[1], t), _t(i, e[1]), se(s, i, lo), Vt(i, i, e[2]), Ut(s, e[2], s), _t(n, s), _t(o, n), se(f, o, n), se(a, f, i), se(a, a, s), mo(a, a), se(a, a, i), se(a, a, s), se(a, a, s), se(e[0], a, s), _t(r, e[0]), se(r, r, s), Ha(r, i) && se(e[0], e[0], ho), _t(r, e[0]), se(r, r, s), Ha(r, i) ? -1 : (wi(e[0]) === t[31] >> 7 && Vt(e[0], Wr, e[0]), se(e[3], e[0], e[1]), 0);
}
function Co(e, t) {
var a;
for (a = 0; a < 16; ++a)
e[a] = t[2 * a] + (t[2 * a + 1] << 8);
e[15] &= 32767;
}
function mo(e, t) {
var a = H(), r;
for (r = 0; r < 16; ++r)
a[r] = t[r];
for (r = 250; r >= 0; --r)
_t(a, a), r !== 1 && se(a, a, t);
for (r = 0; r < 16; ++r)
e[r] = a[r];
}
function Ha(e, t) {
var a = new qe(32), r = new qe(32);
return Cr(a, e), Cr(r, t), Ri(a, 0, r, 0);
}
function Ri(e, t, a, r) {
return Eo(e, t, a, r, 32);
}
function Eo(e, t, a, r, i) {
var s, n = 0;
for (s = 0; s < i; ++s)
n |= e[t + s] ^ a[r + s];
return (1 & n - 1 >>> 8) - 1;
}
function wi(e) {
var t = new qe(32);
return Cr(t, e), t[0] & 1;
}
function Li(e, t, a) {
var r, i;
for (mt(e[0], Wr), mt(e[1], gr), mt(e[2], gr), mt(e[3], Wr), i = 255; i >= 0; --i)
r = a[i / 8 | 0] >> (i & 7) & 1, Ma(e, t, r), $r(t, e), $r(e, e), Ma(e, t, r);
}
function ya(e, t) {
var a = [H(), H(), H(), H()];
mt(a[0], Fa), mt(a[1], Ka), mt(a[2], gr), se(a[3], Fa, Ka), Li(e, a, t);
}
function mt(e, t) {
var a;
for (a = 0; a < 16; a++)
e[a] = t[a] | 0;
}
function xo(e, t) {
var a = H(), r;
for (r = 0; r < 16; ++r)
a[r] = t[r];
for (r = 253; r >= 0; --r)
_t(a, a), r !== 2 && r !== 4 && se(a, a, t);
for (r = 0; r < 16; ++r)
e[r] = a[r];
}
function Ur(e) {
var t, a, r = 1;
for (t = 0; t < 16; ++t)
a = e[t] + r + 65535, r = Math.floor(a / 65536), e[t] = a - r * 65536;
e[0] += r - 1 + 37 * (r - 1);
}
function Di(e, t, a) {
for (var r, i = ~(a - 1), s = 0; s < 16; ++s)
r = i & (e[s] ^ t[s]), e[s] ^= r, t[s] ^= r;
}
function H(e) {
var t, a = new Float64Array(16);
if (e)
for (t = 0; t < e.length; ++t)
a[t] = e[t];
return a;
}
function Ut(e, t, a) {
for (var r = 0; r < 16; ++r)
e[r] = t[r] + a[r];
}
function Vt(e, t, a) {
for (var r = 0; r < 16; ++r)
e[r] = t[r] - a[r];
}
function _t(e, t) {
se(e, t, t);
}
function se(e, t, a) {
var r, i, s = 0, n = 0, o = 0, f = 0, u = 0, l = 0, c = 0, v = 0, C = 0, y = 0, x = 0, T = 0, I = 0, B = 0, b = 0, V = 0, D = 0, w = 0, G = 0, Y = 0, re = 0, ae = 0, ie = 0, he = 0, Qe = 0, Xe = 0, ne = 0, pe = 0, F = 0, It = 0, Dt = 0, ve = a[0], ye = a[1], Ce = a[2], Be = a[3], be = a[4], _e = a[5], Ne = a[6], Re = a[7], we = a[8], Le = a[9], De = a[10], ke = a[11], Ue = a[12], Pe = a[13], Ve = a[14], Oe = a[15];
r = t[0], s += r * ve, n += r * ye, o += r * Ce, f += r * Be, u += r * be, l += r * _e, c += r * Ne, v += r * Re, C += r * we, y += r * Le, x += r * De, T += r * ke, I += r * Ue, B += r * Pe, b += r * Ve, V += r * Oe, r = t[1], n += r * ve, o += r * ye, f += r * Ce, u += r * Be, l += r * be, c += r * _e, v += r * Ne, C += r * Re, y += r * we, x += r * Le, T += r * De, I += r * ke, B += r * Ue, b += r * Pe, V += r * Ve, D += r * Oe, r = t[2], o += r * ve, f += r * ye, u += r * Ce, l += r * Be, c += r * be, v += r * _e, C += r * Ne, y += r * Re, x += r * we, T += r * Le, I += r * De, B += r * ke, b += r * Ue, V += r * Pe, D += r * Ve, w += r * Oe, r = t[3], f += r * ve, u += r * ye, l += r * Ce, c += r * Be, v += r * be, C += r * _e, y += r * Ne, x += r * Re, T += r * we, I += r * Le, B += r * De, b += r * ke, V += r * Ue, D += r * Pe, w += r * Ve, G += r * Oe, r = t[4], u += r * ve, l += r * ye, c += r * Ce, v += r * Be, C += r * be, y += r * _e, x += r * Ne, T += r * Re, I += r * we, B += r * Le, b += r * De, V += r * ke, D += r * Ue, w += r * Pe, G += r * Ve, Y += r * Oe, r = t[5], l += r * ve, c += r * ye, v += r * Ce, C += r * Be, y += r * be, x += r * _e, T += r * Ne, I += r * Re, B += r * we, b += r * Le, V += r * De, D += r * ke, w += r * Ue, G += r * Pe, Y += r * Ve, re += r * Oe, r = t[6], c += r * ve, v += r * ye, C += r * Ce, y += r * Be, x += r * be, T += r * _e, I += r * Ne, B += r * Re, b += r * we, V += r * Le, D += r * De, w += r * ke, G += r * Ue, Y += r * Pe, re += r * Ve, ae += r * Oe, r = t[7], v += r * ve, C += r * ye, y += r * Ce, x += r * Be, T += r * be, I += r * _e, B += r * Ne, b += r * Re, V += r * we, D += r * Le, w += r * De, G += r * ke, Y += r * Ue, re += r * Pe, ae += r * Ve, ie += r * Oe, r = t[8], C += r * ve, y += r * ye, x += r * Ce, T += r * Be, I += r * be, B += r * _e, b += r * Ne, V += r * Re, D += r * we, w += r * Le, G += r * De, Y += r * ke, re += r * Ue, ae += r * Pe, ie += r * Ve, he += r * Oe, r = t[9], y += r * ve, x += r * ye, T += r * Ce, I += r * Be, B += r * be, b += r * _e, V += r * Ne, D += r * Re, w += r * we, G += r * Le, Y += r * De, re += r * ke, ae += r * Ue, ie += r * Pe, he += r * Ve, Qe += r * Oe, r = t[10], x += r * ve, T += r * ye, I += r * Ce, B += r * Be, b += r * be, V += r * _e, D += r * Ne, w += r * Re, G += r * we, Y += r * Le, re += r * De, ae += r * ke, ie += r * Ue, he += r * Pe, Qe += r * Ve, Xe += r * Oe, r = t[11], T += r * ve, I += r * ye, B += r * Ce, b += r * Be, V += r * be, D += r * _e, w += r * Ne, G += r * Re, Y += r * we, re += r * Le, ae += r * De, ie += r * ke, he += r * Ue, Qe += r * Pe, Xe += r * Ve, ne += r * Oe, r = t[12], I += r * ve, B += r * ye, b += r * Ce, V += r * Be, D += r * be, w += r * _e, G += r * Ne, Y += r * Re, re += r * we, ae += r * Le, ie += r * De, he += r * ke, Qe += r * Ue, Xe += r * Pe, ne += r * Ve, pe += r * Oe, r = t[13], B += r * ve, b += r * ye, V += r * Ce, D += r * Be, w += r * be, G += r * _e, Y += r * Ne, re += r * Re, ae += r * we, ie += r * Le, he += r * De, Qe += r * ke, Xe += r * Ue, ne += r * Pe, pe += r * Ve, F += r * Oe, r = t[14], b += r * ve, V += r * ye, D += r * Ce, w += r * Be, G += r * be, Y += r * _e, re += r * Ne, ae += r * Re, ie += r * we, he += r * Le, Qe += r * De, Xe += r * ke, ne += r * Ue, pe += r * Pe, F += r * Ve, It += r * Oe, r = t[15], V += r * ve, D += r * ye, w += r * Ce, G += r * Be, Y += r * be, re += r * _e, ae += r * Ne, ie += r * Re, he += r * we, Qe += r * Le, Xe += r * De, ne += r * ke, pe += r * Ue, F += r * Pe, It += r * Ve, Dt += r * Oe, s += 38 * D, n += 38 * w, o += 38 * G, f += 38 * Y, u += 38 * re, l += 38 * ae, c += 38 * ie, v += 38 * he, C += 38 * Qe, y += 38 * Xe, x += 38 * ne, T += 38 * pe, I += 38 * F, B += 38 * It, b += 38 * Dt, i = 1, r = s + i + 65535, i = Math.floor(r / 65536), s = r - i * 65536, r = n + i + 65535, i = Math.floor(r / 65536), n = r - i * 65536, r = o + i + 65535, i = Math.floor(r / 65536), o = r - i * 65536, r = f + i + 65535, i = Math.floor(r / 65536), f = r - i * 65536, r = u + i + 65535, i = Math.floor(r / 65536), u = r - i * 65536, r = l + i + 65535, i = Math.floor(r / 65536), l = r - i * 65536, r = c + i + 65535, i = Math.floor(r / 65536), c = r - i * 65536, r = v + i + 65535, i = Math.floor(r / 65536), v = r - i * 65536, r = C + i + 65535, i = Math.floor(r / 65536), C = r - i * 65536, r = y + i + 65535, i = Math.floor(r / 65536), y = r - i * 65536, r = x + i + 65535, i = Math.floor(r / 65536), x = r - i * 65536, r = T + i + 65535, i = Math.floor(r / 65536), T = r - i * 65536, r = I + i + 65535, i = Math.floor(r / 65536), I = r - i * 65536, r = B + i + 65535, i = Math.floor(r / 65536), B = r - i * 65536, r = b + i + 65535, i = Math.floor(r / 65536), b = r - i * 65536, r = V + i + 65535, i = Math.floor(r / 65536), V = r - i * 65536, s += i - 1 + 37 * (i - 1), i = 1, r = s + i + 65535, i = Math.floor(r / 65536), s = r - i * 65536, r = n + i + 65535, i = Math.floor(r / 65536), n = r - i * 65536, r = o + i + 65535, i = Math.floor(r / 65536), o = r - i * 65536, r = f + i + 65535, i = Math.floor(r / 65536), f = r - i * 65536, r = u + i + 65535, i = Math.floor(r / 65536), u = r - i * 65536, r = l + i + 65535, i = Math.floor(r / 65536), l = r - i * 65536, r = c + i + 65535, i = Math.floor(r / 65536), c = r - i * 65536, r = v + i + 65535, i = Math.floor(r / 65536), v = r - i * 65536, r = C + i + 65535, i = Math.floor(r / 65536), C = r - i * 65536, r = y + i + 65535, i = Math.floor(r / 65536), y = r - i * 65536, r = x + i + 65535, i = Math.floor(r / 65536), x = r - i * 65536, r = T + i + 65535, i = Math.floor(r / 65536), T = r - i * 65536, r = I + i + 65535, i = Math.floor(r / 65536), I = r - i * 65536, r = B + i + 65535, i = Math.floor(r / 65536), B = r - i * 65536, r = b + i + 65535, i = Math.floor(r / 65536), b = r - i * 65536, r = V + i + 65535, i = Math.floor(r / 65536), V = r - i * 65536, s += i - 1 + 37 * (i - 1), e[0] = s, e[1] = n, e[2] = o, e[3] = f, e[4] = u, e[5] = l, e[6] = c, e[7] = v, e[8] = C, e[9] = y, e[10] = x, e[11] = T, e[12] = I, e[13] = B, e[14] = b, e[15] = V;
}
var Ye = z;
Ye.kem = Ye.kem || {};
var Ga = Ye.jsbn.BigInteger;
Ye.kem.rsa = {};
Ye.kem.rsa.create = function(e, t) {
t = t || {};
var a = t.prng || Ye.random, r = {};
return r.encrypt = function(i, s) {
var n = Math.ceil(i.n.bitLength() / 8), o;
do
o = new Ga(
Ye.util.bytesToHex(a.getBytesSync(n)),
16
).mod(i.n);
while (o.compareTo(Ga.ONE) <= 0);
o = Ye.util.hexToBytes(o.toString(16));
var f = n - o.length;
f > 0 && (o = Ye.util.fillString(String.fromCharCode(0), f) + o);
var u = i.encrypt(o, "NONE"), l = e.generate(o, s);
return { encapsulation: u, key: l };
}, r.decrypt = function(i, s, n) {
var o = i.decrypt(s, "NONE");
return e.generate(o, n);
}, r;
};
Ye.kem.kdf1 = function(e, t) {
ki(this, e, 0, t || e.digestLength);
};
Ye.kem.kdf2 = function(e, t) {
ki(this, e, 1, t || e.digestLength);
};
function ki(e, t, a, r) {
e.generate = function(i, s) {
for (var n = new Ye.util.ByteBuffer(), o = Math.ceil(s / r) + a, f = new Ye.util.ByteBuffer(), u = a; u < o; ++u) {
f.putInt32(u), t.start(), t.update(i + f.getBytes());
var l = t.digest();
n.putBytes(l.getBytes(r));
}
return n.truncate(n.length() - s), n.getBytes();
};
}
var $ = z;
$.log = $.log || {};
$.log.levels = [
"none",
"error",
"warning",
"info",
"debug",
"verbose",
"max"
];
var mr = {}, Zr = [], Zt = null;
$.log.LEVEL_LOCKED = 2;
$.log.NO_LEVEL_CHECK = 4;
$.log.INTERPOLATE = 8;
for (var Et = 0; Et < $.log.levels.length; ++Et) {
var qa = $.log.levels[Et];
mr[qa] = {
index: Et,
name: qa.toUpperCase()
};
}
$.log.logMessage = function(e) {
for (var t = mr[e.level].index, a = 0; a < Zr.length; ++a) {
var r = Zr[a];
if (r.flags & $.log.NO_LEVEL_CHECK)
r.f(e);
else {
var i = mr[r.level].index;
t <= i && r.f(r, e);
}
}
};
$.log.prepareStandard = function(e) {
"standard" in e || (e.standard = mr[e.level].name + //' ' + +message.timestamp +
" [" + e.category + "] " + e.message);
};
$.log.prepareFull = function(e) {
if (!("full" in e)) {
var t = [e.message];
t = t.concat([]), e.full = $.util.format.apply(this, t);
}
};
$.log.prepareStandardFull = function(e) {
"standardFull" in e || ($.log.prepareStandard(e), e.standardFull = e.standard);
};
for (var Qa = ["error", "warning", "info", "debug", "verbose"], Et = 0; Et < Qa.length; ++Et)
(function(t) {
$.log[t] = function(a, r) {
var i = Array.prototype.slice.call(arguments).slice(2), s = {
timestamp: /* @__PURE__ */ new Date(),
level: t,
category: a,
message: r,
arguments: i
/*standard*/
/*full*/
/*fullMessage*/
};
$.log.logMessage(s);
};
})(Qa[Et]);
$.log.makeLogger = function(e) {
var t = {
flags: 0,
f: e
};
return $.log.setLevel(t, "none"), t;
};
$.log.setLevel = function(e, t) {
var a = !1;
if (e && !(e.flags & $.log.LEVEL_LOCKED))
for (var r = 0; r < $.log.levels.length; ++r) {
var i = $.log.levels[r];
if (t == i) {
e.level = t, a = !0;
break;
}
}
return a;
};
$.log.lock = function(e, t) {
typeof t > "u" || t ? e.flags |= $.log.LEVEL_LOCKED : e.flags &= ~$.log.LEVEL_LOCKED;
};
$.log.addLogger = function(e) {
Zr.push(e);
};
if (typeof console < "u" && "log" in console) {
var Yt;
if (console.error && console.warn && console.info && console.debug) {
var So = {
error: console.error,
warning: console.warn,
info: console.info,
debug: console.debug,
verbose: console.debug
}, ga = function(e, t) {
$.log.prepareStandard(t);
var a = So[t.level], r = [t.standard];
r = r.concat(t.arguments.slice()), a.apply(console, r);
};
Yt = $.log.makeLogger(ga);
} else {
var ga = function(t, a) {
$.log.prepareStandardFull(a), console.log(a.standardFull);
};
Yt = $.log.makeLogger(ga);
}
$.log.setLevel(Yt, "debug"), $.log.addLogger(Yt), Zt = Yt;
} else
console = {
log: function() {
}
};
if (Zt !== null && typeof window < "u" && window.location) {
var nr = new URL(window.location.href).searchParams;
if (nr.has("console.level") && $.log.setLevel(
Zt,
nr.get("console.level").slice(-1)[0]
), nr.has("console.lock")) {
var To = nr.get("console.lock").slice(-1)[0];
To == "true" && $.log.lock(Zt);
}
}
$.log.consoleLogger = Zt;
var k = z, m = k.asn1, He = k.pkcs7 = k.pkcs7 || {};
He.messageFromPem = function(e) {
var t = k.pem.decode(e)[0];
if (t.type !== "PKCS7") {
var a = new Error('Could not convert PKCS#7 message from PEM; PEM header type is not "PKCS#7".');
throw a.headerType = t.type, a;
}
if (t.procType && t.procType.type === "ENCRYPTED")
throw new Error("Could not convert PKCS#7 message from PEM; PEM is encrypted.");
var r = m.fromDer(t.body);
return He.messageFromAsn1(r);
};
He.messageToPem = function(e, t) {
var a = {
type: "PKCS7",
body: m.toDer(e.toAsn1()).getBytes()
};
return k.pem.encode(a, { maxline: t });
};
He.messageFromAsn1 = function(e) {
var t = {}, a = [];
if (!m.validate(e, He.asn1.contentInfoValidator, t, a)) {
var r = new Error("Cannot read PKCS#7 message. ASN.1 object is not an PKCS#7 ContentInfo.");
throw r.errors = a, r;
}
var i = m.derToOid(t.contentType), s;
switch (i) {
case k.pki.oids.envelopedData:
s = He.createEnvelopedData();
break;
case k.pki.oids.encryptedData:
s = He.createEncryptedData();
break;
case k.pki.oids.signedData:
s = He.createSignedData();
break;
default:
throw new Error("Cannot read PKCS#7 message. ContentType with OID " + i + " is not (yet) supported.");
}
return s.fromAsn1(t.content.value[0]), s;
};
He.createSignedData = function() {
var e = null;
return e = {
type: k.pki.oids.signedData,
version: 1,
certificates: [],
crls: [],
// TODO: add json-formatted signer stuff here?
signers: [],
// populated during sign()
digestAlgorithmIdentifiers: [],
contentInfo: null,
signerInfos: [],
fromAsn1: function(r) {
if (Ca(e, r, He.asn1.signedDataValidator), e.certificates = [], e.crls = [], e.digestAlgorithmIdentifiers = [], e.contentInfo = null, e.signerInfos = [], e.rawCapture.certificates)
for (var i = e.rawCapture.certificates.value, s = 0; s < i.length; ++s)
e.certificates.push(k.pki.certificateFromAsn1(i[s]));
},
toAsn1: function() {
e.contentInfo || e.sign();
for (var r = [], i = 0; i < e.certificates.length; ++i)
r.push(k.pki.certificateToAsn1(e.certificates[i]));
var s = [], n = m.create(m.Class.CONTEXT_SPECIFIC, 0, !0, [
m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// Version
m.create(
m.Class.UNIVERSAL,
m.Type.INTEGER,
!1,
m.integerToDer(e.version).getBytes()
),
// DigestAlgorithmIdentifiers
m.create(
m.Class.UNIVERSAL,
m.Type.SET,
!0,
e.digestAlgorithmIdentifiers
),
// ContentInfo
e.contentInfo
])
]);
return r.length > 0 && n.value[0].value.push(
m.create(m.Class.CONTEXT_SPECIFIC, 0, !0, r)
), s.length > 0 && n.value[0].value.push(
m.create(m.Class.CONTEXT_SPECIFIC, 1, !0, s)
), n.value[0].value.push(
m.create(
m.Class.UNIVERSAL,
m.Type.SET,
!0,
e.signerInfos
)
), m.create(
m.Class.UNIVERSAL,
m.Type.SEQUENCE,
!0,
[
// ContentType
m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(e.type).getBytes()
),
// [0] SignedData
n
]
);
},
/**
* Add (another) entity to list of signers.
*
* Note: If authenticatedAttributes are provided, then, per RFC 2315,
* they must include at least two attributes: content type and
* message digest. The message digest attribute value will be
* auto-calculated during signing and will be ignored if provided.
*
* Here's an example of providing these two attributes:
*
* forge.pkcs7.createSignedData();
* p7.addSigner({
* issuer: cert.issuer.attributes,
* serialNumber: cert.serialNumber,
* key: privateKey,
* digestAlgorithm: forge.pki.oids.sha1,
* authenticatedAttributes: [{
* type: forge.pki.oids.contentType,
* value: forge.pki.oids.data
* }, {
* type: forge.pki.oids.messageDigest
* }]
* });
*
* TODO: Support [subjectKeyIdentifier] as signer's ID.
*
* @param signer the signer information:
* key the signer's private key.
* [certificate] a certificate containing the public key
* associated with the signer's private key; use this option as
* an alternative to specifying signer.issuer and
* signer.serialNumber.
* [issuer] the issuer attributes (eg: cert.issuer.attributes).
* [serialNumber] the signer's certificate's serial number in
* hexadecimal (eg: cert.serialNumber).
* [digestAlgorithm] the message digest OID, as a string, to use
* (eg: forge.pki.oids.sha1).
* [authenticatedAttributes] an optional array of attributes
* to also sign along with the content.
*/
addSigner: function(r) {
var i = r.issuer, s = r.serialNumber;
if (r.certificate) {
var n = r.certificate;
typeof n == "string" && (n = k.pki.certificateFromPem(n)), i = n.issuer.attributes, s = n.serialNumber;
}
var o = r.key;
if (!o)
throw new Error(
"Could not add PKCS#7 signer; no private key specified."
);
typeof o == "string" && (o = k.pki.privateKeyFromPem(o));
var f = r.digestAlgorithm || k.pki.oids.sha1;
switch (f) {
case k.pki.oids.sha1:
case k.pki.oids.sha256:
case k.pki.oids.sha384:
case k.pki.oids.sha512:
case k.pki.oids.md5:
break;
default:
throw new Error(
"Could not add PKCS#7 signer; unknown message digest algorithm: " + f
);
}
var u = r.authenticatedAttributes || [];
if (u.length > 0) {
for (var l = !1, c = !1, v = 0; v < u.length; ++v) {
var C = u[v];
if (!l && C.type === k.pki.oids.contentType) {
if (l = !0, c)
break;
continue;
}
if (!c && C.type === k.pki.oids.messageDigest) {
if (c = !0, l)
break;
continue;
}
}
if (!l || !c)
throw new Error("Invalid signer.authenticatedAttributes. If signer.authenticatedAttributes is specified, then it must contain at least two attributes, PKCS #9 content-type and PKCS #9 message-digest.");
}
e.signers.push({
key: o,
version: 1,
issuer: i,
serialNumber: s,
digestAlgorithm: f,
signatureAlgorithm: k.pki.oids.rsaEncryption,
signature: null,
authenticatedAttributes: u,
unauthenticatedAttributes: []
});
},
/**
* Signs the content.
* @param options Options to apply when signing:
* [detached] boolean. If signing should be done in detached mode. Defaults to false.
*/
sign: function(r) {
if (r = r || {}, (typeof e.content != "object" || e.contentInfo === null) && (e.contentInfo = m.create(
m.Class.UNIVERSAL,
m.Type.SEQUENCE,
!0,
[
// ContentType
m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(k.pki.oids.data).getBytes()
)
]
), "content" in e)) {
var i;
e.content instanceof k.util.ByteBuffer ? i = e.content.bytes() : typeof e.content == "string" && (i = k.util.encodeUtf8(e.content)), r.detached ? e.detachedContent = m.create(m.Class.UNIVERSAL, m.Type.OCTETSTRING, !1, i) : e.contentInfo.value.push(
// [0] EXPLICIT content
m.create(m.Class.CONTEXT_SPECIFIC, 0, !0, [
m.create(
m.Class.UNIVERSAL,
m.Type.OCTETSTRING,
!1,
i
)
])
);
}
if (e.signers.length !== 0) {
var s = t();
a(s);
}
},
verify: function() {
throw new Error("PKCS#7 signature verification not yet implemented.");
},
/**
* Add a certificate.
*
* @param cert the certificate to add.
*/
addCertificate: function(r) {
typeof r == "string" && (r = k.pki.certificateFromPem(r)), e.certificates.push(r);
},
/**
* Add a certificate revokation list.
*
* @param crl the certificate revokation list to add.
*/
addCertificateRevokationList: function(r) {
throw new Error("PKCS#7 CRL support not yet implemented.");
}
}, e;
function t() {
for (var r = {}, i = 0; i < e.signers.length; ++i) {
var s = e.signers[i], n = s.digestAlgorithm;
n in r || (r[n] = k.md[k.pki.oids[n]].create()), s.authenticatedAttributes.length === 0 ? s.md = r[n] : s.md = k.md[k.pki.oids[n]].create();
}
e.digestAlgorithmIdentifiers = [];
for (var n in r)
e.digestAlgorithmIdentifiers.push(
// AlgorithmIdentifier
m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// algorithm
m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(n).getBytes()
),
// parameters (null)
m.create(m.Class.UNIVERSAL, m.Type.NULL, !1, "")
])
);
return r;
}
function a(r) {
var i;
if (e.detachedContent ? i = e.detachedContent : (i = e.contentInfo.value[1], i = i.value[0]), !i)
throw new Error(
"Could not sign PKCS#7 message; there is no content to sign."
);
var s = m.derToOid(e.contentInfo.value[0].value), n = m.toDer(i);
n.getByte(), m.getBerValueLength(n), n = n.getBytes();
for (var o in r)
r[o].start().update(n);
for (var f = /* @__PURE__ */ new Date(), u = 0; u < e.signers.length; ++u) {
var l = e.signers[u];
if (l.authenticatedAttributes.length === 0) {
if (s !== k.pki.oids.data)
throw new Error(
"Invalid signer; authenticatedAttributes must be present when the ContentInfo content type is not PKCS#7 Data."
);
} else {
l.authenticatedAttributesAsn1 = m.create(
m.Class.CONTEXT_SPECIFIC,
0,
!0,
[]
);
for (var c = m.create(
m.Class.UNIVERSAL,
m.Type.SET,
!0,
[]
), v = 0; v < l.authenticatedAttributes.length; ++v) {
var C = l.authenticatedAttributes[v];
C.type === k.pki.oids.messageDigest ? C.value = r[l.digestAlgorithm].digest() : C.type === k.pki.oids.signingTime && (C.value || (C.value = f)), c.value.push(Jr(C)), l.authenticatedAttributesAsn1.value.push(Jr(C));
}
n = m.toDer(c).getBytes(), l.md.start().update(n);
}
l.signature = l.key.sign(l.md, "RSASSA-PKCS1-V1_5");
}
e.signerInfos = No(e.signers);
}
};
He.createEncryptedData = function() {
var e = null;
return e = {
type: k.pki.oids.encryptedData,
version: 0,
encryptedContent: {
algorithm: k.pki.oids["aes256-CBC"]
},
/**
* Reads an EncryptedData content block (in ASN.1 format)
*
* @param obj The ASN.1 representation of the EncryptedData content block
*/
fromAsn1: function(t) {
Ca(e, t, He.asn1.encryptedDataValidator);
},
/**
* Decrypt encrypted content
*
* @param key The (symmetric) key as a byte buffer
*/
decrypt: function(t) {
t !== void 0 && (e.encryptedContent.key = t), Ui(e);
}
}, e;
};
He.createEnvelopedData = function() {
var e = null;
return e = {
type: k.pki.oids.envelopedData,
version: 0,
recipients: [],
encryptedContent: {
algorithm: k.pki.oids["aes256-CBC"]
},
/**
* Reads an EnvelopedData content block (in ASN.1 format)
*
* @param obj the ASN.1 representation of the EnvelopedData content block.
*/
fromAsn1: function(t) {
var a = Ca(e, t, He.asn1.envelopedDataValidator);
e.recipients = Bo(a.recipientInfos.value);
},
toAsn1: function() {
return m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// ContentType
m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(e.type).getBytes()
),
// [0] EnvelopedData
m.create(m.Class.CONTEXT_SPECIFIC, 0, !0, [
m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// Version
m.create(
m.Class.UNIVERSAL,
m.Type.INTEGER,
!1,
m.integerToDer(e.version).getBytes()
),
// RecipientInfos
m.create(
m.Class.UNIVERSAL,
m.Type.SET,
!0,
bo(e.recipients)
),
// EncryptedContentInfo
m.create(
m.Class.UNIVERSAL,
m.Type.SEQUENCE,
!0,
Ro(e.encryptedContent)
)
])
])
]);
},
/**
* Find recipient by X.509 certificate's issuer.
*
* @param cert the certificate with the issuer to look for.
*
* @return the recipient object.
*/
findRecipient: function(t) {
for (var a = t.issuer.attributes, r = 0; r < e.recipients.length; ++r) {
var i = e.recipients[r], s = i.issuer;
if (i.serialNumber === t.serialNumber && s.length === a.length) {
for (var n = !0, o = 0; o < a.length; ++o)
if (s[o].type !== a[o].type || s[o].value !== a[o].value) {
n = !1;
break;
}
if (n)
return i;
}
}
return null;
},
/**
* Decrypt enveloped content
*
* @param recipient The recipient object related to the private key
* @param privKey The (RSA) private key object
*/
decrypt: function(t, a) {
if (e.encryptedContent.key === void 0 && t !== void 0 && a !== void 0)
switch (t.encryptedContent.algorithm) {
case k.pki.oids.rsaEncryption:
case k.pki.oids.desCBC:
var r = a.decrypt(t.encryptedContent.content);
e.encryptedContent.key = k.util.createBuffer(r);
break;
default:
throw new Error("Unsupported asymmetric cipher, OID " + t.encryptedContent.algorithm);
}
Ui(e);
},
/**
* Add (another) entity to list of recipients.
*
* @param cert The certificate of the entity to add.
*/
addRecipient: function(t) {
e.recipients.push({
version: 0,
issuer: t.issuer.attributes,
serialNumber: t.serialNumber,
encryptedContent: {
// We simply assume rsaEncryption here, since forge.pki only
// supports RSA so far. If the PKI module supports other
// ciphers one day, we need to modify this one as well.
algorithm: k.pki.oids.rsaEncryption,
key: t.publicKey
}
});
},
/**
* Encrypt enveloped content.
*
* This function supports two optional arguments, cipher and key, which
* can be used to influence symmetric encryption. Unless cipher is
* provided, the cipher specified in encryptedContent.algorithm is used
* (defaults to AES-256-CBC). If no key is provided, encryptedContent.key
* is (re-)used. If that one's not set, a random key will be generated
* automatically.
*
* @param [key] The key to be used for symmetric encryption.
* @param [cipher] The OID of the symmetric cipher to use.
*/
encrypt: function(t, a) {
if (e.encryptedContent.content === void 0) {
a = a || e.encryptedContent.algorithm, t = t || e.encryptedContent.key;
var r, i, s;
switch (a) {
case k.pki.oids["aes128-CBC"]:
r = 16, i = 16, s = k.aes.createEncryptionCipher;
break;
case k.pki.oids["aes192-CBC"]:
r = 24, i = 16, s = k.aes.createEncryptionCipher;
break;
case k.pki.oids["aes256-CBC"]:
r = 32, i = 16, s = k.aes.createEncryptionCipher;
break;
case k.pki.oids["des-EDE3-CBC"]:
r = 24, i = 8, s = k.des.createEncryptionCipher;
break;
default:
throw new Error("Unsupported symmetric cipher, OID " + a);
}
if (t === void 0)
t = k.util.createBuffer(k.random.getBytes(r));
else if (t.length() != r)
throw new Error("Symmetric key has wrong length; got " + t.length() + " bytes, expected " + r + ".");
e.encryptedContent.algorithm = a, e.encryptedContent.key = t, e.encryptedContent.parameter = k.util.createBuffer(
k.random.getBytes(i)
);
var n = s(t);
if (n.start(e.encryptedContent.parameter.copy()), n.update(e.content), !n.finish())
throw new Error("Symmetric encryption failed.");
e.encryptedContent.content = n.output;
}
for (var o = 0; o < e.recipients.length; ++o) {
var f = e.recipients[o];
if (f.encryptedContent.content === void 0)
switch (f.encryptedContent.algorithm) {
case k.pki.oids.rsaEncryption:
f.encryptedContent.content = f.encryptedContent.key.encrypt(
e.encryptedContent.key.data
);
break;
default:
throw new Error("Unsupported asymmetric cipher, OID " + f.encryptedContent.algorithm);
}
}
}
}, e;
};
function Io(e) {
var t = {}, a = [];
if (!m.validate(e, He.asn1.recipientInfoValidator, t, a)) {
var r = new Error("Cannot read PKCS#7 RecipientInfo. ASN.1 object is not an PKCS#7 RecipientInfo.");
throw r.errors = a, r;
}
return {
version: t.version.charCodeAt(0),
issuer: k.pki.RDNAttributesAsArray(t.issuer),
serialNumber: k.util.createBuffer(t.serial).toHex(),
encryptedContent: {
algorithm: m.derToOid(t.encAlgorithm),
parameter: t.encParameter ? t.encParameter.value : void 0,
content: t.encKey
}
};
}
function Ao(e) {
return m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// Version
m.create(
m.Class.UNIVERSAL,
m.Type.INTEGER,
!1,
m.integerToDer(e.version).getBytes()
),
// IssuerAndSerialNumber
m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// Name
k.pki.distinguishedNameToAsn1({ attributes: e.issuer }),
// Serial
m.create(
m.Class.UNIVERSAL,
m.Type.INTEGER,
!1,
k.util.hexToBytes(e.serialNumber)
)
]),
// KeyEncryptionAlgorithmIdentifier
m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// Algorithm
m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(e.encryptedContent.algorithm).getBytes()
),
// Parameter, force NULL, only RSA supported for now.
m.create(m.Class.UNIVERSAL, m.Type.NULL, !1, "")
]),
// EncryptedKey
m.create(
m.Class.UNIVERSAL,
m.Type.OCTETSTRING,
!1,
e.encryptedContent.content
)
]);
}
function Bo(e) {
for (var t = [], a = 0; a < e.length; ++a)
t.push(Io(e[a]));
return t;
}
function bo(e) {
for (var t = [], a = 0; a < e.length; ++a)
t.push(Ao(e[a]));
return t;
}
function _o(e) {
var t = m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// version
m.create(
m.Class.UNIVERSAL,
m.Type.INTEGER,
!1,
m.integerToDer(e.version).getBytes()
),
// issuerAndSerialNumber
m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// name
k.pki.distinguishedNameToAsn1({ attributes: e.issuer }),
// serial
m.create(
m.Class.UNIVERSAL,
m.Type.INTEGER,
!1,
k.util.hexToBytes(e.serialNumber)
)
]),
// digestAlgorithm
m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// algorithm
m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(e.digestAlgorithm).getBytes()
),
// parameters (null)
m.create(m.Class.UNIVERSAL, m.Type.NULL, !1, "")
])
]);
if (e.authenticatedAttributesAsn1 && t.value.push(e.authenticatedAttributesAsn1), t.value.push(m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// algorithm
m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(e.signatureAlgorithm).getBytes()
),
// parameters (null)
m.create(m.Class.UNIVERSAL, m.Type.NULL, !1, "")
])), t.value.push(m.create(
m.Class.UNIVERSAL,
m.Type.OCTETSTRING,
!1,
e.signature
)), e.unauthenticatedAttributes.length > 0) {
for (var a = m.create(m.Class.CONTEXT_SPECIFIC, 1, !0, []), r = 0; r < e.unauthenticatedAttributes.length; ++r) {
var i = e.unauthenticatedAttributes[r];
a.values.push(Jr(i));
}
t.value.push(a);
}
return t;
}
function No(e) {
for (var t = [], a = 0; a < e.length; ++a)
t.push(_o(e[a]));
return t;
}
function Jr(e) {
var t;
if (e.type === k.pki.oids.contentType)
t = m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(e.value).getBytes()
);
else if (e.type === k.pki.oids.messageDigest)
t = m.create(
m.Class.UNIVERSAL,
m.Type.OCTETSTRING,
!1,
e.value.bytes()
);
else if (e.type === k.pki.oids.signingTime) {
var a = /* @__PURE__ */ new Date("1950-01-01T00:00:00Z"), r = /* @__PURE__ */ new Date("2050-01-01T00:00:00Z"), i = e.value;
if (typeof i == "string") {
var s = Date.parse(i);
isNaN(s) ? i.length === 13 ? i = m.utcTimeToDate(i) : i = m.generalizedTimeToDate(i) : i = new Date(s);
}
i >= a && i < r ? t = m.create(
m.Class.UNIVERSAL,
m.Type.UTCTIME,
!1,
m.dateToUtcTime(i)
) : t = m.create(
m.Class.UNIVERSAL,
m.Type.GENERALIZEDTIME,
!1,
m.dateToGeneralizedTime(i)
);
}
return m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// AttributeType
m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(e.type).getBytes()
),
m.create(m.Class.UNIVERSAL, m.Type.SET, !0, [
// AttributeValue
t
])
]);
}
function Ro(e) {
return [
// ContentType, always Data for the moment
m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(k.pki.oids.data).getBytes()
),
// ContentEncryptionAlgorithmIdentifier
m.create(m.Class.UNIVERSAL, m.Type.SEQUENCE, !0, [
// Algorithm
m.create(
m.Class.UNIVERSAL,
m.Type.OID,
!1,
m.oidToDer(e.algorithm).getBytes()
),
// Parameters (IV)
e.parameter ? m.create(
m.Class.UNIVERSAL,
m.Type.OCTETSTRING,
!1,
e.parameter.getBytes()
) : void 0
]),
// [0] EncryptedContent
m.create(m.Class.CONTEXT_SPECIFIC, 0, !0, [
m.create(
m.Class.UNIVERSAL,
m.Type.OCTETSTRING,
!1,
e.content.getBytes()
)
])
];
}
function Ca(e, t, a) {
var r = {}, i = [];
if (!m.validate(t, a, r, i)) {
var s = new Error("Cannot read PKCS#7 message. ASN.1 object is not a supported PKCS#7 message.");
throw s.errors = s, s;
}
var n = m.derToOid(r.contentType);
if (n !== k.pki.oids.data)
throw new Error("Unsupported PKCS#7 message. Only wrapped ContentType Data supported.");
if (r.encryptedContent) {
var o = "";
if (k.util.isArray(r.encryptedContent))
for (var f = 0; f < r.encryptedContent.length; ++f) {
if (r.encryptedContent[f].type !== m.Type.OCTETSTRING)
throw new Error("Malformed PKCS#7 message, expecting encrypted content constructed of only OCTET STRING objects.");
o += r.encryptedContent[f].value;
}
else
o = r.encryptedContent;
e.encryptedContent = {
algorithm: m.derToOid(r.encAlgorithm),
parameter: k.util.createBuffer(r.encParameter.value),
content: k.util.createBuffer(o)
};
}
if (r.content) {
var o = "";
if (k.util.isArray(r.content))
for (var f = 0; f < r.content.length; ++f) {
if (r.content[f].type !== m.Type.OCTETSTRING)
throw new Error("Malformed PKCS#7 message, expecting content constructed of only OCTET STRING objects.");
o += r.content[f].value;
}
else
o = r.content;
e.content = k.util.createBuffer(o);
}
return e.version = r.version.charCodeAt(0), e.rawCapture = r, r;
}
function Ui(e) {
if (e.encryptedContent.key === void 0)
throw new Error("Symmetric key not available.");
if (e.content === void 0) {
var t;
switch (e.encryptedContent.algorithm) {
case k.pki.oids["aes128-CBC"]:
case k.pki.oids["aes192-CBC"]:
case k.pki.oids["aes256-CBC"]:
t = k.aes.createDecryptionCipher(e.encryptedContent.key);
break;
case k.pki.oids.desCBC:
case k.pki.oids["des-EDE3-CBC"]:
t = k.des.createDecryptionCipher(e.encryptedContent.key);
break;
default:
throw new Error("Unsupported symmetric cipher, OID " + e.encryptedContent.algorithm);
}
if (t.start(e.encryptedContent.parameter), t.update(e.encryptedContent.content), !t.finish())
throw new Error("Symmetric decryption failed.");
e.content = t.output;
}
}
var ge = z, Nr = ge.ssh = ge.ssh || {};
Nr.privateKeyToPutty = function(e, t, a) {
a = a || "", t = t || "";
var r = "ssh-rsa", i = t === "" ? "none" : "aes256-cbc", s = "PuTTY-User-Key-File-2: " + r + `\r
`;
s += "Encryption: " + i + `\r
`, s += "Comment: " + a + `\r
`;
var n = ge.util.createBuffer();
Ot(n, r), it(n, e.e), it(n, e.n);
var o = ge.util.encode64(n.bytes(), 64), f = Math.floor(o.length / 66) + 1;
s += "Public-Lines: " + f + `\r
`, s += o;
var u = ge.util.createBuffer();
it(u, e.d), it(u, e.p), it(u, e.q), it(u, e.qInv);
var l;
if (!t)
l = ge.util.encode64(u.bytes(), 64);
else {
var c = u.length() + 16 - 1;
c -= c % 16;
var v = sr(u.bytes());
v.truncate(v.length() - c + u.length()), u.putBuffer(v);
var C = ge.util.createBuffer();
C.putBuffer(sr("\0\0\0\0", t)), C.putBuffer(sr("\0\0\0", t));
var y = ge.aes.createEncryptionCipher(C.truncate(8), "CBC");
y.start(ge.util.createBuffer().fillWithByte(0, 16)), y.update(u.copy()), y.finish();
var x = y.output;
x.truncate(16), l = ge.util.encode64(x.bytes(), 64);
}
f = Math.floor(l.length / 66) + 1, s += `\r
Private-Lines: ` + f + `\r
`, s += l;
var T = sr("putty-private-key-file-mac-key", t), I = ge.util.createBuffer();
Ot(I, r), Ot(I, i), Ot(I, a), I.putInt32(n.length()), I.putBuffer(n), I.putInt32(u.length()), I.putBuffer(u);
var B = ge.hmac.create();
return B.start("sha1", T), B.update(I.bytes()), s += `\r
Private-MAC: ` + B.digest().toHex() + `\r
`, s;
};
Nr.publicKeyToOpenSSH = function(e, t) {
var a = "ssh-rsa";
t = t || "";
var r = ge.util.createBuffer();
return Ot(r, a), it(r, e.e), it(r, e.n), a + " " + ge.util.encode64(r.bytes()) + " " + t;
};
Nr.privateKeyToOpenSSH = function(e, t) {
return t ? ge.pki.encryptRsaPrivateKey(
e,
t,
{ legacy: !0, algorithm: "aes128" }
) : ge.pki.privateKeyToPem(e);
};
Nr.getPublicKeyFingerprint = function(e, t) {
t = t || {};
var a = t.md || ge.md.md5.create(), r = "ssh-rsa", i = ge.util.createBuffer();
Ot(i, r), it(i, e.e), it(i, e.n), a.start(), a.update(i.getBytes());
var s = a.digest();
if (t.encoding === "hex") {
var n = s.toHex();
return t.delimiter ? n.match(/.{2}/g).join(t.delimiter) : n;
} else {
if (t.encoding === "binary")
return s.getBytes();
if (t.encoding)
throw new Error('Unknown encoding "' + t.encoding + '".');
}
return s;
};
function it(e, t) {
var a = t.toString(16);
a[0] >= "8" && (a = "00" + a);
var r = ge.util.hexToBytes(a);
e.putInt32(r.length), e.putBytes(r);
}
function Ot(e, t) {
e.putInt32(t.length), e.putString(t);
}
function sr() {
for (var e = ge.md.sha1.create(), t = arguments.length, a = 0; a < t; ++a)
e.update(arguments[a]);
return e.digest();
}
var Pi = z;
const wo = /* @__PURE__ */ Fi(Pi), Lo = /* @__PURE__ */ Vi({
__proto__: null,
default: wo
}, [Pi]);
export {
Lo as i
};