!function(e, t) {
"object" == typeof exports && "object" == typeof module ? module.exports = t() : "function" == typeof define && define.amd ? define([], t) : "object" == typeof exports ? exports.forge = t() : e.forge = t()
}(window, (function() {
return function(e) {
var t = {};
function r(a) {
if (t[a])
return t[a].exports;
var n = t[a] = {
i: a,
l: !1,
exports: {}
};
return e[a].call(n.exports, n, n.exports, r),
n.l = !0,
n.exports
}
return r.m = e,
r.c = t,
r.d = function(e, t, a) {
r.o(e, t) || Object.defineProperty(e, t, {
enumerable: !0,
get: a
})
}
,
r.r = function(e) {
"undefined" != typeof Symbol && Symbol.toStringTag && Object.defineProperty(e, Symbol.toStringTag, {
value: "Module"
}),
Object.defineProperty(e, "__esModule", {
value: !0
})
}
,
r.t = function(e, t) {
if (1 & t && (e = r(e)),
8 & t)
return e;
if (4 & t && "object" == typeof e && e && e.__esModule)
return e;
var a = Object.create(null);
if (r.r(a),
Object.defineProperty(a, "default", {
enumerable: !0,
value: e
}),
2 & t && "string" != typeof e)
for (var n in e)
r.d(a, n, function(t) {
return e[t]
}
.bind(null, n));
return a
}
,
r.n = function(e) {
var t = e && e.__esModule ? function() {
return e.default
}
: function() {
return e
}
;
return r.d(t, "a", t),
t
}
,
r.o = function(e, t) {
return Object.prototype.hasOwnProperty.call(e, t)
}
,
r.p = "",
r(r.s = 32)
}([function(e, t) {
e.exports = {
options: {
usePureJavaScript: !1
}
}
}
, function(e, t, r) {
(function(t) {
var a = r(0)
, n = r(35)
, i = e.exports = a.util = a.util || {};
function s(e) {
if (8 !== e && 16 !== e && 24 !== e && 32 !== e)
throw new Error("Only 8, 16, 24, or 32 bits supported: " + e)
}
function o(e) {
if (this.data = "",
this.read = 0,
"string" == typeof e)
this.data = e;
else if (i.isArrayBuffer(e) || i.isArrayBufferView(e))
if ("undefined" != typeof Buffer && e instanceof Buffer)
this.data = e.toString("binary");
else {
var t = new Uint8Array(e);
try {
this.data = String.fromCharCode.apply(null, t)
} catch (e) {
for (var r = 0; r < t.length; ++r)
this.putByte(t[r])
}
}
else
(e instanceof o || "object" == typeof e && "string" == typeof e.data && "number" == typeof e.read) && (this.data = e.data,
this.read = e.read);
this._constructedStringLength = 0
}
!function() {
if ("undefined" != typeof process && process.nextTick && !process.browser)
return i.nextTick = process.nextTick,
void ("function" == typeof setImmediate ? i.setImmediate = setImmediate : i.setImmediate = i.nextTick);
if ("function" == typeof setImmediate)
return i.setImmediate = function() {
return setImmediate.apply(void 0, arguments)
}
,
void (i.nextTick = function(e) {
return setImmediate(e)
}
);
if (i.setImmediate = function(e) {
setTimeout(e, 0)
}
,
"undefined" != typeof window && "function" == typeof window.postMessage) {
var e = "forge.setImmediate"
, t = [];
i.setImmediate = function(r) {
t.push(r),
1 === t.length && window.postMessage(e, "*")
}
,
window.addEventListener("message", (function(r) {
if (r.source === window && r.data === e) {
r.stopPropagation();
var a = t.slice();
t.length = 0,
a.forEach((function(e) {
e()
}
))
}
}
), !0)
}
if ("undefined" != typeof MutationObserver) {
var r = Date.now()
, a = !0
, n = document.createElement("div");
t = [];
new MutationObserver((function() {
var e = t.slice();
t.length = 0,
e.forEach((function(e) {
e()
}
))
}
)).observe(n, {
attributes: !0
});
var s = i.setImmediate;
i.setImmediate = function(e) {
Date.now() - r > 15 ? (r = Date.now(),
s(e)) : (t.push(e),
1 === t.length && n.setAttribute("a", a = !a))
}
}
i.nextTick = i.setImmediate
}(),
i.isNodejs = "undefined" != typeof process && process.versions && process.versions.node,
i.globalScope = i.isNodejs ? t : "undefined" == typeof self ? window : self,
i.isArray = Array.isArray || function(e) {
return "[object Array]" === Object.prototype.toString.call(e)
}
,
i.isArrayBuffer = function(e) {
return "undefined" != typeof ArrayBuffer && e instanceof ArrayBuffer
}
,
i.isArrayBufferView = function(e) {
return e && i.isArrayBuffer(e.buffer) && void 0 !== e.byteLength
}
,
i.ByteBuffer = o,
i.ByteStringBuffer = o;
i.ByteStringBuffer.prototype._optimizeConstructedString = function(e) {
this._constructedStringLength += e,
this._constructedStringLength > 4096 && (this.data.substr(0, 1),
this._constructedStringLength = 0)
}
,
i.ByteStringBuffer.prototype.length = function() {
return this.data.length - this.read
}
,
i.ByteStringBuffer.prototype.isEmpty = function() {
return this.length() <= 0
}
,
i.ByteStringBuffer.prototype.putByte = function(e) {
return this.putBytes(String.fromCharCode(e))
}
,
i.ByteStringBuffer.prototype.fillWithByte = function(e, t) {
e = String.fromCharCode(e);
for (var r = this.data; t > 0; )
1 & t && (r += e),
(t >>>= 1) > 0 && (e += e);
return this.data = r,
this._optimizeConstructedString(t),
this
}
,
i.ByteStringBuffer.prototype.putBytes = function(e) {
return this.data += e,
this._optimizeConstructedString(e.length),
this
}
,
i.ByteStringBuffer.prototype.putString = function(e) {
return this.putBytes(i.encodeUtf8(e))
}
,
i.ByteStringBuffer.prototype.putInt16 = function(e) {
return this.putBytes(String.fromCharCode(e >> 8 & 255) + String.fromCharCode(255 & e))
}
,
i.ByteStringBuffer.prototype.putInt24 = function(e) {
return this.putBytes(String.fromCharCode(e >> 16 & 255) + String.fromCharCode(e >> 8 & 255) + String.fromCharCode(255 & e))
}
,
i.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(255 & e))
}
,
i.ByteStringBuffer.prototype.putInt16Le = function(e) {
return this.putBytes(String.fromCharCode(255 & e) + String.fromCharCode(e >> 8 & 255))
}
,
i.ByteStringBuffer.prototype.putInt24Le = function(e) {
return this.putBytes(String.fromCharCode(255 & e) + String.fromCharCode(e >> 8 & 255) + String.fromCharCode(e >> 16 & 255))
}
,
i.ByteStringBuffer.prototype.putInt32Le = function(e) {
return this.putBytes(String.fromCharCode(255 & e) + String.fromCharCode(e >> 8 & 255) + String.fromCharCode(e >> 16 & 255) + String.fromCharCode(e >> 24 & 255))
}
,
i.ByteStringBuffer.prototype.putInt = function(e, t) {
s(t);
var r = "";
do {
t -= 8,
r += String.fromCharCode(e >> t & 255)
} while (t > 0);
return this.putBytes(r)
}
,
i.ByteStringBuffer.prototype.putSignedInt = function(e, t) {
return e < 0 && (e += 2 << t - 1),
this.putInt(e, t)
}
,
i.ByteStringBuffer.prototype.putBuffer = function(e) {
return this.putBytes(e.getBytes())
}
,
i.ByteStringBuffer.prototype.getByte = function() {
return this.data.charCodeAt(this.read++)
}
,
i.ByteStringBuffer.prototype.getInt16 = function() {
var e = this.data.charCodeAt(this.read) << 8 ^ this.data.charCodeAt(this.read + 1);
return this.read += 2,
e
}
,
i.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
}
,
i.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
}
,
i.ByteStringBuffer.prototype.getInt16Le = function() {
var e = this.data.charCodeAt(this.read) ^ this.data.charCodeAt(this.read + 1) << 8;
return this.read += 2,
e
}
,
i.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
}
,
i.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
}
,
i.ByteStringBuffer.prototype.getInt = function(e) {
s(e);
var t = 0;
do {
t = (t << 8) + this.data.charCodeAt(this.read++),
e -= 8
} while (e > 0);
return t
}
,
i.ByteStringBuffer.prototype.getSignedInt = function(e) {
var t = this.getInt(e)
, r = 2 << e - 2;
return t >= r && (t -= r << 1),
t
}
,
i.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) : 0 === e ? t = "" : (t = 0 === this.read ? this.data : this.data.slice(this.read),
this.clear()),
t
}
,
i.ByteStringBuffer.prototype.bytes = function(e) {
return void 0 === e ? this.data.slice(this.read) : this.data.slice(this.read, this.read + e)
}
,
i.ByteStringBuffer.prototype.at = function(e) {
return this.data.charCodeAt(this.read + e)
}
,
i.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
}
,
i.ByteStringBuffer.prototype.last = function() {
return this.data.charCodeAt(this.data.length - 1)
}
,
i.ByteStringBuffer.prototype.copy = function() {
var e = i.createBuffer(this.data);
return e.read = this.read,
e
}
,
i.ByteStringBuffer.prototype.compact = function() {
return this.read > 0 && (this.data = this.data.slice(this.read),
this.read = 0),
this
}
,
i.ByteStringBuffer.prototype.clear = function() {
return this.data = "",
this.read = 0,
this
}
,
i.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
}
,
i.ByteStringBuffer.prototype.toHex = function() {
for (var e = "", t = this.read; t < this.data.length; ++t) {
var r = this.data.charCodeAt(t);
r < 16 && (e += "0"),
e += r.toString(16)
}
return e
}
,
i.ByteStringBuffer.prototype.toString = function() {
return i.decodeUtf8(this.bytes())
}
,
i.DataBuffer = function(e, t) {
t = t || {},
this.read = t.readOffset || 0,
this.growSize = t.growSize || 1024;
var r = i.isArrayBuffer(e)
, a = i.isArrayBufferView(e);
if (r || a)
return this.data = r ? new DataView(e) : new DataView(e.buffer,e.byteOffset,e.byteLength),
void (this.write = "writeOffset"in t ? t.writeOffset : this.data.byteLength);
this.data = new DataView(new ArrayBuffer(0)),
this.write = 0,
null != e && this.putBytes(e),
"writeOffset"in t && (this.write = t.writeOffset)
}
,
i.DataBuffer.prototype.length = function() {
return this.write - this.read
}
,
i.DataBuffer.prototype.isEmpty = function() {
return this.length() <= 0
}
,
i.DataBuffer.prototype.accommodate = function(e, t) {
if (this.length() >= e)
return this;
t = Math.max(t || this.growSize, e);
var r = new Uint8Array(this.data.buffer,this.data.byteOffset,this.data.byteLength)
, a = new Uint8Array(this.length() + t);
return a.set(r),
this.data = new DataView(a.buffer),
this
}
,
i.DataBuffer.prototype.putByte = function(e) {
return this.accommodate(1),
this.data.setUint8(this.write++, e),
this
}
,
i.DataBuffer.prototype.fillWithByte = function(e, t) {
this.accommodate(t);
for (var r = 0; r < t; ++r)
this.data.setUint8(e);
return this
}
,
i.DataBuffer.prototype.putBytes = function(e, t) {
if (i.isArrayBufferView(e)) {
var r = (a = new Uint8Array(e.buffer,e.byteOffset,e.byteLength)).byteLength - a.byteOffset;
return this.accommodate(r),
new Uint8Array(this.data.buffer,this.write).set(a),
this.write += r,
this
}
if (i.isArrayBuffer(e)) {
var a = new Uint8Array(e);
return this.accommodate(a.byteLength),
new Uint8Array(this.data.buffer).set(a, this.write),
this.write += a.byteLength,
this
}
if (e instanceof i.DataBuffer || "object" == typeof e && "number" == typeof e.read && "number" == typeof e.write && i.isArrayBufferView(e.data)) {
a = new Uint8Array(e.data.byteLength,e.read,e.length());
return this.accommodate(a.byteLength),
new Uint8Array(e.data.byteLength,this.write).set(a),
this.write += a.byteLength,
this
}
if (e instanceof i.ByteStringBuffer && (e = e.data,
t = "binary"),
t = t || "binary",
"string" == typeof e) {
var n;
if ("hex" === t)
return this.accommodate(Math.ceil(e.length / 2)),
n = new Uint8Array(this.data.buffer,this.write),
this.write += i.binary.hex.decode(e, n, this.write),
this;
if ("base64" === t)
return this.accommodate(3 * Math.ceil(e.length / 4)),
n = new Uint8Array(this.data.buffer,this.write),
this.write += i.binary.base64.decode(e, n, this.write),
this;
if ("utf8" === t && (e = i.encodeUtf8(e),
t = "binary"),
"binary" === t || "raw" === t)
return this.accommodate(e.length),
n = new Uint8Array(this.data.buffer,this.write),
this.write += i.binary.raw.decode(n),
this;
if ("utf16" === t)
return this.accommodate(2 * e.length),
n = new Uint16Array(this.data.buffer,this.write),
this.write += i.text.utf16.encode(n),
this;
throw new Error("Invalid encoding: " + t)
}
throw Error("Invalid parameter: " + e)
}
,
i.DataBuffer.prototype.putBuffer = function(e) {
return this.putBytes(e),
e.clear(),
this
}
,
i.DataBuffer.prototype.putString = function(e) {
return this.putBytes(e, "utf16")
}
,
i.DataBuffer.prototype.putInt16 = function(e) {
return this.accommodate(2),
this.data.setInt16(this.write, e),
this.write += 2,
this
}
,
i.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
}
,
i.DataBuffer.prototype.putInt32 = function(e) {
return this.accommodate(4),
this.data.setInt32(this.write, e),
this.write += 4,
this
}
,
i.DataBuffer.prototype.putInt16Le = function(e) {
return this.accommodate(2),
this.data.setInt16(this.write, e, !0),
this.write += 2,
this
}
,
i.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
}
,
i.DataBuffer.prototype.putInt32Le = function(e) {
return this.accommodate(4),
this.data.setInt32(this.write, e, !0),
this.write += 4,
this
}
,
i.DataBuffer.prototype.putInt = function(e, t) {
s(t),
this.accommodate(t / 8);
do {
t -= 8,
this.data.setInt8(this.write++, e >> t & 255)
} while (t > 0);
return this
}
,
i.DataBuffer.prototype.putSignedInt = function(e, t) {
return s(t),
this.accommodate(t / 8),
e < 0 && (e += 2 << t - 1),
this.putInt(e, t)
}
,
i.DataBuffer.prototype.getByte = function() {
return this.data.getInt8(this.read++)
}
,
i.DataBuffer.prototype.getInt16 = function() {
var e = this.data.getInt16(this.read);
return this.read += 2,
e
}
,
i.DataBuffer.prototype.getInt24 = function() {
var e = this.data.getInt16(this.read) << 8 ^ this.data.getInt8(this.read + 2);
return this.read += 3,
e
}
,
i.DataBuffer.prototype.getInt32 = function() {
var e = this.data.getInt32(this.read);
return this.read += 4,
e
}
,
i.DataBuffer.prototype.getInt16Le = function() {
var e = this.data.getInt16(this.read, !0);
return this.read += 2,
e
}
,
i.DataBuffer.prototype.getInt24Le = function() {
var e = this.data.getInt8(this.read) ^ this.data.getInt16(this.read + 1, !0) << 8;
return this.read += 3,
e
}
,
i.DataBuffer.prototype.getInt32Le = function() {
var e = this.data.getInt32(this.read, !0);
return this.read += 4,
e
}
,
i.DataBuffer.prototype.getInt = function(e) {
s(e);
var t = 0;
do {
t = (t << 8) + this.data.getInt8(this.read++),
e -= 8
} while (e > 0);
return t
}
,
i.DataBuffer.prototype.getSignedInt = function(e) {
var t = this.getInt(e)
, r = 2 << e - 2;
return t >= r && (t -= r << 1),
t
}
,
i.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) : 0 === e ? t = "" : (t = 0 === this.read ? this.data : this.data.slice(this.read),
this.clear()),
t
}
,
i.DataBuffer.prototype.bytes = function(e) {
return void 0 === e ? this.data.slice(this.read) : this.data.slice(this.read, this.read + e)
}
,
i.DataBuffer.prototype.at = function(e) {
return this.data.getUint8(this.read + e)
}
,
i.DataBuffer.prototype.setAt = function(e, t) {
return this.data.setUint8(e, t),
this
}
,
i.DataBuffer.prototype.last = function() {
return this.data.getUint8(this.write - 1)
}
,
i.DataBuffer.prototype.copy = function() {
return new i.DataBuffer(this)
}
,
i.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
}
,
i.DataBuffer.prototype.clear = function() {
return this.data = new DataView(new ArrayBuffer(0)),
this.read = this.write = 0,
this
}
,
i.DataBuffer.prototype.truncate = function(e) {
return this.write = Math.max(0, this.length() - e),
this.read = Math.min(this.read, this.write),
this
}
,
i.DataBuffer.prototype.toHex = function() {
for (var e = "", t = this.read; t < this.data.byteLength; ++t) {
var r = this.data.getUint8(t);
r < 16 && (e += "0"),
e += r.toString(16)
}
return e
}
,
i.DataBuffer.prototype.toString = function(e) {
var t = new Uint8Array(this.data,this.read,this.length());
if ("binary" === (e = e || "utf8") || "raw" === e)
return i.binary.raw.encode(t);
if ("hex" === e)
return i.binary.hex.encode(t);
if ("base64" === e)
return i.binary.base64.encode(t);
if ("utf8" === e)
return i.text.utf8.decode(t);
if ("utf16" === e)
return i.text.utf16.decode(t);
throw new Error("Invalid encoding: " + e)
}
,
i.createBuffer = function(e, t) {
return t = t || "raw",
void 0 !== e && "utf8" === t && (e = i.encodeUtf8(e)),
new i.ByteBuffer(e)
}
,
i.fillString = function(e, t) {
for (var r = ""; t > 0; )
1 & t && (r += e),
(t >>>= 1) > 0 && (e += e);
return r
}
,
i.xorBytes = function(e, t, r) {
for (var a = "", n = "", i = "", s = 0, o = 0; r > 0; --r,
++s)
n = e.charCodeAt(s) ^ t.charCodeAt(s),
o >= 10 && (a += i,
i = "",
o = 0),
i += String.fromCharCode(n),
++o;
return a += i
}
,
i.hexToBytes = function(e) {
var t = ""
, r = 0;
for (!0 & e.length && (r = 1,
t += String.fromCharCode(parseInt(e[0], 16))); r < e.length; r += 2)
t += String.fromCharCode(parseInt(e.substr(r, 2), 16));
return t
}
,
i.bytesToHex = function(e) {
return i.createBuffer(e).toHex()
}
,
i.int32ToBytes = function(e) {
return String.fromCharCode(e >> 24 & 255) + String.fromCharCode(e >> 16 & 255) + String.fromCharCode(e >> 8 & 255) + String.fromCharCode(255 & e)
}
;
var c = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
, u = [62, -1, -1, -1, 63, 52, 53, 54, 55, 56, 57, 58, 59, 60, 61, -1, -1, -1, 64, -1, -1, -1, 0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 16, 17, 18, 19, 20, 21, 22, 23, 24, 25, -1, -1, -1, -1, -1, -1, 26, 27, 28, 29, 30, 31, 32, 33, 34, 35, 36, 37, 38, 39, 40, 41, 42, 43, 44, 45, 46, 47, 48, 49, 50, 51]
, l = "123456789ABCDEFGHJKLMNPQRSTUVWXYZabcdefghijkmnopqrstuvwxyz";
i.encode64 = function(e, t) {
for (var r, a, n, i = "", s = "", o = 0; o < e.length; )
r = e.charCodeAt(o++),
a = e.charCodeAt(o++),
n = e.charCodeAt(o++),
i += c.charAt(r >> 2),
i += c.charAt((3 & r) << 4 | a >> 4),
isNaN(a) ? i += "==" : (i += c.charAt((15 & a) << 2 | n >> 6),
i += isNaN(n) ? "=" : c.charAt(63 & n)),
t && i.length > t && (s += i.substr(0, t) + "\r\n",
i = i.substr(t));
return s += i
}
,
i.decode64 = function(e) {
e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
for (var t, r, a, n, i = "", s = 0; s < e.length; )
t = u[e.charCodeAt(s++) - 43],
r = u[e.charCodeAt(s++) - 43],
a = u[e.charCodeAt(s++) - 43],
n = u[e.charCodeAt(s++) - 43],
i += String.fromCharCode(t << 2 | r >> 4),
64 !== a && (i += String.fromCharCode((15 & r) << 4 | a >> 2),
64 !== n && (i += String.fromCharCode((3 & a) << 6 | n)));
return i
}
,
i.encodeUtf8 = function(e) {
return unescape(encodeURIComponent(e))
}
,
i.decodeUtf8 = function(e) {
return decodeURIComponent(escape(e))
}
,
i.binary = {
raw: {},
hex: {},
base64: {},
base58: {},
baseN: {
encode: n.encode,
decode: n.decode
}
},
i.binary.raw.encode = function(e) {
return String.fromCharCode.apply(null, e)
}
,
i.binary.raw.decode = function(e, t, r) {
var a = t;
a || (a = new Uint8Array(e.length));
for (var n = r = r || 0, i = 0; i < e.length; ++i)
a[n++] = e.charCodeAt(i);
return t ? n - r : a
}
,
i.binary.hex.encode = i.bytesToHex,
i.binary.hex.decode = function(e, t, r) {
var a = t;
a || (a = new Uint8Array(Math.ceil(e.length / 2)));
var n = 0
, i = r = r || 0;
for (1 & e.length && (n = 1,
a[i++] = parseInt(e[0], 16)); n < e.length; n += 2)
a[i++] = parseInt(e.substr(n, 2), 16);
return t ? i - r : a
}
,
i.binary.base64.encode = function(e, t) {
for (var r, a, n, i = "", s = "", o = 0; o < e.byteLength; )
r = e[o++],
a = e[o++],
n = e[o++],
i += c.charAt(r >> 2),
i += c.charAt((3 & r) << 4 | a >> 4),
isNaN(a) ? i += "==" : (i += c.charAt((15 & a) << 2 | n >> 6),
i += isNaN(n) ? "=" : c.charAt(63 & n)),
t && i.length > t && (s += i.substr(0, t) + "\r\n",
i = i.substr(t));
return s += i
}
,
i.binary.base64.decode = function(e, t, r) {
var a, n, i, s, o = t;
o || (o = new Uint8Array(3 * Math.ceil(e.length / 4))),
e = e.replace(/[^A-Za-z0-9\+\/\=]/g, "");
for (var c = 0, l = r = r || 0; c < e.length; )
a = u[e.charCodeAt(c++) - 43],
n = u[e.charCodeAt(c++) - 43],
i = u[e.charCodeAt(c++) - 43],
s = u[e.charCodeAt(c++) - 43],
o[l++] = a << 2 | n >> 4,
64 !== i && (o[l++] = (15 & n) << 4 | i >> 2,
64 !== s && (o[l++] = (3 & i) << 6 | s));
return t ? l - r : o.subarray(0, l)
}
,
i.binary.base58.encode = function(e, t) {
return i.binary.baseN.encode(e, l, t)
}
,
i.binary.base58.decode = function(e, t) {
return i.binary.baseN.decode(e, l, t)
}
,
i.text = {
utf8: {},
utf16: {}
},
i.text.utf8.encode = function(e, t, r) {
e = i.encodeUtf8(e);
var a = t;
a || (a = new Uint8Array(e.length));
for (var n = r = r || 0, s = 0; s < e.length; ++s)
a[n++] = e.charCodeAt(s);
return t ? n - r : a
}
,
i.text.utf8.decode = function(e) {
return i.decodeUtf8(String.fromCharCode.apply(null, e))
}
,
i.text.utf16.encode = function(e, t, r) {
var a = t;
a || (a = new Uint8Array(2 * e.length));
for (var n = new Uint16Array(a.buffer), i = r = r || 0, s = r, o = 0; o < e.length; ++o)
n[s++] = e.charCodeAt(o),
i += 2;
return t ? i - r : a
}
,
i.text.utf16.decode = function(e) {
return String.fromCharCode.apply(null, new Uint16Array(e.buffer))
}
,
i.deflate = function(e, t, r) {
if (t = i.decode64(e.deflate(i.encode64(t)).rval),
r) {
var a = 2;
32 & t.charCodeAt(1) && (a = 6),
t = t.substring(a, t.length - 4)
}
return t
}
,
i.inflate = function(e, t, r) {
var a = e.inflate(i.encode64(t)).rval;
return null === a ? null : i.decode64(a)
}
;
var p = function(e, t, r) {
if (!e)
throw new Error("WebStorage not available.");
var a;
if (null === r ? a = e.removeItem(t) : (r = i.encode64(JSON.stringify(r)),
a = e.setItem(t, r)),
void 0 !== a && !0 !== a.rval) {
var n = new Error(a.error.message);
throw n.id = a.error.id,
n.name = a.error.name,
n
}
}
, f = function(e, t) {
if (!e)
throw new Error("WebStorage not available.");
var r = e.getItem(t);
if (e.init)
if (null === r.rval) {
if (r.error) {
var a = new Error(r.error.message);
throw a.id = r.error.id,
a.name = r.error.name,
a
}
r = null
} else
r = r.rval;
return null !== r && (r = JSON.parse(i.decode64(r))),
r
}
, h = function(e, t, r, a) {
var n = f(e, t);
null === n && (n = {}),
n[r] = a,
p(e, t, n)
}
, d = function(e, t, r) {
var a = f(e, t);
return null !== a && (a = r in a ? a[r] : null),
a
}
, y = function(e, t, r) {
var a = f(e, t);
if (null !== a && r in a) {
delete a[r];
var n = !0;
for (var i in a) {
n = !1;
break
}
n && (a = null),
p(e, t, a)
}
}
, g = function(e, t) {
p(e, t, null)
}
, v = function(e, t, r) {
var a, n = null;
void 0 === r && (r = ["web", "flash"]);
var i = !1
, s = null;
for (var o in r) {
a = r[o];
try {
if ("flash" === a || "both" === a) {
if (null === t[0])
throw new Error("Flash local storage not available.");
n = e.apply(this, t),
i = "flash" === a
}
"web" !== a && "both" !== a || (t[0] = localStorage,
n = e.apply(this, t),
i = !0)
} catch (e) {
s = e
}
if (i)
break
}
if (!i)
throw s;
return n
};
i.setItem = function(e, t, r, a, n) {
v(h, arguments, n)
}
,
i.getItem = function(e, t, r, a) {
return v(d, arguments, a)
}
,
i.removeItem = function(e, t, r, a) {
v(y, arguments, a)
}
,
i.clearItems = function(e, t, r) {
v(g, arguments, r)
}
,
i.isEmpty = function(e) {
for (var t in e)
if (e.hasOwnProperty(t))
return !1;
return !0
}
,
i.format = function(e) {
for (var t, r, a = /%./g, n = 0, i = [], s = 0; t = a.exec(e); ) {
(r = e.substring(s, a.lastIndex - 2)).length > 0 && i.push(r),
s = a.lastIndex;
var o = t[0][1];
switch (o) {
case "s":
case "o":
n < arguments.length ? i.push(arguments[1 + n++]) : i.push("<?>");
break;
case "%":
i.push("%");
break;
default:
i.push("<%" + o + "?>")
}
}
return i.push(e.substring(s)),
i.join("")
}
,
i.formatNumber = function(e, t, r, a) {
var n = e
, i = isNaN(t = Math.abs(t)) ? 2 : t
, s = void 0 === r ? "," : r
, o = void 0 === a ? "." : a
, c = n < 0 ? "-" : ""
, u = parseInt(n = Math.abs(+n || 0).toFixed(i), 10) + ""
, l = u.length > 3 ? u.length % 3 : 0;
return c + (l ? u.substr(0, l) + o : "") + u.substr(l).replace(/(\d{3})(?=\d)/g, "$1" + o) + (i ? s + Math.abs(n - u).toFixed(i).slice(2) : "")
}
,
i.formatSize = function(e) {
return e = e >= 1073741824 ? i.formatNumber(e / 1073741824, 2, ".", "") + " GiB" : e >= 1048576 ? i.formatNumber(e / 1048576, 2, ".", "") + " MiB" : e >= 1024 ? i.formatNumber(e / 1024, 0) + " KiB" : i.formatNumber(e, 0) + " bytes"
}
,
i.bytesFromIP = function(e) {
return -1 !== e.indexOf(".") ? i.bytesFromIPv4(e) : -1 !== e.indexOf(":") ? i.bytesFromIPv6(e) : null
}
,
i.bytesFromIPv4 = function(e) {
if (4 !== (e = e.split(".")).length)
return null;
for (var t = i.createBuffer(), r = 0; r < e.length; ++r) {
var a = parseInt(e[r], 10);
if (isNaN(a))
return null;
t.putByte(a)
}
return t.getBytes()
}
,
i.bytesFromIPv6 = function(e) {
for (var t = 0, r = 2 * (8 - (e = e.split(":").filter((function(e) {
return 0 === e.length && ++t,
!0
}
))).length + t), a = i.createBuffer(), n = 0; n < 8; ++n)
if (e[n] && 0 !== e[n].length) {
var s = i.hexToBytes(e[n]);
s.length < 2 && a.putByte(0),
a.putBytes(s)
} else
a.fillWithByte(0, r),
r = 0;
return a.getBytes()
}
,
i.bytesToIP = function(e) {
return 4 === e.length ? i.bytesToIPv4(e) : 16 === e.length ? i.bytesToIPv6(e) : null
}
,
i.bytesToIPv4 = function(e) {
if (4 !== e.length)
return null;
for (var t = [], r = 0; r < e.length; ++r)
t.push(e.charCodeAt(r));
return t.join(".")
}
,
i.bytesToIPv6 = function(e) {
if (16 !== e.length)
return null;
for (var t = [], r = [], a = 0, n = 0; n < e.length; n += 2) {
for (var s = i.bytesToHex(e[n] + e[n + 1]); "0" === s[0] && "0" !== s; )
s = s.substr(1);
if ("0" === s) {
var o = r[r.length - 1]
, c = t.length;
o && c === o.end + 1 ? (o.end = c,
o.end - o.start > r[a].end - r[a].start && (a = r.length - 1)) : r.push({
start: c,
end: c
})
}
t.push(s)
}
if (r.length > 0) {
var u = r[a];
u.end - u.start > 0 && (t.splice(u.start, u.end - u.start + 1, ""),
0 === u.start && t.unshift(""),
7 === u.end && t.push(""))
}
return t.join(":")
}
,
i.estimateCores = function(e, t) {
if ("function" == typeof e && (t = e,
e = {}),
e = e || {},
"cores"in i && !e.update)
return t(null, i.cores);
if ("undefined" != typeof navigator && "hardwareConcurrency"in navigator && navigator.hardwareConcurrency > 0)
return i.cores = navigator.hardwareConcurrency,
t(null, i.cores);
if ("undefined" == typeof Worker)
return i.cores = 1,
t(null, i.cores);
if ("undefined" == typeof Blob)
return i.cores = 2,
t(null, i.cores);
var r = URL.createObjectURL(new Blob(["(", function() {
self.addEventListener("message", (function(e) {
for (var t = Date.now(), r = t + 4; Date.now() < r; )
;
self.postMessage({
st: t,
et: r
})
}
))
}
.toString(), ")()"],{
type: "application/javascript"
}));
!function e(a, n, s) {
if (0 === n) {
var o = Math.floor(a.reduce((function(e, t) {
return e + t
}
), 0) / a.length);
return i.cores = Math.max(1, o),
URL.revokeObjectURL(r),
t(null, i.cores)
}
!function(e, t) {
for (var a = [], n = [], i = 0; i < e; ++i) {
var s = new Worker(r);
s.addEventListener("message", (function(r) {
if (n.push(r.data),
n.length === e) {
for (var i = 0; i < e; ++i)
a[i].terminate();
t(null, n)
}
}
)),
a.push(s)
}
for (i = 0; i < e; ++i)
a[i].postMessage(i)
}(s, (function(t, r) {
a.push(function(e, t) {
for (var r = [], a = 0; a < e; ++a)
for (var n = t[a], i = r[a] = [], s = 0; s < e; ++s)
if (a !== s) {
var o = t[s];
(n.st > o.st && n.st < o.et || o.st > n.st && o.st < n.et) && i.push(s)
}
return r.reduce((function(e, t) {
return Math.max(e, t.length)
}
), 0)
}(s, r)),
e(a, n - 1, s)
}
))
}([], 5, 16)
}
}
).call(this, r(34))
}
, function(e, t, r) {
var a = r(0);
r(5),
r(23),
r(24),
r(1),
a.random && a.random.getBytes ? e.exports = a.random : function(t) {
var r = {}
, n = new Array(4)
, i = a.util.createBuffer();
function s() {
var e = a.prng.create(r);
return e.getBytes = function(t, r) {
return e.generate(t, r)
}
,
e.getBytesSync = function(t) {
return e.generate(t)
}
,
e
}
r.formatKey = function(e) {
var t = a.util.createBuffer(e);
return (e = new Array(4))[0] = t.getInt32(),
e[1] = t.getInt32(),
e[2] = t.getInt32(),
e[3] = t.getInt32(),
a.aes._expandKey(e, !1)
}
,
r.formatSeed = function(e) {
var t = a.util.createBuffer(e);
return (e = new Array(4))[0] = t.getInt32(),
e[1] = t.getInt32(),
e[2] = t.getInt32(),
e[3] = t.getInt32(),
e
}
,
r.cipher = function(e, t) {
return a.aes._updateBlock(e, t, n, !1),
i.putInt32(n[0]),
i.putInt32(n[1]),
i.putInt32(n[2]),
i.putInt32(n[3]),
i.getBytes()
}
,
r.increment = function(e) {
return ++e[3],
e
}
,
r.md = a.md.sha256;
var o = s()
, c = null
, u = a.util.globalScope
, l = u.crypto || u.msCrypto;
if (l && l.getRandomValues && (c = function(e) {
return l.getRandomValues(e)
}
),
a.options.usePureJavaScript || !a.util.isNodejs && !c) {
if ("undefined" == typeof window || window.document,
o.collectInt(+new Date, 32),
"undefined" != typeof navigator) {
var p = "";
for (var f in navigator)
try {
"string" == typeof navigator[f] && (p += navigator[f])
} catch (e) {}
o.collect(p),
p = null
}
t && (t().mousemove((function(e) {
o.collectInt(e.clientX, 16),
o.collectInt(e.clientY, 16)
}
)),
t().keypress((function(e) {
o.collectInt(e.charCode, 8)
}
)))
}
if (a.random)
for (var f in o)
a.random[f] = o[f];
else
a.random = o;
a.random.createInstance = s,
e.exports = a.random
}("undefined" != typeof jQuery ? jQuery : null)
}
, function(e, t, r) {
var a = r(0);
r(1),
r(6);
var n = e.exports = a.asn1 = a.asn1 || {};
function i(e, t, r) {
if (r > t) {
var a = new Error("Too few bytes to parse DER.");
throw a.available = e.length(),
a.remaining = t,
a.requested = r,
a
}
}
n.Class = {
UNIVERSAL: 0,
APPLICATION: 64,
CONTEXT_SPECIFIC: 128,
PRIVATE: 192
},
n.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
},
n.create = function(e, t, r, i, s) {
if (a.util.isArray(i)) {
for (var o = [], c = 0; c < i.length; ++c)
void 0 !== i[c] && o.push(i[c]);
i = o
}
var u = {
tagClass: e,
type: t,
constructed: r,
composed: r || a.util.isArray(i),
value: i
};
return s && "bitStringContents"in s && (u.bitStringContents = s.bitStringContents,
u.original = n.copy(u)),
u
}
,
n.copy = function(e, t) {
var r;
if (a.util.isArray(e)) {
r = [];
for (var i = 0; i < e.length; ++i)
r.push(n.copy(e[i], t));
return r
}
return "string" == typeof e ? e : (r = {
tagClass: e.tagClass,
type: e.type,
constructed: e.constructed,
composed: e.composed,
value: n.copy(e.value, t)
},
t && !t.excludeBitStringContents && (r.bitStringContents = e.bitStringContents),
r)
}
,
n.equals = function(e, t, r) {
if (a.util.isArray(e)) {
if (!a.util.isArray(t))
return !1;
if (e.length !== t.length)
return !1;
for (var i = 0; i < e.length; ++i)
if (!n.equals(e[i], t[i]))
return !1;
return !0
}
if (typeof e != typeof t)
return !1;
if ("string" == typeof e)
return e === t;
var s = e.tagClass === t.tagClass && e.type === t.type && e.constructed === t.constructed && e.composed === t.composed && n.equals(e.value, t.value);
return r && r.includeBitStringContents && (s = s && e.bitStringContents === t.bitStringContents),
s
}
,
n.getBerValueLength = function(e) {
var t = e.getByte();
if (128 !== t)
return 128 & t ? e.getInt((127 & t) << 3) : t
}
;
n.fromDer = function(e, t) {
void 0 === t && (t = {
strict: !0,
parseAllBytes: !0,
decodeBitStrings: !0
}),
"boolean" == typeof t && (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),
"string" == typeof e && (e = a.util.createBuffer(e));
var r = e.length()
, s = function e(t, r, a, s) {
var o;
i(t, r, 2);
var c = t.getByte();
r--;
var u = 192 & c
, l = 31 & c;
o = t.length();
var p, f, h = function(e, t) {
var r = e.getByte();
if (t--,
128 !== r) {
var a;
if (128 & r) {
var n = 127 & r;
i(e, t, n),
a = e.getInt(n << 3)
} else
a = r;
if (a < 0)
throw new Error("Negative length: " + a);
return a
}
}(t, r);
if (r -= o - t.length(),
void 0 !== h && h > r) {
if (s.strict) {
var d = new Error("Too few bytes to read ASN.1 value.");
throw d.available = t.length(),
d.remaining = r,
d.requested = h,
d
}
h = r
}
var y = 32 == (32 & c);
if (y)
if (p = [],
void 0 === h)
for (; ; ) {
if (i(t, r, 2),
t.bytes(2) === String.fromCharCode(0, 0)) {
t.getBytes(2),
r -= 2;
break
}
o = t.length(),
p.push(e(t, r, a + 1, s)),
r -= o - t.length()
}
else
for (; h > 0; )
o = t.length(),
p.push(e(t, h, a + 1, s)),
r -= o - t.length(),
h -= o - t.length();
void 0 === p && u === n.Class.UNIVERSAL && l === n.Type.BITSTRING && (f = t.bytes(h));
if (void 0 === p && s.decodeBitStrings && u === n.Class.UNIVERSAL && l === n.Type.BITSTRING && h > 1) {
var g = t.read
, v = r
, m = 0;
if (l === n.Type.BITSTRING && (i(t, r, 1),
m = t.getByte(),
r--),
0 === m)
try {
o = t.length();
var C = e(t, r, a + 1, {
strict: !0,
decodeBitStrings: !0
})
, E = o - t.length();
r -= E,
l == n.Type.BITSTRING && E++;
var S = C.tagClass;
E !== h || S !== n.Class.UNIVERSAL && S !== n.Class.CONTEXT_SPECIFIC || (p = [C])
} catch (e) {}
void 0 === p && (t.read = g,
r = v)
}
if (void 0 === p) {
if (void 0 === h) {
if (s.strict)
throw new Error("Non-constructed ASN.1 object of indefinite length.");
h = r
}
if (l === n.Type.BMPSTRING)
for (p = ""; h > 0; h -= 2)
i(t, r, 2),
p += String.fromCharCode(t.getInt16()),
r -= 2;
else
p = t.getBytes(h),
r -= h
}
var T = void 0 === f ? null : {
bitStringContents: f
};
return n.create(u, l, y, p, T)
}(e, e.length(), 0, t);
if (t.parseAllBytes && 0 !== e.length()) {
var o = new Error("Unparsed DER bytes remain after ASN.1 parsing.");
throw o.byteCount = r,
o.remaining = e.length(),
o
}
return s
}
,
n.toDer = function(e) {
var t = a.util.createBuffer()
, r = e.tagClass | e.type
, i = a.util.createBuffer()
, s = !1;
if ("bitStringContents"in e && (s = !0,
e.original && (s = n.equals(e, e.original))),
s)
i.putBytes(e.bitStringContents);
else if (e.composed) {
e.constructed ? r |= 32 : i.putByte(0);
for (var o = 0; o < e.value.length; ++o)
void 0 !== e.value[o] && i.putBuffer(n.toDer(e.value[o]))
} else if (e.type === n.Type.BMPSTRING)
for (o = 0; o < e.value.length; ++o)
i.putInt16(e.value.charCodeAt(o));
else
e.type === n.Type.INTEGER && e.value.length > 1 && (0 === e.value.charCodeAt(0) && 0 == (128 & e.value.charCodeAt(1)) || 255 === e.value.charCodeAt(0) && 128 == (128 & e.value.charCodeAt(1))) ? i.putBytes(e.value.substr(1)) : i.putBytes(e.value);
if (t.putByte(r),
i.length() <= 127)
t.putByte(127 & i.length());
else {
var c = i.length()
, u = "";
do {
u += String.fromCharCode(255 & c),
c >>>= 8
} while (c > 0);
t.putByte(128 | u.length);
for (o = u.length - 1; o >= 0; --o)
t.putByte(u.charCodeAt(o))
}
return t.putBuffer(i),
t
}
,
n.oidToDer = function(e) {
var t, r, n, i, s = e.split("."), o = a.util.createBuffer();
o.putByte(40 * parseInt(s[0], 10) + parseInt(s[1], 10));
for (var c = 2; c < s.length; ++c) {
t = !0,
r = [],
n = parseInt(s[c], 10);
do {
i = 127 & n,
n >>>= 7,
t || (i |= 128),
r.push(i),
t = !1
} while (n > 0);
for (var u = r.length - 1; u >= 0; --u)
o.putByte(r[u])
}
return o
}
,
n.derToOid = function(e) {
var t;
"string" == typeof e && (e = a.util.createBuffer(e));
var r = e.getByte();
t = Math.floor(r / 40) + "." + r % 40;
for (var n = 0; e.length() > 0; )
n <<= 7,
128 & (r = e.getByte()) ? n += 127 & r : (t += "." + (n + r),
n = 0);
return t
}
,
n.utcTimeToDate = function(e) {
var t = new Date
, r = parseInt(e.substr(0, 2), 10);
r = r >= 50 ? 1900 + r : 2e3 + r;
var a = parseInt(e.substr(2, 2), 10) - 1
, n = parseInt(e.substr(4, 2), 10)
, i = parseInt(e.substr(6, 2), 10)
, s = parseInt(e.substr(8, 2), 10)
, o = 0;
if (e.length > 11) {
var c = e.charAt(10)
, u = 10;
"+" !== c && "-" !== c && (o = parseInt(e.substr(10, 2), 10),
u += 2)
}
if (t.setUTCFullYear(r, a, n),
t.setUTCHours(i, s, o, 0),
u && ("+" === (c = e.charAt(u)) || "-" === c)) {
var l = 60 * parseInt(e.substr(u + 1, 2), 10) + parseInt(e.substr(u + 4, 2), 10);
l *= 6e4,
"+" === c ? t.setTime(+t - l) : t.setTime(+t + l)
}
return t
}
,
n.generalizedTimeToDate = function(e) {
var t = new Date
, r = parseInt(e.substr(0, 4), 10)
, a = parseInt(e.substr(4, 2), 10) - 1
, n = parseInt(e.substr(6, 2), 10)
, i = parseInt(e.substr(8, 2), 10)
, s = parseInt(e.substr(10, 2), 10)
, o = parseInt(e.substr(12, 2), 10)
, c = 0
, u = 0
, l = !1;
"Z" === e.charAt(e.length - 1) && (l = !0);
var p = e.length - 5
, f = e.charAt(p);
"+" !== f && "-" !== f || (u = 60 * parseInt(e.substr(p + 1, 2), 10) + parseInt(e.substr(p + 4, 2), 10),
u *= 6e4,
"+" === f && (u *= -1),
l = !0);
return "." === e.charAt(14) && (c = 1e3 * parseFloat(e.substr(14), 10)),
l ? (t.setUTCFullYear(r, a, n),
t.setUTCHours(i, s, o, c),
t.setTime(+t + u)) : (t.setFullYear(r, a, n),
t.setHours(i, s, o, c)),
t
}
,
n.dateToUtcTime = function(e) {
if ("string" == typeof e)
return e;
var t = ""
, r = [];
r.push(("" + e.getUTCFullYear()).substr(2)),
r.push("" + (e.getUTCMonth() + 1)),
r.push("" + e.getUTCDate()),
r.push("" + e.getUTCHours()),
r.push("" + e.getUTCMinutes()),
r.push("" + e.getUTCSeconds());
for (var a = 0; a < r.length; ++a)
r[a].length < 2 && (t += "0"),
t += r[a];
return t += "Z"
}
,
n.dateToGeneralizedTime = function(e) {
if ("string" == typeof e)
return e;
var t = ""
, r = [];
r.push("" + e.getUTCFullYear()),
r.push("" + (e.getUTCMonth() + 1)),
r.push("" + e.getUTCDate()),
r.push("" + e.getUTCHours()),
r.push("" + e.getUTCMinutes()),
r.push("" + e.getUTCSeconds());
for (var a = 0; a < r.length; ++a)
r[a].length < 2 && (t += "0"),
t += r[a];
return t += "Z"
}
,
n.integerToDer = function(e) {
var t = a.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 r = new Error("Integer too large; max is 32-bits.");
throw r.integer = e,
r
}
,
n.derToInteger = function(e) {
"string" == typeof e && (e = a.util.createBuffer(e));
var t = 8 * e.length();
if (t > 32)
throw new Error("Integer too large; max is 32-bits.");
return e.getSignedInt(t)
}
,
n.validate = function(e, t, r, i) {
var s = !1;
if (e.tagClass !== t.tagClass && void 0 !== t.tagClass || e.type !== t.type && void 0 !== t.type)
i && (e.tagClass !== t.tagClass && i.push("[" + t.name + '] Expected tag class "' + t.tagClass + '", got "' + e.tagClass + '"'),
e.type !== t.type && i.push("[" + t.name + '] Expected type "' + t.type + '", got "' + e.type + '"'));
else if (e.constructed === t.constructed || void 0 === t.constructed) {
if (s = !0,
t.value && a.util.isArray(t.value))
for (var o = 0, c = 0; s && c < t.value.length; ++c)
s = t.value[c].optional || !1,
e.value[o] && ((s = n.validate(e.value[o], t.value[c], r, i)) ? ++o : t.value[c].optional && (s = !0)),
!s && i && i.push("[" + t.name + '] Tag class "' + t.tagClass + '", type "' + t.type + '" expected value length "' + t.value.length + '", got "' + e.value.length + '"');
if (s && r)
if (t.capture && (r[t.capture] = e.value),
t.captureAsn1 && (r[t.captureAsn1] = e),
t.captureBitStringContents && "bitStringContents"in e && (r[t.captureBitStringContents] = e.bitStringContents),
t.captureBitStringValue && "bitStringContents"in e)
if (e.bitStringContents.length < 2)
r[t.captureBitStringValue] = "";
else {
if (0 !== e.bitStringContents.charCodeAt(0))
throw new Error("captureBitStringValue only supported for zero unused bits");
r[t.captureBitStringValue] = e.bitStringContents.slice(1)
}
} else
i && i.push("[" + t.name + '] Expected constructed "' + t.constructed + '", got "' + e.constructed + '"');
return s
}
;
var s = /[^\\u0000-\\u00ff]/;
n.prettyPrint = function(e, t, r) {
var i = "";
r = r || 2,
(t = t || 0) > 0 && (i += "\n");
for (var o = "", c = 0; c < t * r; ++c)
o += " ";
switch (i += o + "Tag: ",
e.tagClass) {
case n.Class.UNIVERSAL:
i += "Universal:";
break;
case n.Class.APPLICATION:
i += "Application:";
break;
case n.Class.CONTEXT_SPECIFIC:
i += "Context-Specific:";
break;
case n.Class.PRIVATE:
i += "Private:"
}
if (e.tagClass === n.Class.UNIVERSAL)
switch (i += e.type,
e.type) {
case n.Type.NONE:
i += " (None)";
break;
case n.Type.BOOLEAN:
i += " (Boolean)";
break;
case n.Type.INTEGER:
i += " (Integer)";
break;
case n.Type.BITSTRING:
i += " (Bit string)";
break;
case n.Type.OCTETSTRING:
i += " (Octet string)";
break;
case n.Type.NULL:
i += " (Null)";
break;
case n.Type.OID:
i += " (Object Identifier)";
break;
case n.Type.ODESC:
i += " (Object Descriptor)";
break;
case n.Type.EXTERNAL:
i += " (External or Instance of)";
break;
case n.Type.REAL:
i += " (Real)";
break;
case n.Type.ENUMERATED:
i += " (Enumerated)";
break;
case n.Type.EMBEDDED:
i += " (Embedded PDV)";
break;
case n.Type.UTF8:
i += " (UTF8)";
break;
case n.Type.ROID:
i += " (Relative Object Identifier)";
break;
case n.Type.SEQUENCE:
i += " (Sequence)";
break;
case n.Type.SET:
i += " (Set)";
break;
case n.Type.PRINTABLESTRING:
i += " (Printable String)";
break;
case n.Type.IA5String:
i += " (IA5String (ASCII))";
break;
case n.Type.UTCTIME:
i += " (UTC time)";
break;
case n.Type.GENERALIZEDTIME:
i += " (Generalized time)";
break;
case n.Type.BMPSTRING:
i += " (BMP String)"
}
else
i += e.type;
if (i += "\n",
i += o + "Constructed: " + e.constructed + "\n",
e.composed) {
var u = 0
, l = "";
for (c = 0; c < e.value.length; ++c)
void 0 !== e.value[c] && (u += 1,
l += n.prettyPrint(e.value[c], t + 1, r),
c + 1 < e.value.length && (l += ","));
i += o + "Sub values: " + u + l
} else {
if (i += o + "Value: ",
e.type === n.Type.OID) {
var p = n.derToOid(e.value);
i += p,
a.pki && a.pki.oids && p in a.pki.oids && (i += " (" + a.pki.oids[p] + ") ")
}
if (e.type === n.Type.INTEGER)
try {
i += n.derToInteger(e.value)
} catch (t) {
i += "0x" + a.util.bytesToHex(e.value)
}
else if (e.type === n.Type.BITSTRING) {
if (e.value.length > 1 ? i += "0x" + a.util.bytesToHex(e.value.slice(1)) : i += "(none)",
e.value.length > 0) {
var f = e.value.charCodeAt(0);
1 == f ? i += " (1 unused bit shown)" : f > 1 && (i += " (" + f + " unused bits shown)")
}
} else if (e.type === n.Type.OCTETSTRING)
s.test(e.value) || (i += "(" + e.value + ") "),
i += "0x" + a.util.bytesToHex(e.value);
else if (e.type === n.Type.UTF8)
try {
i += a.util.decodeUtf8(e.value)
} catch (t) {
if ("URI malformed" !== t.message)
throw t;
i += "0x" + a.util.bytesToHex(e.value) + " (malformed UTF8)"
}
else
e.type === n.Type.PRINTABLESTRING || e.type === n.Type.IA5String ? i += e.value : s.test(e.value) ? i += "0x" + a.util.bytesToHex(e.value) : 0 === e.value.length ? i += "[null]" : i += e.value
}
return i
}
}
, function(e, t, r) {
var a = r(0);
e.exports = a.md = a.md || {},
a.md.algorithms = a.md.algorithms || {}
}
, function(e, t, r) {
var a = r(0);
function n(e, t) {
a.cipher.registerAlgorithm(e, (function() {
return new a.aes.Algorithm(e,t)
}
))
}
r(13),
r(19),
r(1),
e.exports = a.aes = a.aes || {},
a.aes.startEncrypting = function(e, t, r, a) {
var n = d({
key: e,
output: r,
decrypt: !1,
mode: a
});
return n.start(t),
n
}
,
a.aes.createEncryptionCipher = function(e, t) {
return d({
key: e,
output: null,
decrypt: !1,
mode: t
})
}
,
a.aes.startDecrypting = function(e, t, r, a) {
var n = d({
key: e,
output: r,
decrypt: !0,
mode: a
});
return n.start(t),
n
}
,
a.aes.createDecryptionCipher = function(e, t) {
return d({
key: e,
output: null,
decrypt: !0,
mode: t
})
}
,
a.aes.Algorithm = function(e, t) {
l || p();
var r = this;
r.name = e,
r.mode = new t({
blockSize: 16,
cipher: {
encrypt: function(e, t) {
return h(r._w, e, t, !1)
},
decrypt: function(e, t) {
return h(r._w, e, t, !0)
}
}
}),
r._init = !1
}
,
a.aes.Algorithm.prototype.initialize = function(e) {
if (!this._init) {
var t, r = e.key;
if ("string" != typeof r || 16 !== r.length && 24 !== r.length && 32 !== r.length) {
if (a.util.isArray(r) && (16 === r.length || 24 === r.length || 32 === r.length)) {
t = r,
r = a.util.createBuffer();
for (var n = 0; n < t.length; ++n)
r.putByte(t[n])
}
} else
r = a.util.createBuffer(r);
if (!a.util.isArray(r)) {
t = r,
r = [];
var i = t.length();
if (16 === i || 24 === i || 32 === i) {
i >>>= 2;
for (n = 0; n < i; ++n)
r.push(t.getInt32())
}
}
if (!a.util.isArray(r) || 4 !== r.length && 6 !== r.length && 8 !== r.length)
throw new Error("Invalid key parameter.");
var s = this.mode.name
, o = -1 !== ["CFB", "OFB", "CTR", "GCM"].indexOf(s);
this._w = f(r, e.decrypt && !o),
this._init = !0
}
}
,
a.aes._expandKey = function(e, t) {
return l || p(),
f(e, t)
}
,
a.aes._updateBlock = h,
n("AES-ECB", a.cipher.modes.ecb),
n("AES-CBC", a.cipher.modes.cbc),
n("AES-CFB", a.cipher.modes.cfb),
n("AES-OFB", a.cipher.modes.ofb),
n("AES-CTR", a.cipher.modes.ctr),
n("AES-GCM", a.cipher.modes.gcm);
var i, s, o, c, u, l = !1;
function p() {
l = !0,
o = [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;
i = new Array(256),
s = new Array(256),
c = new Array(4),
u = new Array(4);
for (t = 0; t < 4; ++t)
c[t] = new Array(256),
u[t] = new Array(256);
var r, a, n, p, f, h, d, y = 0, g = 0;
for (t = 0; t < 256; ++t) {
p = (p = g ^ g << 1 ^ g << 2 ^ g << 3 ^ g << 4) >> 8 ^ 255 & p ^ 99,
i[y] = p,
s[p] = y,
h = (f = e[p]) << 24 ^ p << 16 ^ p << 8 ^ p ^ f,
d = ((r = e[y]) ^ (a = e[r]) ^ (n = e[a])) << 24 ^ (y ^ n) << 16 ^ (y ^ a ^ n) << 8 ^ y ^ r ^ n;
for (var v = 0; v < 4; ++v)
c[v][y] = h,
u[v][p] = d,
h = h << 24 | h >>> 8,
d = d << 24 | d >>> 8;
0 === y ? y = g = 1 : (y = r ^ e[e[e[r ^ n]]],
g ^= e[e[g]])
}
}
function f(e, t) {
for (var r, a = e.slice(0), n = 1, s = a.length, c = 4 * (s + 6 + 1), l = s; l < c; ++l)
r = a[l - 1],
l % s == 0 ? (r = i[r >>> 16 & 255] << 24 ^ i[r >>> 8 & 255] << 16 ^ i[255 & r] << 8 ^ i[r >>> 24] ^ o[n] << 24,
n++) : s > 6 && l % s == 4 && (r = i[r >>> 24] << 24 ^ i[r >>> 16 & 255] << 16 ^ i[r >>> 8 & 255] << 8 ^ i[255 & r]),
a[l] = a[l - s] ^ r;
if (t) {
for (var p, f = u[0], h = u[1], d = u[2], y = u[3], g = a.slice(0), v = (l = 0,
(c = a.length) - 4); l < c; l += 4,
v -= 4)
if (0 === l || l === c - 4)
g[l] = a[v],
g[l + 1] = a[v + 3],
g[l + 2] = a[v + 2],
g[l + 3] = a[v + 1];
else
for (var m = 0; m < 4; ++m)
p = a[v + m],
g[l + (3 & -m)] = f[i[p >>> 24]] ^ h[i[p >>> 16 & 255]] ^ d[i[p >>> 8 & 255]] ^ y[i[255 & p]];
a = g
}
return a
}
function h(e, t, r, a) {
var n, o, l, p, f, h, d, y, g, v, m, C, E = e.length / 4 - 1;
a ? (n = u[0],
o = u[1],
l = u[2],
p = u[3],
f = s) : (n = c[0],
o = c[1],
l = c[2],
p = c[3],
f = i),
h = t[0] ^ e[0],
d = t[a ? 3 : 1] ^ e[1],
y = t[2] ^ e[2],
g = t[a ? 1 : 3] ^ e[3];
for (var S = 3, T = 1; T < E; ++T)
v = n[h >>> 24] ^ o[d >>> 16 & 255] ^ l[y >>> 8 & 255] ^ p[255 & g] ^ e[++S],
m = n[d >>> 24] ^ o[y >>> 16 & 255] ^ l[g >>> 8 & 255] ^ p[255 & h] ^ e[++S],
C = n[y >>> 24] ^ o[g >>> 16 & 255] ^ l[h >>> 8 & 255] ^ p[255 & d] ^ e[++S],
g = n[g >>> 24] ^ o[h >>> 16 & 255] ^ l[d >>> 8 & 255] ^ p[255 & y] ^ e[++S],
h = v,
d = m,
y = C;
r[0] = f[h >>> 24] << 24 ^ f[d >>> 16 & 255] << 16 ^ f[y >>> 8 & 255] << 8 ^ f[255 & g] ^ e[++S],
r[a ? 3 : 1] = f[d >>> 24] << 24 ^ f[y >>> 16 & 255] << 16 ^ f[g >>> 8 & 255] << 8 ^ f[255 & h] ^ e[++S],
r[2] = f[y >>> 24] << 24 ^ f[g >>> 16 & 255] << 16 ^ f[h >>> 8 & 255] << 8 ^ f[255 & d] ^ e[++S],
r[a ? 1 : 3] = f[g >>> 24] << 24 ^ f[h >>> 16 & 255] << 16 ^ f[d >>> 8 & 255] << 8 ^ f[255 & y] ^ e[++S]
}
function d(e) {
var t, r = "AES-" + ((e = e || {}).mode || "CBC").toUpperCase(), n = (t = e.decrypt ? a.cipher.createDecipher(r, e.key) : a.cipher.createCipher(r, e.key)).start;
return t.start = function(e, r) {
var i = null;
r instanceof a.util.ByteBuffer && (i = r,
r = {}),
(r = r || {}).output = i,
r.iv = e,
n.call(t, r)
}
,
t
}
}
, function(e, t, r) {
var a = r(0);
a.pki = a.pki || {};
var n = e.exports = a.pki.oids = a.oids = a.oids || {};
function i(e, t) {
n[e] = t,
n[t] = e
}
function s(e, t) {
n[e] = t
}
i("1.2.840.113549.1.1.1", "rsaEncryption"),
i("1.2.840.113549.1.1.4", "md5WithRSAEncryption"),
i("1.2.840.113549.1.1.5", "sha1WithRSAEncryption"),
i("1.2.840.113549.1.1.7", "RSAES-OAEP"),
i("1.2.840.113549.1.1.8", "mgf1"),
i("1.2.840.113549.1.1.9", "pSpecified"),
i("1.2.840.113549.1.1.10", "RSASSA-PSS"),
i("1.2.840.113549.1.1.11", "sha256WithRSAEncryption"),
i("1.2.840.113549.1.1.12", "sha384WithRSAEncryption"),
i("1.2.840.113549.1.1.13", "sha512WithRSAEncryption"),
i("1.3.101.112", "EdDSA25519"),
i("1.2.840.10040.4.3", "dsa-with-sha1"),
i("1.3.14.3.2.7", "desCBC"),
i("1.3.14.3.2.26", "sha1"),
i("1.3.14.3.2.29", "sha1WithRSASignature"),
i("2.16.840.1.101.3.4.2.1", "sha256"),
i("2.16.840.1.101.3.4.2.2", "sha384"),
i("2.16.840.1.101.3.4.2.3", "sha512"),
i("2.16.840.1.101.3.4.2.4", "sha224"),
i("2.16.840.1.101.3.4.2.5", "sha512-224"),
i("2.16.840.1.101.3.4.2.6", "sha512-256"),
i("1.2.840.113549.2.2", "md2"),
i("1.2.840.113549.2.5", "md5"),
i("1.2.840.113549.1.7.1", "data"),
i("1.2.840.113549.1.7.2", "signedData"),
i("1.2.840.113549.1.7.3", "envelopedData"),
i("1.2.840.113549.1.7.4", "signedAndEnvelopedData"),
i("1.2.840.113549.1.7.5", "digestedData"),
i("1.2.840.113549.1.7.6", "encryptedData"),
i("1.2.840.113549.1.9.1", "emailAddress"),
i("1.2.840.113549.1.9.2", "unstructuredName"),
i("1.2.840.113549.1.9.3", "contentType"),
i("1.2.840.113549.1.9.4", "messageDigest"),
i("1.2.840.113549.1.9.5", "signingTime"),
i("1.2.840.113549.1.9.6", "counterSignature"),
i("1.2.840.113549.1.9.7", "challengePassword"),
i("1.2.840.113549.1.9.8", "unstructuredAddress"),
i("1.2.840.113549.1.9.14", "extensionRequest"),
i("1.2.840.113549.1.9.20", "friendlyName"),
i("1.2.840.113549.1.9.21", "localKeyId"),
i("1.2.840.113549.1.9.22.1", "x509Certificate"),
i("1.2.840.113549.1.12.10.1.1", "keyBag"),
i("1.2.840.113549.1.12.10.1.2", "pkcs8ShroudedKeyBag"),
i("1.2.840.113549.1.12.10.1.3", "certBag"),
i("1.2.840.113549.1.12.10.1.4", "crlBag"),
i("1.2.840.113549.1.12.10.1.5", "secretBag"),
i("1.2.840.113549.1.12.10.1.6", "safeContentsBag"),
i("1.2.840.113549.1.5.13", "pkcs5PBES2"),
i("1.2.840.113549.1.5.12", "pkcs5PBKDF2"),
i("1.2.840.113549.1.12.1.1", "pbeWithSHAAnd128BitRC4"),
i("1.2.840.113549.1.12.1.2", "pbeWithSHAAnd40BitRC4"),
i("1.2.840.113549.1.12.1.3", "pbeWithSHAAnd3-KeyTripleDES-CBC"),
i("1.2.840.113549.1.12.1.4", "pbeWithSHAAnd2-KeyTripleDES-CBC"),
i("1.2.840.113549.1.12.1.5", "pbeWithSHAAnd128BitRC2-CBC"),
i("1.2.840.113549.1.12.1.6", "pbewithSHAAnd40BitRC2-CBC"),
i("1.2.840.113549.2.7", "hmacWithSHA1"),
i("1.2.840.113549.2.8", "hmacWithSHA224"),
i("1.2.840.113549.2.9", "hmacWithSHA256"),
i("1.2.840.113549.2.10", "hmacWithSHA384"),
i("1.2.840.113549.2.11", "hmacWithSHA512"),
i("1.2.840.113549.3.7", "des-EDE3-CBC"),
i("2.16.840.1.101.3.4.1.2", "aes128-CBC"),
i("2.16.840.1.101.3.4.1.22", "aes192-CBC"),
i("2.16.840.1.101.3.4.1.42", "aes256-CBC"),
i("2.5.4.3", "commonName"),
i("2.5.4.4", "surname"),
i("2.5.4.5", "serialNumber"),
i("2.5.4.6", "countryName"),
i("2.5.4.7", "localityName"),
i("2.5.4.8", "stateOrProvinceName"),
i("2.5.4.9", "streetAddress"),
i("2.5.4.10", "organizationName"),
i("2.5.4.11", "organizationalUnitName"),
i("2.5.4.12", "title"),
i("2.5.4.13", "description"),
i("2.5.4.15", "businessCategory"),
i("2.5.4.17", "postalCode"),
i("2.5.4.42", "givenName"),
i("1.3.6.1.4.1.311.60.2.1.2", "jurisdictionOfIncorporationStateOrProvinceName"),
i("1.3.6.1.4.1.311.60.2.1.3", "jurisdictionOfIncorporationCountryName"),
i("2.16.840.1.113730.1.1", "nsCertType"),
i("2.16.840.1.113730.1.13", "nsComment"),
s("2.5.29.1", "authorityKeyIdentifier"),
s("2.5.29.2", "keyAttributes"),
s("2.5.29.3", "certificatePolicies"),
s("2.5.29.4", "keyUsageRestriction"),
s("2.5.29.5", "policyMapping"),
s("2.5.29.6", "subtreesConstraint"),
s("2.5.29.7", "subjectAltName"),
s("2.5.29.8", "issuerAltName"),
s("2.5.29.9", "subjectDirectoryAttributes"),
s("2.5.29.10", "basicConstraints"),
s("2.5.29.11", "nameConstraints"),
s("2.5.29.12", "policyConstraints"),
s("2.5.29.13", "basicConstraints"),
i("2.5.29.14", "subjectKeyIdentifier"),
i("2.5.29.15", "keyUsage"),
s("2.5.29.16", "privateKeyUsagePeriod"),
i("2.5.29.17", "subjectAltName"),
i("2.5.29.18", "issuerAltName"),
i("2.5.29.19", "basicConstraints"),
s("2.5.29.20", "cRLNumber"),
s("2.5.29.21", "cRLReason"),
s("2.5.29.22", "expirationDate"),
s("2.5.29.23", "instructionCode"),
s("2.5.29.24", "invalidityDate"),
s("2.5.29.25", "cRLDistributionPoints"),
s("2.5.29.26", "issuingDistributionPoint"),
s("2.5.29.27", "deltaCRLIndicator"),
s("2.5.29.28", "issuingDistributionPoint"),
s("2.5.29.29", "certificateIssuer"),
s("2.5.29.30", "nameConstraints"),
i("2.5.29.31", "cRLDistributionPoints"),
i("2.5.29.32", "certificatePolicies"),
s("2.5.29.33", "policyMappings"),
s("2.5.29.34", "policyConstraints"),
i("2.5.29.35", "authorityKeyIdentifier"),
s("2.5.29.36", "policyConstraints"),
i("2.5.29.37", "extKeyUsage"),
s("2.5.29.46", "freshestCRL"),
s("2.5.29.54", "inhibitAnyPolicy"),
i("1.3.6.1.4.1.11129.2.4.2", "timestampList"),
i("1.3.6.1.5.5.7.1.1", "authorityInfoAccess"),
i("1.3.6.1.5.5.7.3.1", "serverAuth"),
i("1.3.6.1.5.5.7.3.2", "clientAuth"),
i("1.3.6.1.5.5.7.3.3", "codeSigning"),
i("1.3.6.1.5.5.7.3.4", "emailProtection"),
i("1.3.6.1.5.5.7.3.8", "timeStamping")
}
, function(e, t, r) {
var a = r(0);
r(1);
var n = e.exports = a.pem = a.pem || {};
function i(e) {
for (var t = e.name + ": ", r = [], a = function(e, t) {
return " " + t
}, n = 0; n < e.values.length; ++n)
r.push(e.values[n].replace(/^(\S+\r\n)/, a));
t += r.join(",") + "\r\n";
var i = 0
, s = -1;
for (n = 0; n < t.length; ++n,
++i)
if (i > 65 && -1 !== s) {
var o = t[s];
"," === o ? (++s,
t = t.substr(0, s) + "\r\n " + t.substr(s)) : t = t.substr(0, s) + "\r\n" + o + t.substr(s + 1),
i = n - s - 1,
s = -1,
++n
} else
" " !== t[n] && "\t" !== t[n] && "," !== t[n] || (s = n);
return t
}
function s(e) {
return e.replace(/^\s+/, "")
}
n.encode = function(e, t) {
t = t || {};
var r, n = "-----BEGIN " + e.type + "-----\r\n";
if (e.procType && (n += i(r = {
name: "Proc-Type",
values: [String(e.procType.version), e.procType.type]
})),
e.contentDomain && (n += i(r = {
name: "Content-Domain",
values: [e.contentDomain]
})),
e.dekInfo && (r = {
name: "DEK-Info",
values: [e.dekInfo.algorithm]
},
e.dekInfo.parameters && r.values.push(e.dekInfo.parameters),
n += i(r)),
e.headers)
for (var s = 0; s < e.headers.length; ++s)
n += i(e.headers[s]);
return e.procType && (n += "\r\n"),
n += a.util.encode64(e.body, t.maxline || 64) + "\r\n",
n += "-----END " + e.type + "-----\r\n"
}
,
n.decode = function(e) {
for (var t, r = [], n = /\s*-----BEGIN ([A-Z0-9- ]+)-----\r?\n?([\x21-\x7e\s]+?(?:\r?\n\r?\n))?([:A-Za-z0-9+\/=\s]+?)-----END \1-----/g, i = /([\x21-\x7e]+):\s*([\x21-\x7e\s^:]+)/, o = /\r?\n/; t = n.exec(e); ) {
var c = t[1];
"NEW CERTIFICATE REQUEST" === c && (c = "CERTIFICATE REQUEST");
var u = {
type: c,
procType: null,
contentDomain: null,
dekInfo: null,
headers: [],
body: a.util.decode64(t[3])
};
if (r.push(u),
t[2]) {
for (var l = t[2].split(o), p = 0; t && p < l.length; ) {
for (var f = l[p].replace(/\s+$/, ""), h = p + 1; h < l.length; ++h) {
var d = l[h];
if (!/\s/.test(d[0]))
break;
f += d,
p = h
}
if (t = f.match(i)) {
for (var y = {
name: t[1],
values: []
}, g = t[2].split(","), v = 0; v < g.length; ++v)
y.values.push(s(g[v]));
if (u.procType)
if (u.contentDomain || "Content-Domain" !== y.name)
if (u.dekInfo || "DEK-Info" !== y.name)
u.headers.push(y);
else {
if (0 === y.values.length)
throw new Error('Invalid PEM formatted message. The "DEK-Info" header must have at least one subfield.');
u.dekInfo = {
algorithm: g[0],
parameters: g[1] || null
}
}
else
u.contentDomain = g[0] || "";
else {
if ("Proc-Type" !== y.name)
throw new Error('Invalid PEM formatted message. The first encapsulated header must be "Proc-Type".');
if (2 !== y.values.length)
throw new Error('Invalid PEM formatted message. The "Proc-Type" header must have two subfields.');
u.procType = {
version: g[0],
type: g[1]
}
}
}
++p
}
if ("ENCRYPTED" === u.procType && !u.dekInfo)
throw new Error('Invalid PEM formatted message. The "DEK-Info" header must be present if "Proc-Type" is "ENCRYPTED".')
}
}
if (0 === r.length)
throw new Error("Invalid PEM formatted message.");
return r
}
}
, function(e, t, r) {
var a = r(0);
r(4),
r(1),
(e.exports = a.hmac = a.hmac || {}).create = function() {
var e = null
, t = null
, r = null
, n = null
, i = {
start: function(i, s) {
if (null !== i)
if ("string" == typeof i) {
if (!((i = i.toLowerCase())in a.md.algorithms))
throw new Error('Unknown hash algorithm "' + i + '"');
t = a.md.algorithms[i].create()
} else
t = i;
if (null === s)
s = e;
else {
if ("string" == typeof s)
s = a.util.createBuffer(s);
else if (a.util.isArray(s)) {
var o = s;
s = a.util.createBuffer();
for (var c = 0; c < o.length; ++c)
s.putByte(o[c])
}
var u = s.length();
u > t.blockLength && (t.start(),
t.update(s.bytes()),
s = t.digest()),
r = a.util.createBuffer(),
n = a.util.createBuffer(),
u = s.length();
for (c = 0; c < u; ++c) {
o = s.at(c);
r.putByte(54 ^ o),
n.putByte(92 ^ o)
}
if (u < t.blockLength)
for (o = t.blockLength - u,
c = 0; c < o; ++c)
r.putByte(54),
n.putByte(92);
e = s,
r = r.bytes(),
n = n.bytes()
}
t.start(),
t.update(r)
},
update: function(e) {
t.update(e)
},
getMac: function() {
var e = t.digest().bytes();
return t.start(),
t.update(n),
t.update(e),
t.digest()
}
};
return i.digest = i.getMac,
i
}
}
, function(e, t, r) {
var a = r(0);
r(4),
r(1);
var n = e.exports = a.sha1 = a.sha1 || {};
a.md.sha1 = a.md.algorithms.sha1 = n,
n.create = function() {
s || (i = String.fromCharCode(128),
i += a.util.fillString(String.fromCharCode(0), 64),
s = !0);
var e = null
, t = a.util.createBuffer()
, r = new Array(80)
, n = {
algorithm: "sha1",
blockLength: 64,
digestLength: 20,
messageLength: 0,
fullMessageLength: null,
messageLengthSize: 8,
start: function() {
n.messageLength = 0,
n.fullMessageLength = n.messageLength64 = [];
for (var r = n.messageLengthSize / 4, i = 0; i < r; ++i)
n.fullMessageLength.push(0);
return t = a.util.createBuffer(),
e = {
h0: 1732584193,
h1: 4023233417,
h2: 2562383102,
h3: 271733878,
h4: 3285377520
},
n
}
};
return n.start(),
n.update = function(i, s) {
"utf8" === s && (i = a.util.encodeUtf8(i));
var c = i.length;
n.messageLength += c,
c = [c / 4294967296 >>> 0, c >>> 0];
for (var u = n.fullMessageLength.length - 1; u >= 0; --u)
n.fullMessageLength[u] += c[1],
c[1] = c[0] + (n.fullMessageLength[u] / 4294967296 >>> 0),
n.fullMessageLength[u] = n.fullMessageLength[u] >>> 0,
c[0] = c[1] / 4294967296 >>> 0;
return t.putBytes(i),
o(e, r, t),
(t.read > 2048 || 0 === t.length()) && t.compact(),
n
}
,
n.digest = function() {
var s = a.util.createBuffer();
s.putBytes(t.bytes());
var c, u = n.fullMessageLength[n.fullMessageLength.length - 1] + n.messageLengthSize & n.blockLength - 1;
s.putBytes(i.substr(0, n.blockLength - u));
for (var l = 8 * n.fullMessageLength[0], p = 0; p < n.fullMessageLength.length - 1; ++p)
l += (c = 8 * n.fullMessageLength[p + 1]) / 4294967296 >>> 0,
s.putInt32(l >>> 0),
l = c >>> 0;
s.putInt32(l);
var f = {
h0: e.h0,
h1: e.h1,
h2: e.h2,
h3: e.h3,
h4: e.h4
};
o(f, r, s);
var h = a.util.createBuffer();
return h.putInt32(f.h0),
h.putInt32(f.h1),
h.putInt32(f.h2),
h.putInt32(f.h3),
h.putInt32(f.h4),
h
}
,
n
}
;
var i = null
, s = !1;
function o(e, t, r) {
for (var a, n, i, s, o, c, u, l = r.length(); l >= 64; ) {
for (n = e.h0,
i = e.h1,
s = e.h2,
o = e.h3,
c = e.h4,
u = 0; u < 16; ++u)
a = r.getInt32(),
t[u] = a,
a = (n << 5 | n >>> 27) + (o ^ i & (s ^ o)) + c + 1518500249 + a,
c = o,
o = s,
s = (i << 30 | i >>> 2) >>> 0,
i = n,
n = a;
for (; u < 20; ++u)
a = (a = t[u - 3] ^ t[u - 8] ^ t[u - 14] ^ t[u - 16]) << 1 | a >>> 31,
t[u] = a,
a = (n << 5 | n >>> 27) + (o ^ i & (s ^ o)) + c + 1518500249 + a,
c = o,
o = s,
s = (i << 30 | i >>> 2) >>> 0,
i = n,
n = a;
for (; u < 32; ++u)
a = (a = t[u - 3] ^ t[u - 8] ^ t[u - 14] ^ t[u - 16]) << 1 | a >>> 31,
t[u] = a,
a = (n << 5 | n >>> 27) + (i ^ s ^ o) + c + 1859775393 + a,
c = o,
o = s,
s = (i << 30 | i >>> 2) >>> 0,
i = n,
n = a;
for (; u < 40; ++u)
a = (a = t[u - 6] ^ t[u - 16] ^ t[u - 28] ^ t[u - 32]) << 2 | a >>> 30,
t[u] = a,
a = (n << 5 | n >>> 27) + (i ^ s ^ o) + c + 1859775393 + a,
c = o,
o = s,
s = (i << 30 | i >>> 2) >>> 0,
i = n,
n = a;
for (; u < 60; ++u)
a = (a = t[u - 6] ^ t[u - 16] ^ t[u - 28] ^ t[u - 32]) << 2 | a >>> 30,
t[u] = a,
a = (n << 5 | n >>> 27) + (i & s | o & (i ^ s)) + c + 2400959708 + a,
c = o,
o = s,
s = (i << 30 | i >>> 2) >>> 0,
i = n,
n = a;
for (; u < 80; ++u)
a = (a = t[u - 6] ^ t[u - 16] ^ t[u - 28] ^ t[u - 32]) << 2 | a >>> 30,
t[u] = a,
a = (n << 5 | n >>> 27) + (i ^ s ^ o) + c + 3395469782 + a,
c = o,
o = s,
s = (i << 30 | i >>> 2) >>> 0,
i = n,
n = a;
e.h0 = e.h0 + n | 0,
e.h1 = e.h1 + i | 0,
e.h2 = e.h2 + s | 0,
e.h3 = e.h3 + o | 0,
e.h4 = e.h4 + c | 0,
l -= 64
}
}
}
, function(e, t, r) {
var a = r(0);
function n(e, t) {
a.cipher.registerAlgorithm(e, (function() {
return new a.des.Algorithm(e,t)
}
))
}
r(13),
r(19),
r(1),
e.exports = a.des = a.des || {},
a.des.startEncrypting = function(e, t, r, a) {
var n = d({
key: e,
output: r,
decrypt: !1,
mode: a || (null === t ? "ECB" : "CBC")
});
return n.start(t),
n
}
,
a.des.createEncryptionCipher = function(e, t) {
return d({
key: e,
output: null,
decrypt: !1,
mode: t
})
}
,
a.des.startDecrypting = function(e, t, r, a) {
var n = d({
key: e,
output: r,
decrypt: !0,
mode: a || (null === t ? "ECB" : "CBC")
});
return n.start(t),
n
}
,
a.des.createDecryptionCipher = function(e, t) {
return d({
key: e,
output: null,
decrypt: !0,
mode: t
})
}
,
a.des.Algorithm = function(e, t) {
var r = this;
r.name = e,
r.mode = new t({
blockSize: 8,
cipher: {
encrypt: function(e, t) {
return h(r._keys, e, t, !1)
},
decrypt: function(e, t) {
return h(r._keys, e, t, !0)
}
}
}),
r._init = !1
}
,
a.des.Algorithm.prototype.initialize = function(e) {
if (!this._init) {
var t = a.util.createBuffer(e.key);
if (0 === this.name.indexOf("3DES") && 24 !== t.length())
throw new Error("Invalid Triple-DES key size: " + 8 * t.length());
this._keys = function(e) {
for (var t, r = [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], n = [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], o = [0, 1024, 32, 1056, 0, 1024, 32, 1056, 33554432, 33555456, 33554464, 33555488, 33554432, 33555456, 33554464, 33555488], c = [0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746, 0, 268435456, 524288, 268959744, 2, 268435458, 524290, 268959746], u = [0, 65536, 2048, 67584, 536870912, 536936448, 536872960, 536938496, 131072, 196608, 133120, 198656, 537001984, 537067520, 537004032, 537069568], l = [0, 262144, 0, 262144, 2, 262146, 2, 262146, 33554432, 33816576, 33554432, 33816576, 33554434, 33816578, 33554434, 33816578], p = [0, 268435456, 8, 268435464, 0, 268435456, 8, 268435464, 1024, 268436480, 1032, 268436488, 1024, 268436480, 1032, 268436488], f = [0, 32, 0, 32, 1048576, 1048608, 1048576, 1048608, 8192, 8224, 8192, 8224, 1056768, 1056800, 1056768, 1056800], h = [0, 16777216, 512, 16777728, 2097152, 18874368, 2097664, 18874880, 67108864, 83886080, 67109376, 83886592, 69206016, 85983232, 69206528, 85983744], d = [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], g = e.length() > 8 ? 3 : 1, v = [], m = [0, 0, 1, 1, 1, 1, 1, 1, 0, 1, 1, 1, 1, 1, 1, 0], C = 0, E = 0; E < g; E++) {
var S = e.getInt32()
, T = e.getInt32();
S ^= (t = 252645135 & (S >>> 4 ^ T)) << 4,
S ^= t = 65535 & ((T ^= t) >>> -16 ^ S),
S ^= (t = 858993459 & (S >>> 2 ^ (T ^= t << -16))) << 2,
S ^= t = 65535 & ((T ^= t) >>> -16 ^ S),
S ^= (t = 1431655765 & (S >>> 1 ^ (T ^= t << -16))) << 1,
S ^= t = 16711935 & ((T ^= t) >>> 8 ^ S),
t = (S ^= (t = 1431655765 & (S >>> 1 ^ (T ^= t << 8))) << 1) << 8 | (T ^= t) >>> 20 & 240,
S = T << 24 | T << 8 & 16711680 | T >>> 8 & 65280 | T >>> 24 & 240,
T = t;
for (var I = 0; I < m.length; ++I) {
m[I] ? (S = S << 2 | S >>> 26,
T = T << 2 | T >>> 26) : (S = S << 1 | S >>> 27,
T = T << 1 | T >>> 27);
var A = r[(S &= -15) >>> 28] | a[S >>> 24 & 15] | n[S >>> 20 & 15] | i[S >>> 16 & 15] | s[S >>> 12 & 15] | o[S >>> 8 & 15] | c[S >>> 4 & 15]
, B = u[(T &= -15) >>> 28] | l[T >>> 24 & 15] | p[T >>> 20 & 15] | f[T >>> 16 & 15] | h[T >>> 12 & 15] | d[T >>> 8 & 15] | y[T >>> 4 & 15];
t = 65535 & (B >>> 16 ^ A),
v[C++] = A ^ t,
v[C++] = B ^ t << 16
}
}
return v
}(t),
this._init = !0
}
}
,
n("DES-ECB", a.cipher.modes.ecb),
n("DES-CBC", a.cipher.modes.cbc),
n("DES-CFB", a.cipher.modes.cfb),
n("DES-OFB", a.cipher.modes.ofb),
n("DES-CTR", a.cipher.modes.ctr),
n("3DES-ECB", a.cipher.modes.ecb),
n("3DES-CBC", a.cipher.modes.cbc),
n("3DES-CFB", a.cipher.modes.cfb),
n("3DES-OFB", a.cipher.modes.ofb),
n("3DES-CTR", a.cipher.modes.ctr);
var i = [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]
, s = [-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]
, o = [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]
, c = [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]
, u = [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]
, l = [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]
, p = [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]
, f = [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 h(e, t, r, a) {
var n, h, d = 32 === e.length ? 3 : 9;
n = 3 === d ? a ? [30, -2, -2] : [0, 32, 2] : a ? [94, 62, -2, 32, 64, 2, 30, -2, -2] : [0, 32, 2, 62, 30, -2, 64, 96, 2];
var y = t[0]
, g = t[1];
y ^= (h = 252645135 & (y >>> 4 ^ g)) << 4,
y ^= (h = 65535 & (y >>> 16 ^ (g ^= h))) << 16,
y ^= h = 858993459 & ((g ^= h) >>> 2 ^ y),
y ^= h = 16711935 & ((g ^= h << 2) >>> 8 ^ y),
y = (y ^= (h = 1431655765 & (y >>> 1 ^ (g ^= h << 8))) << 1) << 1 | y >>> 31,
g = (g ^= h) << 1 | g >>> 31;
for (var v = 0; v < d; v += 3) {
for (var m = n[v + 1], C = n[v + 2], E = n[v]; E != m; E += C) {
var S = g ^ e[E]
, T = (g >>> 4 | g << 28) ^ e[E + 1];
h = y,
y = g,
g = h ^ (s[S >>> 24 & 63] | c[S >>> 16 & 63] | l[S >>> 8 & 63] | f[63 & S] | i[T >>> 24 & 63] | o[T >>> 16 & 63] | u[T >>> 8 & 63] | p[63 & T])
}
h = y,
y = g,
g = h
}
g = g >>> 1 | g << 31,
g ^= h = 1431655765 & ((y = y >>> 1 | y << 31) >>> 1 ^ g),
g ^= (h = 16711935 & (g >>> 8 ^ (y ^= h << 1))) << 8,
g ^= (h = 858993459 & (g >>> 2 ^ (y ^= h))) << 2,
g ^= h = 65535 & ((y ^= h) >>> 16 ^ g),
g ^= h = 252645135 & ((y ^= h << 16) >>> 4 ^ g),
y ^= h << 4,
r[0] = y,
r[1] = g
}
function d(e) {
var t, r = "DES-" + ((e = e || {}).mode || "CBC").toUpperCase(), n = (t = e.decrypt ? a.cipher.createDecipher(r, e.key) : a.cipher.createCipher(r, e.key)).start;
return t.start = function(e, r) {
var i = null;
r instanceof a.util.ByteBuffer && (i = r,
r = {}),
(r = r || {}).output = i,
r.iv = e,
n.call(t, r)
}
,
t
}
}
, function(e, t, r) {
var a = r(0);
if (r(3),
r(12),
r(6),
r(26),
r(27),
r(2),
r(1),
void 0 === n)
var n = a.jsbn.BigInteger;
var i = a.util.isNodejs ? r(16) : null
, s = a.asn1
, o = a.util;
a.pki = a.pki || {},
e.exports = a.pki.rsa = a.rsa = a.rsa || {};
var c = a.pki
, u = [6, 4, 2, 4, 2, 4, 6, 2]
, l = {
name: "PrivateKeyInfo",
tagClass: s.Class.UNIVERSAL,
type: s.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PrivateKeyInfo.version",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "privateKeyVersion"
}, {
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"
}]
}, {
name: "PrivateKeyInfo",
tagClass: s.Class.UNIVERSAL,
type: s.Type.OCTETSTRING,
constructed: !1,
capture: "privateKey"
}]
}
, p = {
name: "RSAPrivateKey",
tagClass: s.Class.UNIVERSAL,
type: s.Type.SEQUENCE,
constructed: !0,
value: [{
name: "RSAPrivateKey.version",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "privateKeyVersion"
}, {
name: "RSAPrivateKey.modulus",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "privateKeyModulus"
}, {
name: "RSAPrivateKey.publicExponent",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "privateKeyPublicExponent"
}, {
name: "RSAPrivateKey.privateExponent",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "privateKeyPrivateExponent"
}, {
name: "RSAPrivateKey.prime1",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "privateKeyPrime1"
}, {
name: "RSAPrivateKey.prime2",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "privateKeyPrime2"
}, {
name: "RSAPrivateKey.exponent1",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "privateKeyExponent1"
}, {
name: "RSAPrivateKey.exponent2",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "privateKeyExponent2"
}, {
name: "RSAPrivateKey.coefficient",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "privateKeyCoefficient"
}]
}
, f = {
name: "RSAPublicKey",
tagClass: s.Class.UNIVERSAL,
type: s.Type.SEQUENCE,
constructed: !0,
value: [{
name: "RSAPublicKey.modulus",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "publicKeyModulus"
}, {
name: "RSAPublicKey.exponent",
tagClass: s.Class.UNIVERSAL,
type: s.Type.INTEGER,
constructed: !1,
capture: "publicKeyExponent"
}]
}
, h = a.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"
}]
}, {
name: "SubjectPublicKeyInfo.subjectPublicKey",
tagClass: s.Class.UNIVERSAL,
type: s.Type.BITSTRING,
constructed: !1,
value: [{
name: "SubjectPublicKeyInfo.subjectPublicKey.RSAPublicKey",
tagClass: s.Class.UNIVERSAL,
type: s.Type.SEQUENCE,
constructed: !0,
optional: !0,
captureAsn1: "rsaPublicKey"
}]
}]
}
, d = {
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"
}, {
name: "DigestInfo.DigestAlgorithm.parameters",
tagClass: s.Class.UNIVERSAL,
type: s.Type.NULL,
capture: "parameters",
optional: !0,
constructed: !1
}]
}, {
name: "DigestInfo.digest",
tagClass: s.Class.UNIVERSAL,
type: s.Type.OCTETSTRING,
constructed: !1,
capture: "digest"
}]
}
, y = function(e) {
var t;
if (!(e.algorithm in c.oids)) {
var r = new Error("Unknown message digest algorithm.");
throw r.algorithm = e.algorithm,
r
}
t = c.oids[e.algorithm];
var a = s.oidToDer(t).getBytes()
, n = s.create(s.Class.UNIVERSAL, s.Type.SEQUENCE, !0, [])
, i = s.create(s.Class.UNIVERSAL, s.Type.SEQUENCE, !0, []);
i.value.push(s.create(s.Class.UNIVERSAL, s.Type.OID, !1, a)),
i.value.push(s.create(s.Class.UNIVERSAL, s.Type.NULL, !1, ""));
var o = s.create(s.Class.UNIVERSAL, s.Type.OCTETSTRING, !1, e.digest().getBytes());
return n.value.push(i),
n.value.push(o),
s.toDer(n).getBytes()
}
, g = function(e, t, r) {
if (r)
return e.modPow(t.e, t.n);
if (!t.p || !t.q)
return e.modPow(t.d, t.n);
var i;
t.dP || (t.dP = t.d.mod(t.p.subtract(n.ONE))),
t.dQ || (t.dQ = t.d.mod(t.q.subtract(n.ONE))),
t.qInv || (t.qInv = t.q.modInverse(t.p));
do {
i = new n(a.util.bytesToHex(a.random.getBytes(t.n.bitLength() / 8)),16)
} while (i.compareTo(t.n) >= 0 || !i.gcd(t.n).equals(n.ONE));
for (var s = (e = e.multiply(i.modPow(t.e, t.n)).mod(t.n)).mod(t.p).modPow(t.dP, t.p), o = e.mod(t.q).modPow(t.dQ, t.q); s.compareTo(o) < 0; )
s = s.add(t.p);
var c = s.subtract(o).multiply(t.qInv).mod(t.p).multiply(t.q).add(o);
return c = c.multiply(i.modInverse(t.n)).mod(t.n)
};
function v(e, t, r) {
var n = a.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
}
n.putByte(0),
n.putByte(r);
var o, c = i - 3 - e.length;
if (0 === r || 1 === r) {
o = 0 === r ? 0 : 255;
for (var u = 0; u < c; ++u)
n.putByte(o)
} else
for (; c > 0; ) {
var l = 0
, p = a.random.getBytes(c);
for (u = 0; u < c; ++u)
0 === (o = p.charCodeAt(u)) ? ++l : n.putByte(o);
c = l
}
return n.putByte(0),
n.putBytes(e),
n
}
function m(e, t, r, n) {
var i = Math.ceil(t.n.bitLength() / 8)
, s = a.util.createBuffer(e)
, o = s.getByte()
, c = s.getByte();
if (0 !== o || r && 0 !== c && 1 !== c || !r && 2 != c || r && 0 === c && void 0 === n)
throw new Error("Encryption block is invalid.");
var u = 0;
if (0 === c) {
u = i - 3 - n;
for (var l = 0; l < u; ++l)
if (0 !== s.getByte())
throw new Error("Encryption block is invalid.")
} else if (1 === c)
for (u = 0; s.length() > 1; ) {
if (255 !== s.getByte()) {
--s.read;
break
}
++u
}
else if (2 === c)
for (u = 0; s.length() > 1; ) {
if (0 === s.getByte()) {
--s.read;
break
}
++u
}
if (0 !== s.getByte() || u !== i - 3 - s.length())
throw new Error("Encryption block is invalid.");
return s.getBytes()
}
function C(e, t, r) {
"function" == typeof t && (r = t,
t = {});
var i = {
algorithm: {
name: (t = t || {}).algorithm || "PRIMEINC",
options: {
workers: t.workers || 2,
workLoad: t.workLoad || 100,
workerScript: t.workerScript
}
}
};
function s() {
o(e.pBits, (function(t, a) {
return t ? r(t) : (e.p = a,
null !== e.q ? u(t, e.q) : void o(e.qBits, u))
}
))
}
function o(e, t) {
a.prime.generateProbablePrime(e, i, t)
}
function u(t, a) {
if (t)
return r(t);
if (e.q = a,
e.p.compareTo(e.q) < 0) {
var i = e.p;
e.p = e.q,
e.q = i
}
if (0 !== e.p.subtract(n.ONE).gcd(e.e).compareTo(n.ONE))
return e.p = null,
void s();
if (0 !== e.q.subtract(n.ONE).gcd(e.e).compareTo(n.ONE))
return e.q = null,
void o(e.qBits, u);
if (e.p1 = e.p.subtract(n.ONE),
e.q1 = e.q.subtract(n.ONE),
e.phi = e.p1.multiply(e.q1),
0 !== e.phi.gcd(e.e).compareTo(n.ONE))
return e.p = e.q = null,
void s();
if (e.n = e.p.multiply(e.q),
e.n.bitLength() !== e.bits)
return e.q = null,
void o(e.qBits, u);
var l = e.e.modInverse(e.phi);
e.keys = {
privateKey: c.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: c.rsa.setPublicKey(e.n, e.e)
},
r(null, e.keys)
}
"prng"in t && (i.prng = t.prng),
s()
}
function E(e) {
var t = e.toString(16);
t[0] >= "8" && (t = "00" + t);
var r = a.util.hexToBytes(t);
return r.length > 1 && (0 === r.charCodeAt(0) && 0 == (128 & r.charCodeAt(1)) || 255 === r.charCodeAt(0) && 128 == (128 & r.charCodeAt(1))) ? r.substr(1) : r
}
function S(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 T(e) {
return a.util.isNodejs && "function" == typeof i[e]
}
function I(e) {
return void 0 !== o.globalScope && "object" == typeof o.globalScope.crypto && "object" == typeof o.globalScope.crypto.subtle && "function" == typeof o.globalScope.crypto.subtle[e]
}
function A(e) {
return void 0 !== o.globalScope && "object" == typeof o.globalScope.msCrypto && "object" == typeof o.globalScope.msCrypto.subtle && "function" == typeof o.globalScope.msCrypto.subtle[e]
}
function B(e) {
for (var t = a.util.hexToBytes(e.toString(16)), r = new Uint8Array(t.length), n = 0; n < t.length; ++n)
r[n] = t.charCodeAt(n);
return r
}
c.rsa.encrypt = function(e, t, r) {
var i, s = r, o = Math.ceil(t.n.bitLength() / 8);
!1 !== r && !0 !== r ? (s = 2 === r,
i = v(e, t, r)) : (i = a.util.createBuffer()).putBytes(e);
for (var c = new n(i.toHex(),16), u = g(c, t, s).toString(16), l = a.util.createBuffer(), p = o - Math.ceil(u.length / 2); p > 0; )
l.putByte(0),
--p;
return l.putBytes(a.util.hexToBytes(u)),
l.getBytes()
}
,
c.rsa.decrypt = function(e, t, r, i) {
var s = Math.ceil(t.n.bitLength() / 8);
if (e.length !== s) {
var o = new Error("Encrypted message length is invalid.");
throw o.length = e.length,
o.expected = s,
o
}
var c = new n(a.util.createBuffer(e).toHex(),16);
if (c.compareTo(t.n) >= 0)
throw new Error("Encrypted message is invalid.");
for (var u = g(c, t, r).toString(16), l = a.util.createBuffer(), p = s - Math.ceil(u.length / 2); p > 0; )
l.putByte(0),
--p;
return l.putBytes(a.util.hexToBytes(u)),
!1 !== i ? m(l.getBytes(), t, r) : l.getBytes()
}
,
c.rsa.createKeyPairGenerationState = function(e, t, r) {
"string" == typeof e && (e = parseInt(e, 10)),
e = e || 2048;
var i, s = (r = r || {}).prng || a.random, o = {
nextBytes: function(e) {
for (var t = s.getBytesSync(e.length), r = 0; r < e.length; ++r)
e[r] = t.charCodeAt(r)
}
}, c = r.algorithm || "PRIMEINC";
if ("PRIMEINC" !== c)
throw new Error("Invalid key generation algorithm: " + c);
return (i = {
algorithm: c,
state: 0,
bits: e,
rng: o,
eInt: t || 65537,
e: new n(null),
p: null,
q: null,
qBits: e >> 1,
pBits: e - (e >> 1),
pqState: 0,
num: null,
keys: null
}).e.fromInt(i.eInt),
i
}
,
c.rsa.stepKeyPairGenerationState = function(e, t) {
"algorithm"in e || (e.algorithm = "PRIMEINC");
var r = new n(null);
r.fromInt(30);
for (var a, i = 0, s = function(e, t) {
return e | t
}, o = +new Date, l = 0; null === e.keys && (t <= 0 || l < t); ) {
if (0 === e.state) {
var p = null === e.p ? e.pBits : e.qBits
, f = p - 1;
0 === e.pqState ? (e.num = new n(p,e.rng),
e.num.testBit(f) || e.num.bitwiseTo(n.ONE.shiftLeft(f), s, e.num),
e.num.dAddOffset(31 - e.num.mod(r).byteValue(), 0),
i = 0,
++e.pqState) : 1 === e.pqState ? e.num.bitLength() > p ? e.pqState = 0 : e.num.isProbablePrime(S(e.num.bitLength())) ? ++e.pqState : e.num.dAddOffset(u[i++ % 8], 0) : 2 === e.pqState ? e.pqState = 0 === e.num.subtract(n.ONE).gcd(e.e).compareTo(n.ONE) ? 3 : 0 : 3 === e.pqState && (e.pqState = 0,
null === e.p ? e.p = e.num : e.q = e.num,
null !== e.p && null !== e.q && ++e.state,
e.num = null)
} else if (1 === e.state)
e.p.compareTo(e.q) < 0 && (e.num = e.p,
e.p = e.q,
e.q = e.num),
++e.state;
else if (2 === e.state)
e.p1 = e.p.subtract(n.ONE),
e.q1 = e.q.subtract(n.ONE),
e.phi = e.p1.multiply(e.q1),
++e.state;
else if (3 === e.state)
0 === e.phi.gcd(e.e).compareTo(n.ONE) ? ++e.state : (e.p = null,
e.q = null,
e.state = 0);
else if (4 === e.state)
e.n = e.p.multiply(e.q),
e.n.bitLength() === e.bits ? ++e.state : (e.q = null,
e.state = 0);
else if (5 === e.state) {
var h = e.e.modInverse(e.phi);
e.keys = {
privateKey: c.rsa.setPrivateKey(e.n, e.e, h, e.p, e.q, h.mod(e.p1), h.mod(e.q1), e.q.modInverse(e.p)),
publicKey: c.rsa.setPublicKey(e.n, e.e)
}
}
l += (a = +new Date) - o,
o = a
}
return null !== e.keys
}
,
c.rsa.generateKeyPair = function(e, t, r, n) {
if (1 === arguments.length ? "object" == typeof e ? (r = e,
e = void 0) : "function" == typeof e && (n = e,
e = void 0) : 2 === arguments.length ? "number" == typeof e ? "function" == typeof t ? (n = t,
t = void 0) : "number" != typeof t && (r = t,
t = void 0) : (r = e,
n = t,
e = void 0,
t = void 0) : 3 === arguments.length && ("number" == typeof t ? "function" == typeof r && (n = r,
r = void 0) : (n = r,
r = t,
t = void 0)),
r = r || {},
void 0 === e && (e = r.bits || 2048),
void 0 === t && (t = r.e || 65537),
!a.options.usePureJavaScript && !r.prng && e >= 256 && e <= 16384 && (65537 === t || 3 === t))
if (n) {
if (T("generateKeyPair"))
return i.generateKeyPair("rsa", {
modulusLength: e,
publicExponent: t,
publicKeyEncoding: {
type: "spki",
format: "pem"
},
privateKeyEncoding: {
type: "pkcs8",
format: "pem"
}
}, (function(e, t, r) {
if (e)
return n(e);
n(null, {
privateKey: c.privateKeyFromPem(r),
publicKey: c.publicKeyFromPem(t)
})
}
));
if (I("generateKey") && I("exportKey"))
return o.globalScope.crypto.subtle.generateKey({
name: "RSASSA-PKCS1-v1_5",
modulusLength: e,
publicExponent: B(t),
hash: {
name: "SHA-256"
}
}, !0, ["sign", "verify"]).then((function(e) {
return o.globalScope.crypto.subtle.exportKey("pkcs8", e.privateKey)
}
)).then(void 0, (function(e) {
n(e)
}
)).then((function(e) {
if (e) {
var t = c.privateKeyFromAsn1(s.fromDer(a.util.createBuffer(e)));
n(null, {
privateKey: t,
publicKey: c.setRsaPublicKey(t.n, t.e)
})
}
}
));
if (A("generateKey") && A("exportKey")) {
var u = o.globalScope.msCrypto.subtle.generateKey({
name: "RSASSA-PKCS1-v1_5",
modulusLength: e,
publicExponent: B(t),
hash: {
name: "SHA-256"
}
}, !0, ["sign", "verify"]);
return u.oncomplete = function(e) {
var t = e.target.result
, r = o.globalScope.msCrypto.subtle.exportKey("pkcs8", t.privateKey);
r.oncomplete = function(e) {
var t = e.target.result
, r = c.privateKeyFromAsn1(s.fromDer(a.util.createBuffer(t)));
n(null, {
privateKey: r,
publicKey: c.setRsaPublicKey(r.n, r.e)
})
}
,
r.onerror = function(e) {
n(e)
}
}
,
void (u.onerror = function(e) {
n(e)
}
)
}
} else if (T("generateKeyPairSync")) {
var l = i.generateKeyPairSync("rsa", {
modulusLength: e,
publicExponent: t,
publicKeyEncoding: {
type: "spki",
format: "pem"
},
privateKeyEncoding: {
type: "pkcs8",
format: "pem"
}
});
return {
privateKey: c.privateKeyFromPem(l.privateKey),
publicKey: c.publicKeyFromPem(l.publicKey)
}
}
var p = c.rsa.createKeyPairGenerationState(e, t, r);
if (!n)
return c.rsa.stepKeyPairGenerationState(p, 0),
p.keys;
C(p, r, n)
}
,
c.setRsaPublicKey = c.rsa.setPublicKey = function(e, t) {
var r = {
n: e,
e: t,
encrypt: function(e, t, n) {
if ("string" == typeof t ? t = t.toUpperCase() : void 0 === t && (t = "RSAES-PKCS1-V1_5"),
"RSAES-PKCS1-V1_5" === t)
t = {
encode: function(e, t, r) {
return v(e, t, 2).getBytes()
}
};
else if ("RSA-OAEP" === t || "RSAES-OAEP" === t)
t = {
encode: function(e, t) {
return a.pkcs1.encode_rsa_oaep(t, e, n)
}
};
else if (-1 !== ["RAW", "NONE", "NULL", null].indexOf(t))
t = {
encode: function(e) {
return e
}
};
else if ("string" == typeof t)
throw new Error('Unsupported encryption scheme: "' + t + '".');
var i = t.encode(e, r, !0);
return c.rsa.encrypt(i, r, !0)
},
verify: function(e, t, n, i) {
"string" == typeof n ? n = n.toUpperCase() : void 0 === n && (n = "RSASSA-PKCS1-V1_5"),
void 0 === i && (i = {
_parseAllDigestBytes: !0
}),
"_parseAllDigestBytes"in i || (i._parseAllDigestBytes = !0),
"RSASSA-PKCS1-V1_5" === n ? n = {
verify: function(e, t) {
t = m(t, r, !0);
var n = s.fromDer(t, {
parseAllBytes: i._parseAllDigestBytes
})
, o = {}
, c = [];
if (!s.validate(n, d, o, c))
throw (u = new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value.")).errors = c,
u;
var u, l = s.derToOid(o.algorithmIdentifier);
if (l !== a.oids.md2 && l !== a.oids.md5 && l !== a.oids.sha1 && l !== a.oids.sha224 && l !== a.oids.sha256 && l !== a.oids.sha384 && l !== a.oids.sha512 && l !== a.oids["sha512-224"] && l !== a.oids["sha512-256"])
throw (u = new Error("Unknown RSASSA-PKCS1-v1_5 DigestAlgorithm identifier.")).oid = l,
u;
if ((l === a.oids.md2 || l === a.oids.md5) && !("parameters"in o))
throw new Error("ASN.1 object does not contain a valid RSASSA-PKCS1-v1_5 DigestInfo value. Missing algorithm identifer NULL parameters.");
return e === o.digest
}
} : "NONE" !== n && "NULL" !== n && null !== n || (n = {
verify: function(e, t) {
return e === (t = m(t, r, !0))
}
});
var o = c.rsa.decrypt(t, r, !0, !1);
return n.verify(e, o, r.n.bitLength())
}
};
return r
}
,
c.setRsaPrivateKey = c.rsa.setPrivateKey = function(e, t, r, n, i, s, o, u) {
var l = {
n: e,
e: t,
d: r,
p: n,
q: i,
dP: s,
dQ: o,
qInv: u,
decrypt: function(e, t, r) {
"string" == typeof t ? t = t.toUpperCase() : void 0 === t && (t = "RSAES-PKCS1-V1_5");
var n = c.rsa.decrypt(e, l, !1, !1);
if ("RSAES-PKCS1-V1_5" === t)
t = {
decode: m
};
else if ("RSA-OAEP" === t || "RSAES-OAEP" === t)
t = {
decode: function(e, t) {
return a.pkcs1.decode_rsa_oaep(t, e, r)
}
};
else {
if (-1 === ["RAW", "NONE", "NULL", null].indexOf(t))
throw new Error('Unsupported encryption scheme: "' + t + '".');
t = {
decode: function(e) {
return e
}
}
}
return t.decode(n, l, !1)
},
sign: function(e, t) {
var r = !1;
"string" == typeof t && (t = t.toUpperCase()),
void 0 === t || "RSASSA-PKCS1-V1_5" === t ? (t = {
encode: y
},
r = 1) : "NONE" !== t && "NULL" !== t && null !== t || (t = {
encode: function() {
return e
}
},
r = 1);
var a = t.encode(e, l.n.bitLength());
return c.rsa.encrypt(a, l, r)
}
};
return l
}
,
c.wrapRsaPrivateKey = function(e) {
return s.create(s.Class.UNIVERSAL, s.Type.SEQUENCE, !0, [s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, s.integerToDer(0).getBytes()), s.create(s.Class.UNIVERSAL, s.Type.SEQUENCE, !0, [s.create(s.Class.UNIVERSAL, s.Type.OID, !1, s.oidToDer(c.oids.rsaEncryption).getBytes()), s.create(s.Class.UNIVERSAL, s.Type.NULL, !1, "")]), s.create(s.Class.UNIVERSAL, s.Type.OCTETSTRING, !1, s.toDer(e).getBytes())])
}
,
c.privateKeyFromAsn1 = function(e) {
var t, r, i, o, u, f, h, d, y = {}, g = [];
if (s.validate(e, l, y, g) && (e = s.fromDer(a.util.createBuffer(y.privateKey))),
y = {},
g = [],
!s.validate(e, p, y, g)) {
var v = new Error("Cannot read private key. ASN.1 object does not contain an RSAPrivateKey.");
throw v.errors = g,
v
}
return t = a.util.createBuffer(y.privateKeyModulus).toHex(),
r = a.util.createBuffer(y.privateKeyPublicExponent).toHex(),
i = a.util.createBuffer(y.privateKeyPrivateExponent).toHex(),
o = a.util.createBuffer(y.privateKeyPrime1).toHex(),
u = a.util.createBuffer(y.privateKeyPrime2).toHex(),
f = a.util.createBuffer(y.privateKeyExponent1).toHex(),
h = a.util.createBuffer(y.privateKeyExponent2).toHex(),
d = a.util.createBuffer(y.privateKeyCoefficient).toHex(),
c.setRsaPrivateKey(new n(t,16), new n(r,16), new n(i,16), new n(o,16), new n(u,16), new n(f,16), new n(h,16), new n(d,16))
}
,
c.privateKeyToAsn1 = c.privateKeyToRSAPrivateKey = function(e) {
return s.create(s.Class.UNIVERSAL, s.Type.SEQUENCE, !0, [s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, s.integerToDer(0).getBytes()), s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, E(e.n)), s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, E(e.e)), s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, E(e.d)), s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, E(e.p)), s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, E(e.q)), s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, E(e.dP)), s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, E(e.dQ)), s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, E(e.qInv))])
}
,
c.publicKeyFromAsn1 = function(e) {
var t = {}
, r = [];
if (s.validate(e, h, t, r)) {
var i, o = s.derToOid(t.publicKeyOid);
if (o !== c.oids.rsaEncryption)
throw (i = new Error("Cannot read public key. Unknown OID.")).oid = o,
i;
e = t.rsaPublicKey
}
if (r = [],
!s.validate(e, f, t, r))
throw (i = new Error("Cannot read public key. ASN.1 object does not contain an RSAPublicKey.")).errors = r,
i;
var u = a.util.createBuffer(t.publicKeyModulus).toHex()
, l = a.util.createBuffer(t.publicKeyExponent).toHex();
return c.setRsaPublicKey(new n(u,16), new n(l,16))
}
,
c.publicKeyToAsn1 = c.publicKeyToSubjectPublicKeyInfo = function(e) {
return s.create(s.Class.UNIVERSAL, s.Type.SEQUENCE, !0, [s.create(s.Class.UNIVERSAL, s.Type.SEQUENCE, !0, [s.create(s.Class.UNIVERSAL, s.Type.OID, !1, s.oidToDer(c.oids.rsaEncryption).getBytes()), s.create(s.Class.UNIVERSAL, s.Type.NULL, !1, "")]), s.create(s.Class.UNIVERSAL, s.Type.BITSTRING, !1, [c.publicKeyToRSAPublicKey(e)])])
}
,
c.publicKeyToRSAPublicKey = function(e) {
return s.create(s.Class.UNIVERSAL, s.Type.SEQUENCE, !0, [s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, E(e.n)), s.create(s.Class.UNIVERSAL, s.Type.INTEGER, !1, E(e.e))])
}
}
, function(e, t, r) {
var a, n = r(0);
e.exports = n.jsbn = n.jsbn || {};
function i(e, t, r) {
this.data = [],
null != e && ("number" == typeof e ? this.fromNumber(e, t, r) : null == t && "string" != typeof e ? this.fromString(e, 256) : this.fromString(e, t))
}
function s() {
return new i(null)
}
function o(e, t, r, a, n, i) {
for (var s = 16383 & t, o = t >> 14; --i >= 0; ) {
var c = 16383 & this.data[e]
, u = this.data[e++] >> 14
, l = o * c + u * s;
n = ((c = s * c + ((16383 & l) << 14) + r.data[a] + n) >> 28) + (l >> 14) + o * u,
r.data[a++] = 268435455 & c
}
return n
}
n.jsbn.BigInteger = i,
"undefined" == typeof navigator ? (i.prototype.am = o,
a = 28) : "Microsoft Internet Explorer" == navigator.appName ? (i.prototype.am = function(e, t, r, a, n, i) {
for (var s = 32767 & t, o = t >> 15; --i >= 0; ) {
var c = 32767 & this.data[e]
, u = this.data[e++] >> 15
, l = o * c + u * s;
n = ((c = s * c + ((32767 & l) << 15) + r.data[a] + (1073741823 & n)) >>> 30) + (l >>> 15) + o * u + (n >>> 30),
r.data[a++] = 1073741823 & c
}
return n
}
,
a = 30) : "Netscape" != navigator.appName ? (i.prototype.am = function(e, t, r, a, n, i) {
for (; --i >= 0; ) {
var s = t * this.data[e++] + r.data[a] + n;
n = Math.floor(s / 67108864),
r.data[a++] = 67108863 & s
}
return n
}
,
a = 26) : (i.prototype.am = o,
a = 28),
i.prototype.DB = a,
i.prototype.DM = (1 << a) - 1,
i.prototype.DV = 1 << a;
i.prototype.FV = Math.pow(2, 52),
i.prototype.F1 = 52 - a,
i.prototype.F2 = 2 * a - 52;
var c, u, l = new Array;
for (c = "0".charCodeAt(0),
u = 0; u <= 9; ++u)
l[c++] = u;
for (c = "a".charCodeAt(0),
u = 10; u < 36; ++u)
l[c++] = u;
for (c = "A".charCodeAt(0),
u = 10; u < 36; ++u)
l[c++] = u;
function p(e) {
return "0123456789abcdefghijklmnopqrstuvwxyz".charAt(e)
}
function f(e, t) {
var r = l[e.charCodeAt(t)];
return null == r ? -1 : r
}
function h(e) {
var t = s();
return t.fromInt(e),
t
}
function d(e) {
var t, r = 1;
return 0 != (t = e >>> 16) && (e = t,
r += 16),
0 != (t = e >> 8) && (e = t,
r += 8),
0 != (t = e >> 4) && (e = t,
r += 4),
0 != (t = e >> 2) && (e = t,
r += 2),
0 != (t = e >> 1) && (e = t,
r += 1),
r
}
function y(e) {
this.m = e
}
function g(e) {
this.m = e,
this.mp = e.invDigit(),
this.mpl = 32767 & this.mp,
this.mph = this.mp >> 15,
this.um = (1 << e.DB - 15) - 1,
this.mt2 = 2 * e.t
}
function v(e, t) {
return e & t
}
function m(e, t) {
return e | t
}
function C(e, t) {
return e ^ t
}
function E(e, t) {
return e & ~t
}
function S(e) {
if (0 == e)
return -1;
var t = 0;
return 0 == (65535 & e) && (e >>= 16,
t += 16),
0 == (255 & e) && (e >>= 8,
t += 8),
0 == (15 & e) && (e >>= 4,
t += 4),
0 == (3 & e) && (e >>= 2,
t += 2),
0 == (1 & e) && ++t,
t
}
function T(e) {
for (var t = 0; 0 != e; )
e &= e - 1,
++t;
return t
}
function I() {}
function A(e) {
return e
}
function B(e) {
this.r2 = s(),
this.q3 = s(),
i.ONE.dlShiftTo(2 * e.t, this.r2),
this.mu = this.r2.divide(e),
this.m = e
}
y.prototype.convert = function(e) {
return e.s < 0 || e.compareTo(this.m) >= 0 ? e.mod(this.m) : e
}
,
y.prototype.revert = function(e) {
return e
}
,
y.prototype.reduce = function(e) {
e.divRemTo(this.m, null, e)
}
,
y.prototype.mulTo = function(e, t, r) {
e.multiplyTo(t, r),
this.reduce(r)
}
,
y.prototype.sqrTo = function(e, t) {
e.squareTo(t),
this.reduce(t)
}
,
g.prototype.convert = function(e) {
var t = s();
return e.abs().dlShiftTo(this.m.t, t),
t.divRemTo(this.m, null, t),
e.s < 0 && t.compareTo(i.ZERO) > 0 && this.m.subTo(t, t),
t
}
,
g.prototype.revert = function(e) {
var t = s();
return e.copyTo(t),
this.reduce(t),
t
}
,
g.prototype.reduce = function(e) {
for (; e.t <= this.mt2; )
e.data[e.t++] = 0;
for (var t = 0; t < this.m.t; ++t) {
var r = 32767 & e.data[t]
, a = r * this.mpl + ((r * this.mph + (e.data[t] >> 15) * this.mpl & this.um) << 15) & e.DM;
for (r = t + this.m.t,
e.data[r] += this.m.am(0, a, e, t, 0, this.m.t); e.data[r] >= e.DV; )
e.data[r] -= e.DV,
e.data[++r]++
}
e.clamp(),
e.drShiftTo(this.m.t, e),
e.compareTo(this.m) >= 0 && e.subTo(this.m, e)
}
,
g.prototype.mulTo = function(e, t, r) {
e.multiplyTo(t, r),
this.reduce(r)
}
,
g.prototype.sqrTo = function(e, t) {
e.squareTo(t),
this.reduce(t)
}
,
i.prototype.copyTo = function(e) {
for (var t = this.t - 1; t >= 0; --t)
e.data[t] = this.data[t];
e.t = this.t,
e.s = this.s
}
,
i.prototype.fromInt = function(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
}
,
i.prototype.fromString = function(e, t) {
var r;
if (16 == t)
r = 4;
else if (8 == t)
r = 3;
else if (256 == t)
r = 8;
else if (2 == t)
r = 1;
else if (32 == t)
r = 5;
else {
if (4 != t)
return void this.fromRadix(e, t);
r = 2
}
this.t = 0,
this.s = 0;
for (var a = e.length, n = !1, s = 0; --a >= 0; ) {
var o = 8 == r ? 255 & e[a] : f(e, a);
o < 0 ? "-" == e.charAt(a) && (n = !0) : (n = !1,
0 == s ? this.data[this.t++] = o : s + r > this.DB ? (this.data[this.t - 1] |= (o & (1 << this.DB - s) - 1) << s,
this.data[this.t++] = o >> this.DB - s) : this.data[this.t - 1] |= o << s,
(s += r) >= this.DB && (s -= this.DB))
}
8 == r && 0 != (128 & e[0]) && (this.s = -1,
s > 0 && (this.data[this.t - 1] |= (1 << this.DB - s) - 1 << s)),
this.clamp(),
n && i.ZERO.subTo(this, this)
}
,
i.prototype.clamp = function() {
for (var e = this.s & this.DM; this.t > 0 && this.data[this.t - 1] == e; )
--this.t
}
,
i.prototype.dlShiftTo = function(e, t) {
var r;
for (r = this.t - 1; r >= 0; --r)
t.data[r + e] = this.data[r];
for (r = e - 1; r >= 0; --r)
t.data[r] = 0;
t.t = this.t + e,
t.s = this.s
}
,
i.prototype.drShiftTo = function(e, t) {
for (var r = e; r < this.t; ++r)
t.data[r - e] = this.data[r];
t.t = Math.max(this.t - e, 0),
t.s = this.s
}
,
i.prototype.lShiftTo = function(e, t) {
var r, a = e % this.DB, n = this.DB - a, i = (1 << n) - 1, s = Math.floor(e / this.DB), o = this.s << a & this.DM;
for (r = this.t - 1; r >= 0; --r)
t.data[r + s + 1] = this.data[r] >> n | o,
o = (this.data[r] & i) << a;
for (r = s - 1; r >= 0; --r)
t.data[r] = 0;
t.data[s] = o,
t.t = this.t + s + 1,
t.s = this.s,
t.clamp()
}
,
i.prototype.rShiftTo = function(e, t) {
t.s = this.s;
var r = Math.floor(e / this.DB);
if (r >= this.t)
t.t = 0;
else {
var a = e % this.DB
, n = this.DB - a
, i = (1 << a) - 1;
t.data[0] = this.data[r] >> a;
for (var s = r + 1; s < this.t; ++s)
t.data[s - r - 1] |= (this.data[s] & i) << n,
t.data[s - r] = this.data[s] >> a;
a > 0 && (t.data[this.t - r - 1] |= (this.s & i) << n),
t.t = this.t - r,
t.clamp()
}
}
,
i.prototype.subTo = function(e, t) {
for (var r = 0, a = 0, n = Math.min(e.t, this.t); r < n; )
a += this.data[r] - e.data[r],
t.data[r++] = a & this.DM,
a >>= this.DB;
if (e.t < this.t) {
for (a -= e.s; r < this.t; )
a += this.data[r],
t.data[r++] = a & this.DM,
a >>= this.DB;
a += this.s
} else {
for (a += this.s; r < e.t; )
a -= e.data[r],
t.data[r++] = a & this.DM,
a >>= this.DB;
a -= e.s
}
t.s = a < 0 ? -1 : 0,
a < -1 ? t.data[r++] = this.DV + a : a > 0 && (t.data[r++] = a),
t.t = r,
t.clamp()
}
,
i.prototype.multiplyTo = function(e, t) {
var r = this.abs()
, a = e.abs()
, n = r.t;
for (t.t = n + a.t; --n >= 0; )
t.data[n] = 0;
for (n = 0; n < a.t; ++n)
t.data[n + r.t] = r.am(0, a.data[n], t, n, 0, r.t);
t.s = 0,
t.clamp(),
this.s != e.s && i.ZERO.subTo(t, t)
}
,
i.prototype.squareTo = function(e) {
for (var t = this.abs(), r = e.t = 2 * t.t; --r >= 0; )
e.data[r] = 0;
for (r = 0; r < t.t - 1; ++r) {
var a = t.am(r, t.data[r], e, 2 * r, 0, 1);
(e.data[r + t.t] += t.am(r + 1, 2 * t.data[r], e, 2 * r + 1, a, t.t - r - 1)) >= t.DV && (e.data[r + t.t] -= t.DV,
e.data[r + t.t + 1] = 1)
}
e.t > 0 && (e.data[e.t - 1] += t.am(r, t.data[r], e, 2 * r, 0, 1)),
e.s = 0,
e.clamp()
}
,
i.prototype.divRemTo = function(e, t, r) {
var a = e.abs();
if (!(a.t <= 0)) {
var n = this.abs();
if (n.t < a.t)
return null != t && t.fromInt(0),
void (null != r && this.copyTo(r));
null == r && (r = s());
var o = s()
, c = this.s
, u = e.s
, l = this.DB - d(a.data[a.t - 1]);
l > 0 ? (a.lShiftTo(l, o),
n.lShiftTo(l, r)) : (a.copyTo(o),
n.copyTo(r));
var p = o.t
, f = o.data[p - 1];
if (0 != f) {
var h = f * (1 << this.F1) + (p > 1 ? o.data[p - 2] >> this.F2 : 0)
, y = this.FV / h
, g = (1 << this.F1) / h
, v = 1 << this.F2
, m = r.t
, C = m - p
, E = null == t ? s() : t;
for (o.dlShiftTo(C, E),
r.compareTo(E) >= 0 && (r.data[r.t++] = 1,
r.subTo(E, r)),
i.ONE.dlShiftTo(p, E),
E.subTo(o, o); o.t < p; )
o.data[o.t++] = 0;
for (; --C >= 0; ) {
var S = r.data[--m] == f ? this.DM : Math.floor(r.data[m] * y + (r.data[m - 1] + v) * g);
if ((r.data[m] += o.am(0, S, r, C, 0, p)) < S)
for (o.dlShiftTo(C, E),
r.subTo(E, r); r.data[m] < --S; )
r.subTo(E, r)
}
null != t && (r.drShiftTo(p, t),
c != u && i.ZERO.subTo(t, t)),
r.t = p,
r.clamp(),
l > 0 && r.rShiftTo(l, r),
c < 0 && i.ZERO.subTo(r, r)
}
}
}
,
i.prototype.invDigit = function() {
if (this.t < 1)
return 0;
var e = this.data[0];
if (0 == (1 & e))
return 0;
var t = 3 & e;
return (t = (t = (t = (t = t * (2 - (15 & e) * t) & 15) * (2 - (255 & e) * t) & 255) * (2 - ((65535 & e) * t & 65535)) & 65535) * (2 - e * t % this.DV) % this.DV) > 0 ? this.DV - t : -t
}
,
i.prototype.isEven = function() {
return 0 == (this.t > 0 ? 1 & this.data[0] : this.s)
}
,
i.prototype.exp = function(e, t) {
if (e > 4294967295 || e < 1)
return i.ONE;
var r = s()
, a = s()
, n = t.convert(this)
, o = d(e) - 1;
for (n.copyTo(r); --o >= 0; )
if (t.sqrTo(r, a),
(e & 1 << o) > 0)
t.mulTo(a, n, r);
else {
var c = r;
r = a,
a = c
}
return t.revert(r)
}
,
i.prototype.toString = function(e) {
if (this.s < 0)
return "-" + this.negate().toString(e);
var t;
if (16 == e)
t = 4;
else if (8 == e)
t = 3;
else if (2 == e)
t = 1;
else if (32 == e)
t = 5;
else {
if (4 != e)
return this.toRadix(e);
t = 2
}
var r, a = (1 << t) - 1, n = !1, i = "", s = this.t, o = this.DB - s * this.DB % t;
if (s-- > 0)
for (o < this.DB && (r = this.data[s] >> o) > 0 && (n = !0,
i = p(r)); s >= 0; )
o < t ? (r = (this.data[s] & (1 << o) - 1) << t - o,
r |= this.data[--s] >> (o += this.DB - t)) : (r = this.data[s] >> (o -= t) & a,
o <= 0 && (o += this.DB,
--s)),
r > 0 && (n = !0),
n && (i += p(r));
return n ? i : "0"
}
,
i.prototype.negate = function() {
var e = s();
return i.ZERO.subTo(this, e),
e
}
,
i.prototype.abs = function() {
return this.s < 0 ? this.negate() : this
}
,
i.prototype.compareTo = function(e) {
var t = this.s - e.s;
if (0 != t)
return t;
var r = this.t;
if (0 != (t = r - e.t))
return this.s < 0 ? -t : t;
for (; --r >= 0; )
if (0 != (t = this.data[r] - e.data[r]))
return t;
return 0
}
,
i.prototype.bitLength = function() {
return this.t <= 0 ? 0 : this.DB * (this.t - 1) + d(this.data[this.t - 1] ^ this.s & this.DM)
}
,
i.prototype.mod = function(e) {
var t = s();
return this.abs().divRemTo(e, null, t),
this.s < 0 && t.compareTo(i.ZERO) > 0 && e.subTo(t, t),
t
}
,
i.prototype.modPowInt = function(e, t) {
var r;
return r = e < 256 || t.isEven() ? new y(t) : new g(t),
this.exp(e, r)
}
,
i.ZERO = h(0),
i.ONE = h(1),
I.prototype.convert = A,
I.prototype.revert = A,
I.prototype.mulTo = function(e, t, r) {
e.multiplyTo(t, r)
}
,
I.prototype.sqrTo = function(e, t) {
e.squareTo(t)
}
,
B.prototype.convert = function(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 = s();
return e.copyTo(t),
this.reduce(t),
t
}
,
B.prototype.revert = function(e) {
return e
}
,
B.prototype.reduce = function(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)
}
,
B.prototype.mulTo = function(e, t, r) {
e.multiplyTo(t, r),
this.reduce(r)
}
,
B.prototype.sqrTo = function(e, t) {
e.squareTo(t),
this.reduce(t)
}
;
var b = [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]
, N = (1 << 26) / b[b.length - 1];
i.prototype.chunkSize = function(e) {
return Math.floor(Math.LN2 * this.DB / Math.log(e))
}
,
i.prototype.toRadix = function(e) {
if (null == e && (e = 10),
0 == this.signum() || e < 2 || e > 36)
return "0";
var t = this.chunkSize(e)
, r = Math.pow(e, t)
, a = h(r)
, n = s()
, i = s()
, o = "";
for (this.divRemTo(a, n, i); n.signum() > 0; )
o = (r + i.intValue()).toString(e).substr(1) + o,
n.divRemTo(a, n, i);
return i.intValue().toString(e) + o
}
,
i.prototype.fromRadix = function(e, t) {
this.fromInt(0),
null == t && (t = 10);
for (var r = this.chunkSize(t), a = Math.pow(t, r), n = !1, s = 0, o = 0, c = 0; c < e.length; ++c) {
var u = f(e, c);
u < 0 ? "-" == e.charAt(c) && 0 == this.signum() && (n = !0) : (o = t * o + u,
++s >= r && (this.dMultiply(a),
this.dAddOffset(o, 0),
s = 0,
o = 0))
}
s > 0 && (this.dMultiply(Math.pow(t, s)),
this.dAddOffset(o, 0)),
n && i.ZERO.subTo(this, this)
}
,
i.prototype.fromNumber = function(e, t, r) {
if ("number" == typeof t)
if (e < 2)
this.fromInt(1);
else
for (this.fromNumber(e, r),
this.testBit(e - 1) || this.bitwiseTo(i.ONE.shiftLeft(e - 1), m, this),
this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(t); )
this.dAddOffset(2, 0),
this.bitLength() > e && this.subTo(i.ONE.shiftLeft(e - 1), this);
else {
var a = new Array
, n = 7 & e;
a.length = 1 + (e >> 3),
t.nextBytes(a),
n > 0 ? a[0] &= (1 << n) - 1 : a[0] = 0,
this.fromString(a, 256)
}
}
,
i.prototype.bitwiseTo = function(e, t, r) {
var a, n, i = Math.min(e.t, this.t);
for (a = 0; a < i; ++a)
r.data[a] = t(this.data[a], e.data[a]);
if (e.t < this.t) {
for (n = e.s & this.DM,
a = i; a < this.t; ++a)
r.data[a] = t(this.data[a], n);
r.t = this.t
} else {
for (n = this.s & this.DM,
a = i; a < e.t; ++a)
r.data[a] = t(n, e.data[a]);
r.t = e.t
}
r.s = t(this.s, e.s),
r.clamp()
}
,
i.prototype.changeBit = function(e, t) {
var r = i.ONE.shiftLeft(e);
return this.bitwiseTo(r, t, r),
r
}
,
i.prototype.addTo = function(e, t) {
for (var r = 0, a = 0, n = Math.min(e.t, this.t); r < n; )
a += this.data[r] + e.data[r],
t.data[r++] = a & this.DM,
a >>= this.DB;
if (e.t < this.t) {
for (a += e.s; r < this.t; )
a += this.data[r],
t.data[r++] = a & this.DM,
a >>= this.DB;
a += this.s
} else {
for (a += this.s; r < e.t; )
a += e.data[r],
t.data[r++] = a & this.DM,
a >>= this.DB;
a += e.s
}
t.s = a < 0 ? -1 : 0,
a > 0 ? t.data[r++] = a : a < -1 && (t.data[r++] = this.DV + a),
t.t = r,
t.clamp()
}
,
i.prototype.dMultiply = function(e) {
this.data[this.t] = this.am(0, e - 1, this, 0, 0, this.t),
++this.t,
this.clamp()
}
,
i.prototype.dAddOffset = function(e, t) {
if (0 != e) {
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]
}
}
,
i.prototype.multiplyLowerTo = function(e, t, r) {
var a, n = Math.min(this.t + e.t, t);
for (r.s = 0,
r.t = n; n > 0; )
r.data[--n] = 0;
for (a = r.t - this.t; n < a; ++n)
r.data[n + this.t] = this.am(0, e.data[n], r, n, 0, this.t);
for (a = Math.min(e.t, t); n < a; ++n)
this.am(0, e.data[n], r, n, 0, t - n);
r.clamp()
}
,
i.prototype.multiplyUpperTo = function(e, t, r) {
--t;
var a = r.t = this.t + e.t - t;
for (r.s = 0; --a >= 0; )
r.data[a] = 0;
for (a = Math.max(t - this.t, 0); a < e.t; ++a)
r.data[this.t + a - t] = this.am(t - a, e.data[a], r, 0, 0, this.t + a - t);
r.clamp(),
r.drShiftTo(1, r)
}
,
i.prototype.modInt = function(e) {
if (e <= 0)
return 0;
var t = this.DV % e
, r = this.s < 0 ? e - 1 : 0;
if (this.t > 0)
if (0 == t)
r = this.data[0] % e;
else
for (var a = this.t - 1; a >= 0; --a)
r = (t * r + this.data[a]) % e;
return r
}
,
i.prototype.millerRabin = function(e) {
var t = this.subtract(i.ONE)
, r = t.getLowestSetBit();
if (r <= 0)
return !1;
for (var a, n = t.shiftRight(r), s = {
nextBytes: function(e) {
for (var t = 0; t < e.length; ++t)
e[t] = Math.floor(256 * Math.random())
}
}, o = 0; o < e; ++o) {
do {
a = new i(this.bitLength(),s)
} while (a.compareTo(i.ONE) <= 0 || a.compareTo(t) >= 0);
var c = a.modPow(n, this);
if (0 != c.compareTo(i.ONE) && 0 != c.compareTo(t)) {
for (var u = 1; u++ < r && 0 != c.compareTo(t); )
if (0 == (c = c.modPowInt(2, this)).compareTo(i.ONE))
return !1;
if (0 != c.compareTo(t))
return !1
}
}
return !0
}
,
i.prototype.clone = function() {
var e = s();
return this.copyTo(e),
e
}
,
i.prototype.intValue = function() {
if (this.s < 0) {
if (1 == this.t)
return this.data[0] - this.DV;
if (0 == this.t)
return -1
} else {
if (1 == this.t)
return this.data[0];
if (0 == this.t)
return 0
}
return (this.data[1] & (1 << 32 - this.DB) - 1) << this.DB | this.data[0]
}
,
i.prototype.byteValue = function() {
return 0 == this.t ? this.s : this.data[0] << 24 >> 24
}
,
i.prototype.shortValue = function() {
return 0 == this.t ? this.s : this.data[0] << 16 >> 16
}
,
i.prototype.signum = function() {
return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this.data[0] <= 0 ? 0 : 1
}
,
i.prototype.toByteArray = function() {
var e = this.t
, t = new Array;
t[0] = this.s;
var r, a = this.DB - e * this.DB % 8, n = 0;
if (e-- > 0)
for (a < this.DB && (r = this.data[e] >> a) != (this.s & this.DM) >> a && (t[n++] = 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)),
0 != (128 & r) && (r |= -256),
0 == n && (128 & this.s) != (128 & r) && ++n,
(n > 0 || r != this.s) && (t[n++] = r);
return t
}
,
i.prototype.equals = function(e) {
return 0 == this.compareTo(e)
}
,
i.prototype.min = function(e) {
return this.compareTo(e) < 0 ? this : e
}
,
i.prototype.max = function(e) {
return this.compareTo(e) > 0 ? this : e
}
,
i.prototype.and = function(e) {
var t = s();
return this.bitwiseTo(e, v, t),
t
}
,
i.prototype.or = function(e) {
var t = s();
return this.bitwiseTo(e, m, t),
t
}
,
i.prototype.xor = function(e) {
var t = s();
return this.bitwiseTo(e, C, t),
t
}
,
i.prototype.andNot = function(e) {
var t = s();
return this.bitwiseTo(e, E, t),
t
}
,
i.prototype.not = function() {
for (var e = s(), t = 0; t < this.t; ++t)
e.data[t] = this.DM & ~this.data[t];
return e.t = this.t,
e.s = ~this.s,
e
}
,
i.prototype.shiftLeft = function(e) {
var t = s();
return e < 0 ? this.rShiftTo(-e, t) : this.lShiftTo(e, t),
t
}
,
i.prototype.shiftRight = function(e) {
var t = s();
return e < 0 ? this.lShiftTo(-e, t) : this.rShiftTo(e, t),
t
}
,
i.prototype.getLowestSetBit = function() {
for (var e = 0; e < this.t; ++e)
if (0 != this.data[e])
return e * this.DB + S(this.data[e]);
return this.s < 0 ? this.t * this.DB : -1
}
,
i.prototype.bitCount = function() {
for (var e = 0, t = this.s & this.DM, r = 0; r < this.t; ++r)
e += T(this.data[r] ^ t);
return e
}
,
i.prototype.testBit = function(e) {
var t = Math.floor(e / this.DB);
return t >= this.t ? 0 != this.s : 0 != (this.data[t] & 1 << e % this.DB)
}
,
i.prototype.setBit = function(e) {
return this.changeBit(e, m)
}
,
i.prototype.clearBit = function(e) {
return this.changeBit(e, E)
}
,
i.prototype.flipBit = function(e) {
return this.changeBit(e, C)
}
,
i.prototype.add = function(e) {
var t = s();
return this.addTo(e, t),
t
}
,
i.prototype.subtract = function(e) {
var t = s();
return this.subTo(e, t),
t
}
,
i.prototype.multiply = function(e) {
var t = s();
return this.multiplyTo(e, t),
t
}
,
i.prototype.divide = function(e) {
var t = s();
return this.divRemTo(e, t, null),
t
}
,
i.prototype.remainder = function(e) {
var t = s();
return this.divRemTo(e, null, t),
t
}
,
i.prototype.divideAndRemainder = function(e) {
var t = s()
, r = s();
return this.divRemTo(e, t, r),
new Array(t,r)
}
,
i.prototype.modPow = function(e, t) {
var r, a, n = e.bitLength(), i = h(1);
if (n <= 0)
return i;
r = n < 18 ? 1 : n < 48 ? 3 : n < 144 ? 4 : n < 768 ? 5 : 6,
a = n < 8 ? new y(t) : t.isEven() ? new B(t) : new g(t);
var o = new Array
, c = 3
, u = r - 1
, l = (1 << r) - 1;
if (o[1] = a.convert(this),
r > 1) {
var p = s();
for (a.sqrTo(o[1], p); c <= l; )
o[c] = s(),
a.mulTo(p, o[c - 2], o[c]),
c += 2
}
var f, v, m = e.t - 1, C = !0, E = s();
for (n = d(e.data[m]) - 1; m >= 0; ) {
for (n >= u ? f = e.data[m] >> n - u & l : (f = (e.data[m] & (1 << n + 1) - 1) << u - n,
m > 0 && (f |= e.data[m - 1] >> this.DB + n - u)),
c = r; 0 == (1 & f); )
f >>= 1,
--c;
if ((n -= c) < 0 && (n += this.DB,
--m),
C)
o[f].copyTo(i),
C = !1;
else {
for (; c > 1; )
a.sqrTo(i, E),
a.sqrTo(E, i),
c -= 2;
c > 0 ? a.sqrTo(i, E) : (v = i,
i = E,
E = v),
a.mulTo(E, o[f], i)
}
for (; m >= 0 && 0 == (e.data[m] & 1 << n); )
a.sqrTo(i, E),
v = i,
i = E,
E = v,
--n < 0 && (n = this.DB - 1,
--m)
}
return a.revert(i)
}
,
i.prototype.modInverse = function(e) {
var t = e.isEven();
if (this.isEven() && t || 0 == e.signum())
return i.ZERO;
for (var r = e.clone(), a = this.clone(), n = h(1), s = h(0), o = h(0), c = h(1); 0 != r.signum(); ) {
for (; r.isEven(); )
r.rShiftTo(1, r),
t ? (n.isEven() && s.isEven() || (n.addTo(this, n),
s.subTo(e, s)),
n.rShiftTo(1, n)) : s.isEven() || s.subTo(e, s),
s.rShiftTo(1, s);
for (; a.isEven(); )
a.rShiftTo(1, a),
t ? (o.isEven() && c.isEven() || (o.addTo(this, o),
c.subTo(e, c)),
o.rShiftTo(1, o)) : c.isEven() || c.subTo(e, c),
c.rShiftTo(1, c);
r.compareTo(a) >= 0 ? (r.subTo(a, r),
t && n.subTo(o, n),
s.subTo(c, s)) : (a.subTo(r, a),
t && o.subTo(n, o),
c.subTo(s, c))
}
return 0 != a.compareTo(i.ONE) ? i.ZERO : c.compareTo(e) >= 0 ? c.subtract(e) : c.signum() < 0 ? (c.addTo(e, c),
c.signum() < 0 ? c.add(e) : c) : c
}
,
i.prototype.pow = function(e) {
return this.exp(e, new I)
}
,
i.prototype.gcd = function(e) {
var t = this.s < 0 ? this.negate() : this.clone()
, r = e.s < 0 ? e.negate() : e.clone();
if (t.compareTo(r) < 0) {
var a = t;
t = r,
r = a
}
var n = t.getLowestSetBit()
, i = r.getLowestSetBit();
if (i < 0)
return t;
for (n < i && (i = n),
i > 0 && (t.rShiftTo(i, t),
r.rShiftTo(i, r)); t.signum() > 0; )
(n = t.getLowestSetBit()) > 0 && t.rShiftTo(n, t),
(n = r.getLowestSetBit()) > 0 && r.rShiftTo(n, r),
t.compareTo(r) >= 0 ? (t.subTo(r, t),
t.rShiftTo(1, t)) : (r.subTo(t, r),
r.rShiftTo(1, r));
return i > 0 && r.lShiftTo(i, r),
r
}
,
i.prototype.isProbablePrime = function(e) {
var t, r = this.abs();
if (1 == r.t && r.data[0] <= b[b.length - 1]) {
for (t = 0; t < b.length; ++t)
if (r.data[0] == b[t])
return !0;
return !1
}
if (r.isEven())
return !1;
for (t = 1; t < b.length; ) {
for (var a = b[t], n = t + 1; n < b.length && a < N; )
a *= b[n++];
for (a = r.modInt(a); t < n; )
if (a % b[t++] == 0)
return !1
}
return r.millerRabin(e)
}
}
, function(e, t, r) {
var a = r(0);
r(1),
e.exports = a.cipher = a.cipher || {},
a.cipher.algorithms = a.cipher.algorithms || {},
a.cipher.createCipher = function(e, t) {
var r = e;
if ("string" == typeof r && (r = a.cipher.getAlgorithm(r)) && (r = r()),
!r)
throw new Error("Unsupported algorithm: " + e);
return new a.cipher.BlockCipher({
algorithm: r,
key: t,
decrypt: !1
})
}
,
a.cipher.createDecipher = function(e, t) {
var r = e;
if ("string" == typeof r && (r = a.cipher.getAlgorithm(r)) && (r = r()),
!r)
throw new Error("Unsupported algorithm: " + e);
return new a.cipher.BlockCipher({
algorithm: r,
key: t,
decrypt: !0
})
}
,
a.cipher.registerAlgorithm = function(e, t) {
e = e.toUpperCase(),
a.cipher.algorithms[e] = t
}
,
a.cipher.getAlgorithm = function(e) {
return (e = e.toUpperCase())in a.cipher.algorithms ? a.cipher.algorithms[e] : null
}
;
var n = a.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)
}
;
n.prototype.start = function(e) {
e = e || {};
var t = {};
for (var r in e)
t[r] = e[r];
t.decrypt = this._decrypt,
this._finish = !1,
this._input = a.util.createBuffer(),
this.output = e.output || a.util.createBuffer(),
this.mode.start(t)
}
,
n.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()
}
,
n.prototype.finish = function(e) {
!e || "ECB" !== this.mode.name && "CBC" !== this.mode.name || (this.mode.pad = function(t) {
return e(this.blockSize, t, !1)
}
,
this.mode.unpad = function(t) {
return e(this.blockSize, t, !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)))
}
}
, function(e, t, r) {
var a = r(0);
r(4),
r(1);
var n = e.exports = a.md5 = a.md5 || {};
a.md.md5 = a.md.algorithms.md5 = n,
n.create = function() {
u || function() {
i = String.fromCharCode(128),
i += a.util.fillString(String.fromCharCode(0), 64),
s = [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],
o = [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],
c = new Array(64);
for (var e = 0; e < 64; ++e)
c[e] = Math.floor(4294967296 * Math.abs(Math.sin(e + 1)));
u = !0
}();
var e = null
, t = a.util.createBuffer()
, r = new Array(16)
, n = {
algorithm: "md5",
blockLength: 64,
digestLength: 16,
messageLength: 0,
fullMessageLength: null,
messageLengthSize: 8,
start: function() {
n.messageLength = 0,
n.fullMessageLength = n.messageLength64 = [];
for (var r = n.messageLengthSize / 4, i = 0; i < r; ++i)
n.fullMessageLength.push(0);
return t = a.util.createBuffer(),
e = {
h0: 1732584193,
h1: 4023233417,
h2: 2562383102,
h3: 271733878
},
n
}
};
return n.start(),
n.update = function(i, s) {
"utf8" === s && (i = a.util.encodeUtf8(i));
var o = i.length;
n.messageLength += o,
o = [o / 4294967296 >>> 0, o >>> 0];
for (var c = n.fullMessageLength.length - 1; c >= 0; --c)
n.fullMessageLength[c] += o[1],
o[1] = o[0] + (n.fullMessageLength[c] / 4294967296 >>> 0),
n.fullMessageLength[c] = n.fullMessageLength[c] >>> 0,
o[0] = o[1] / 4294967296 >>> 0;
return t.putBytes(i),
l(e, r, t),
(t.read > 2048 || 0 === t.length()) && t.compact(),
n
}
,
n.digest = function() {
var s = a.util.createBuffer();
s.putBytes(t.bytes());
var o = n.fullMessageLength[n.fullMessageLength.length - 1] + n.messageLengthSize & n.blockLength - 1;
s.putBytes(i.substr(0, n.blockLength - o));
for (var c, u = 0, p = n.fullMessageLength.length - 1; p >= 0; --p)
u = (c = 8 * n.fullMessageLength[p] + u) / 4294967296 >>> 0,
s.putInt32Le(c >>> 0);
var f = {
h0: e.h0,
h1: e.h1,
h2: e.h2,
h3: e.h3
};
l(f, r, s);
var h = a.util.createBuffer();
return h.putInt32Le(f.h0),
h.putInt32Le(f.h1),
h.putInt32Le(f.h2),
h.putInt32Le(f.h3),
h
}
,
n
}
;
var i = null
, s = null
, o = null
, c = null
, u = !1;
function l(e, t, r) {
for (var a, n, i, u, l, p, f, h = r.length(); h >= 64; ) {
for (n = e.h0,
i = e.h1,
u = e.h2,
l = e.h3,
f = 0; f < 16; ++f)
t[f] = r.getInt32Le(),
a = n + (l ^ i & (u ^ l)) + c[f] + t[f],
n = l,
l = u,
u = i,
i += a << (p = o[f]) | a >>> 32 - p;
for (; f < 32; ++f)
a = n + (u ^ l & (i ^ u)) + c[f] + t[s[f]],
n = l,
l = u,
u = i,
i += a << (p = o[f]) | a >>> 32 - p;
for (; f < 48; ++f)
a = n + (i ^ u ^ l) + c[f] + t[s[f]],
n = l,
l = u,
u = i,
i += a << (p = o[f]) | a >>> 32 - p;
for (; f < 64; ++f)
a = n + (u ^ (i | ~l)) + c[f] + t[s[f]],
n = l,
l = u,
u = i,
i += a << (p = o[f]) | a >>> 32 - p;
e.h0 = e.h0 + n | 0,
e.h1 = e.h1 + i | 0,
e.h2 = e.h2 + u | 0,
e.h3 = e.h3 + l | 0,
h -= 64
}
}
}
, function(e, t, r) {
var a = r(0);
r(8),
r(4),
r(1);
var n, i = a.pkcs5 = a.pkcs5 || {};
a.util.isNodejs && !a.options.usePureJavaScript && (n = r(16)),
e.exports = a.pbkdf2 = i.pbkdf2 = function(e, t, r, i, s, o) {
if ("function" == typeof s && (o = s,
s = null),
a.util.isNodejs && !a.options.usePureJavaScript && n.pbkdf2 && (null === s || "object" != typeof s) && (n.pbkdf2Sync.length > 4 || !s || "sha1" === s))
return "string" != typeof s && (s = "sha1"),
e = Buffer.from(e, "binary"),
t = Buffer.from(t, "binary"),
o ? 4 === n.pbkdf2Sync.length ? n.pbkdf2(e, t, r, i, (function(e, t) {
if (e)
return o(e);
o(null, t.toString("binary"))
}
)) : n.pbkdf2(e, t, r, i, s, (function(e, t) {
if (e)
return o(e);
o(null, t.toString("binary"))
}
)) : 4 === n.pbkdf2Sync.length ? n.pbkdf2Sync(e, t, r, i).toString("binary") : n.pbkdf2Sync(e, t, r, i, s).toString("binary");
if (null == s && (s = "sha1"),
"string" == typeof s) {
if (!(s in a.md.algorithms))
throw new Error("Unknown hash algorithm: " + s);
s = a.md[s].create()
}
var c = s.digestLength;
if (i > 4294967295 * c) {
var u = new Error("Derived key is too long.");
if (o)
return o(u);
throw u
}
var l = Math.ceil(i / c)
, p = i - (l - 1) * c
, f = a.hmac.create();
f.start(s, e);
var h, d, y, g = "";
if (!o) {
for (var v = 1; v <= l; ++v) {
f.start(null, null),
f.update(t),
f.update(a.util.int32ToBytes(v)),
h = y = f.digest().getBytes();
for (var m = 2; m <= r; ++m)
f.start(null, null),
f.update(y),
d = f.digest().getBytes(),
h = a.util.xorBytes(h, d, c),
y = d;
g += v < l ? h : h.substr(0, p)
}
return g
}
v = 1;
function C() {
if (v > l)
return o(null, g);
f.start(null, null),
f.update(t),
f.update(a.util.int32ToBytes(v)),
h = y = f.digest().getBytes(),
m = 2,
E()
}
function E() {
if (m <= r)
return f.start(null, null),
f.update(y),
d = f.digest().getBytes(),
h = a.util.xorBytes(h, d, c),
y = d,
++m,
a.util.setImmediate(E);
g += v < l ? h : h.substr(0, p),
++v,
C()
}
C()
}
}
, function(e, t) {}
, function(e, t, r) {
var a = r(0);
r(5),
r(3),
r(10),
r(4),
r(37),
r(6),
r(7),
r(18),
r(11),
r(1);
var n = a.asn1
, i = e.exports = a.pki = a.pki || {}
, s = i.oids
, o = {};
o.CN = s.commonName,
o.commonName = "CN",
o.C = s.countryName,
o.countryName = "C",
o.L = s.localityName,
o.localityName = "L",
o.ST = s.stateOrProvinceName,
o.stateOrProvinceName = "ST",
o.O = s.organizationName,
o.organizationName = "O",
o.OU = s.organizationalUnitName,
o.organizationalUnitName = "OU",
o.E = s.emailAddress,
o.emailAddress = "E";
var c = a.pki.rsa.publicKeyValidator
, u = {
name: "Certificate",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "Certificate.TBSCertificate",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
captureAsn1: "tbsCertificate",
value: [{
name: "Certificate.TBSCertificate.version",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 0,
constructed: !0,
optional: !0,
value: [{
name: "Certificate.TBSCertificate.version.integer",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "certVersion"
}]
}, {
name: "Certificate.TBSCertificate.serialNumber",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "certSerialNumber"
}, {
name: "Certificate.TBSCertificate.signature",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "Certificate.TBSCertificate.signature.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "certinfoSignatureOid"
}, {
name: "Certificate.TBSCertificate.signature.parameters",
tagClass: n.Class.UNIVERSAL,
optional: !0,
captureAsn1: "certinfoSignatureParams"
}]
}, {
name: "Certificate.TBSCertificate.issuer",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
captureAsn1: "certIssuer"
}, {
name: "Certificate.TBSCertificate.validity",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "Certificate.TBSCertificate.validity.notBefore (utc)",
tagClass: n.Class.UNIVERSAL,
type: n.Type.UTCTIME,
constructed: !1,
optional: !0,
capture: "certValidity1UTCTime"
}, {
name: "Certificate.TBSCertificate.validity.notBefore (generalized)",
tagClass: n.Class.UNIVERSAL,
type: n.Type.GENERALIZEDTIME,
constructed: !1,
optional: !0,
capture: "certValidity2GeneralizedTime"
}, {
name: "Certificate.TBSCertificate.validity.notAfter (utc)",
tagClass: n.Class.UNIVERSAL,
type: n.Type.UTCTIME,
constructed: !1,
optional: !0,
capture: "certValidity3UTCTime"
}, {
name: "Certificate.TBSCertificate.validity.notAfter (generalized)",
tagClass: n.Class.UNIVERSAL,
type: n.Type.GENERALIZEDTIME,
constructed: !1,
optional: !0,
capture: "certValidity4GeneralizedTime"
}]
}, {
name: "Certificate.TBSCertificate.subject",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
captureAsn1: "certSubject"
}, c, {
name: "Certificate.TBSCertificate.issuerUniqueID",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 1,
constructed: !0,
optional: !0,
value: [{
name: "Certificate.TBSCertificate.issuerUniqueID.id",
tagClass: n.Class.UNIVERSAL,
type: n.Type.BITSTRING,
constructed: !1,
captureBitStringValue: "certIssuerUniqueId"
}]
}, {
name: "Certificate.TBSCertificate.subjectUniqueID",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 2,
constructed: !0,
optional: !0,
value: [{
name: "Certificate.TBSCertificate.subjectUniqueID.id",
tagClass: n.Class.UNIVERSAL,
type: n.Type.BITSTRING,
constructed: !1,
captureBitStringValue: "certSubjectUniqueId"
}]
}, {
name: "Certificate.TBSCertificate.extensions",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 3,
constructed: !0,
captureAsn1: "certExtensions",
optional: !0
}]
}, {
name: "Certificate.signatureAlgorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "Certificate.signatureAlgorithm.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "certSignatureOid"
}, {
name: "Certificate.TBSCertificate.signature.parameters",
tagClass: n.Class.UNIVERSAL,
optional: !0,
captureAsn1: "certSignatureParams"
}]
}, {
name: "Certificate.signatureValue",
tagClass: n.Class.UNIVERSAL,
type: n.Type.BITSTRING,
constructed: !1,
captureBitStringValue: "certSignature"
}]
}
, l = {
name: "rsapss",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "rsapss.hashAlgorithm",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 0,
constructed: !0,
value: [{
name: "rsapss.hashAlgorithm.AlgorithmIdentifier",
tagClass: n.Class.UNIVERSAL,
type: n.Class.SEQUENCE,
constructed: !0,
optional: !0,
value: [{
name: "rsapss.hashAlgorithm.AlgorithmIdentifier.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "hashOid"
}]
}]
}, {
name: "rsapss.maskGenAlgorithm",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 1,
constructed: !0,
value: [{
name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier",
tagClass: n.Class.UNIVERSAL,
type: n.Class.SEQUENCE,
constructed: !0,
optional: !0,
value: [{
name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "maskGenOid"
}, {
name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier.params",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "rsapss.maskGenAlgorithm.AlgorithmIdentifier.params.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "maskGenHashOid"
}]
}]
}]
}, {
name: "rsapss.saltLength",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 2,
optional: !0,
value: [{
name: "rsapss.saltLength.saltLength",
tagClass: n.Class.UNIVERSAL,
type: n.Class.INTEGER,
constructed: !1,
capture: "saltLength"
}]
}, {
name: "rsapss.trailerField",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 3,
optional: !0,
value: [{
name: "rsapss.trailer.trailer",
tagClass: n.Class.UNIVERSAL,
type: n.Class.INTEGER,
constructed: !1,
capture: "trailer"
}]
}]
}
, p = {
name: "CertificationRequestInfo",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
captureAsn1: "certificationRequestInfo",
value: [{
name: "CertificationRequestInfo.integer",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "certificationRequestInfoVersion"
}, {
name: "CertificationRequestInfo.subject",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
captureAsn1: "certificationRequestInfoSubject"
}, c, {
name: "CertificationRequestInfo.attributes",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 0,
constructed: !0,
optional: !0,
capture: "certificationRequestInfoAttributes",
value: [{
name: "CertificationRequestInfo.attributes",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "CertificationRequestInfo.attributes.type",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1
}, {
name: "CertificationRequestInfo.attributes.value",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SET,
constructed: !0
}]
}]
}]
}
, f = {
name: "CertificationRequest",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
captureAsn1: "csr",
value: [p, {
name: "CertificationRequest.signatureAlgorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "CertificationRequest.signatureAlgorithm.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "csrSignatureOid"
}, {
name: "CertificationRequest.signatureAlgorithm.parameters",
tagClass: n.Class.UNIVERSAL,
optional: !0,
captureAsn1: "csrSignatureParams"
}]
}, {
name: "CertificationRequest.signature",
tagClass: n.Class.UNIVERSAL,
type: n.Type.BITSTRING,
constructed: !1,
captureBitStringValue: "csrSignature"
}]
};
function h(e, t) {
"string" == typeof t && (t = {
shortName: t
});
for (var r, a = null, n = 0; null === a && n < e.attributes.length; ++n)
r = e.attributes[n],
(t.type && t.type === r.type || t.name && t.name === r.name || t.shortName && t.shortName === r.shortName) && (a = r);
return a
}
i.RDNAttributesAsArray = function(e, t) {
for (var r, a, i, c = [], u = 0; u < e.value.length; ++u) {
r = e.value[u];
for (var l = 0; l < r.value.length; ++l)
i = {},
a = r.value[l],
i.type = n.derToOid(a.value[0].value),
i.value = a.value[1].value,
i.valueTagClass = a.value[1].type,
i.type in s && (i.name = s[i.type],
i.name in o && (i.shortName = o[i.name])),
t && (t.update(i.type),
t.update(i.value)),
c.push(i)
}
return c
}
,
i.CRIAttributesAsArray = function(e) {
for (var t = [], r = 0; r < e.length; ++r)
for (var a = e[r], c = n.derToOid(a.value[0].value), u = a.value[1].value, l = 0; l < u.length; ++l) {
var p = {};
if (p.type = c,
p.value = u[l].value,
p.valueTagClass = u[l].type,
p.type in s && (p.name = s[p.type],
p.name in o && (p.shortName = o[p.name])),
p.type === s.extensionRequest) {
p.extensions = [];
for (var f = 0; f < p.value.length; ++f)
p.extensions.push(i.certificateExtensionFromAsn1(p.value[f]))
}
t.push(p)
}
return t
}
;
var d = function(e, t, r) {
var a = {};
if (e !== s["RSASSA-PSS"])
return a;
r && (a = {
hash: {
algorithmOid: s.sha1
},
mgf: {
algorithmOid: s.mgf1,
hash: {
algorithmOid: s.sha1
}
},
saltLength: 20
});
var i = {}
, o = [];
if (!n.validate(t, l, i, o)) {
var c = new Error("Cannot read RSASSA-PSS parameter block.");
throw c.errors = o,
c
}
return void 0 !== i.hashOid && (a.hash = a.hash || {},
a.hash.algorithmOid = n.derToOid(i.hashOid)),
void 0 !== i.maskGenOid && (a.mgf = a.mgf || {},
a.mgf.algorithmOid = n.derToOid(i.maskGenOid),
a.mgf.hash = a.mgf.hash || {},
a.mgf.hash.algorithmOid = n.derToOid(i.maskGenHashOid)),
void 0 !== i.saltLength && (a.saltLength = i.saltLength.charCodeAt(0)),
a
}
, y = function(e) {
switch (s[e.signatureOid]) {
case "sha1WithRSAEncryption":
case "sha1WithRSASignature":
return a.md.sha1.create();
case "md5WithRSAEncryption":
return a.md.md5.create();
case "sha256WithRSAEncryption":
return a.md.sha256.create();
case "sha384WithRSAEncryption":
return a.md.sha384.create();
case "sha512WithRSAEncryption":
return a.md.sha512.create();
case "RSASSA-PSS":
return a.md.sha256.create();
default:
var t = new Error("Could not compute " + e.type + " digest. Unknown signature OID.");
throw t.signatureOid = e.signatureOid,
t
}
}
, g = function(e) {
var t, r = e.certificate;
switch (r.signatureOid) {
case s.sha1WithRSAEncryption:
case s.sha1WithRSASignature:
break;
case s["RSASSA-PSS"]:
var n, i, o;
if (void 0 === (n = s[r.signatureParameters.mgf.hash.algorithmOid]) || void 0 === a.md[n])
throw (o = new Error("Unsupported MGF hash function.")).oid = r.signatureParameters.mgf.hash.algorithmOid,
o.name = n,
o;
if (void 0 === (i = s[r.signatureParameters.mgf.algorithmOid]) || void 0 === a.mgf[i])
throw (o = new Error("Unsupported MGF function.")).oid = r.signatureParameters.mgf.algorithmOid,
o.name = i,
o;
if (i = a.mgf[i].create(a.md[n].create()),
void 0 === (n = s[r.signatureParameters.hash.algorithmOid]) || void 0 === a.md[n])
throw (o = new Error("Unsupported RSASSA-PSS hash function.")).oid = r.signatureParameters.hash.algorithmOid,
o.name = n,
o;
t = a.pss.create(a.md[n].create(), i, r.signatureParameters.saltLength)
}
return r.publicKey.verify(e.md.digest().getBytes(), e.signature, t)
};
function v(e) {
for (var t, r, i = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, []), s = e.attributes, o = 0; o < s.length; ++o) {
var c = (t = s[o]).value
, u = n.Type.PRINTABLESTRING;
"valueTagClass"in t && (u = t.valueTagClass) === n.Type.UTF8 && (c = a.util.encodeUtf8(c)),
r = n.create(n.Class.UNIVERSAL, n.Type.SET, !0, [n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(t.type).getBytes()), n.create(n.Class.UNIVERSAL, u, !1, c)])]),
i.value.push(r)
}
return i
}
function m(e) {
for (var t, r = 0; r < e.length; ++r) {
if (void 0 === (t = e[r]).name && (t.type && t.type in i.oids ? t.name = i.oids[t.type] : t.shortName && t.shortName in o && (t.name = i.oids[o[t.shortName]])),
void 0 === t.type) {
if (!t.name || !(t.name in i.oids))
throw (c = new Error("Attribute type not specified.")).attribute = t,
c;
t.type = i.oids[t.name]
}
if (void 0 === t.shortName && t.name && t.name in o && (t.shortName = o[t.name]),
t.type === s.extensionRequest && (t.valueConstructed = !0,
t.valueTagClass = n.Type.SEQUENCE,
!t.value && t.extensions)) {
t.value = [];
for (var a = 0; a < t.extensions.length; ++a)
t.value.push(i.certificateExtensionToAsn1(C(t.extensions[a])))
}
var c;
if (void 0 === t.value)
throw (c = new Error("Attribute value not specified.")).attribute = t,
c
}
}
function C(e, t) {
if (t = t || {},
void 0 === e.name && e.id && e.id in i.oids && (e.name = i.oids[e.id]),
void 0 === e.id) {
if (!e.name || !(e.name in i.oids))
throw (S = new Error("Extension ID not specified.")).extension = e,
S;
e.id = i.oids[e.name]
}
if (void 0 !== e.value)
return e;
if ("keyUsage" === e.name) {
var r = 0
, o = 0
, c = 0;
e.digitalSignature && (o |= 128,
r = 7),
e.nonRepudiation && (o |= 64,
r = 6),
e.keyEncipherment && (o |= 32,
r = 5),
e.dataEncipherment && (o |= 16,
r = 4),
e.keyAgreement && (o |= 8,
r = 3),
e.keyCertSign && (o |= 4,
r = 2),
e.cRLSign && (o |= 2,
r = 1),
e.encipherOnly && (o |= 1,
r = 0),
e.decipherOnly && (c |= 128,
r = 7);
var u = String.fromCharCode(r);
0 !== c ? u += String.fromCharCode(o) + String.fromCharCode(c) : 0 !== o && (u += String.fromCharCode(o)),
e.value = n.create(n.Class.UNIVERSAL, n.Type.BITSTRING, !1, u)
} else if ("basicConstraints" === e.name)
e.value = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, []),
e.cA && e.value.value.push(n.create(n.Class.UNIVERSAL, n.Type.BOOLEAN, !1, String.fromCharCode(255))),
"pathLenConstraint"in e && e.value.value.push(n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, n.integerToDer(e.pathLenConstraint).getBytes()));
else if ("extKeyUsage" === e.name) {
e.value = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, []);
var l = e.value.value;
for (var p in e)
!0 === e[p] && (p in s ? l.push(n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(s[p]).getBytes())) : -1 !== p.indexOf(".") && l.push(n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(p).getBytes())))
} else if ("nsCertType" === e.name) {
r = 0,
o = 0;
e.client && (o |= 128,
r = 7),
e.server && (o |= 64,
r = 6),
e.email && (o |= 32,
r = 5),
e.objsign && (o |= 16,
r = 4),
e.reserved && (o |= 8,
r = 3),
e.sslCA && (o |= 4,
r = 2),
e.emailCA && (o |= 2,
r = 1),
e.objCA && (o |= 1,
r = 0);
u = String.fromCharCode(r);
0 !== o && (u += String.fromCharCode(o)),
e.value = n.create(n.Class.UNIVERSAL, n.Type.BITSTRING, !1, u)
} else if ("subjectAltName" === e.name || "issuerAltName" === e.name) {
e.value = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, []);
for (var f = 0; f < e.altNames.length; ++f) {
u = (m = e.altNames[f]).value;
if (7 === m.type && m.ip) {
if (null === (u = a.util.bytesFromIP(m.ip)))
throw (S = new Error('Extension "ip" value is not a valid IPv4 or IPv6 address.')).extension = e,
S
} else
8 === m.type && (u = m.oid ? n.oidToDer(n.oidToDer(m.oid)) : n.oidToDer(u));
e.value.value.push(n.create(n.Class.CONTEXT_SPECIFIC, m.type, !1, u))
}
} else if ("nsComment" === e.name && t.cert) {
if (!/^[\x00-\x7F]*$/.test(e.comment) || e.comment.length < 1 || e.comment.length > 128)
throw new Error('Invalid "nsComment" content.');
e.value = n.create(n.Class.UNIVERSAL, n.Type.IA5STRING, !1, e.comment)
} else if ("subjectKeyIdentifier" === e.name && t.cert) {
var h = t.cert.generateSubjectKeyIdentifier();
e.subjectKeyIdentifier = h.toHex(),
e.value = n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, h.getBytes())
} else if ("authorityKeyIdentifier" === e.name && t.cert) {
e.value = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, []);
l = e.value.value;
if (e.keyIdentifier) {
var d = !0 === e.keyIdentifier ? t.cert.generateSubjectKeyIdentifier().getBytes() : e.keyIdentifier;
l.push(n.create(n.Class.CONTEXT_SPECIFIC, 0, !1, d))
}
if (e.authorityCertIssuer) {
var y = [n.create(n.Class.CONTEXT_SPECIFIC, 4, !0, [v(!0 === e.authorityCertIssuer ? t.cert.issuer : e.authorityCertIssuer)])];
l.push(n.create(n.Class.CONTEXT_SPECIFIC, 1, !0, y))
}
if (e.serialNumber) {
var g = a.util.hexToBytes(!0 === e.serialNumber ? t.cert.serialNumber : e.serialNumber);
l.push(n.create(n.Class.CONTEXT_SPECIFIC, 2, !1, g))
}
} else if ("cRLDistributionPoints" === e.name) {
e.value = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, []);
l = e.value.value;
var m, C = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, []), E = n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, []);
for (f = 0; f < e.altNames.length; ++f) {
u = (m = e.altNames[f]).value;
if (7 === m.type && m.ip) {
if (null === (u = a.util.bytesFromIP(m.ip)))
throw (S = new Error('Extension "ip" value is not a valid IPv4 or IPv6 address.')).extension = e,
S
} else
8 === m.type && (u = m.oid ? n.oidToDer(n.oidToDer(m.oid)) : n.oidToDer(u));
E.value.push(n.create(n.Class.CONTEXT_SPECIFIC, m.type, !1, u))
}
C.value.push(n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [E])),
l.push(C)
}
var S;
if (void 0 === e.value)
throw (S = new Error("Extension value not specified.")).extension = e,
S;
return e
}
function E(e, t) {
switch (e) {
case s["RSASSA-PSS"]:
var r = [];
return void 0 !== t.hash.algorithmOid && r.push(n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(t.hash.algorithmOid).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.NULL, !1, "")])])),
void 0 !== t.mgf.algorithmOid && r.push(n.create(n.Class.CONTEXT_SPECIFIC, 1, !0, [n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(t.mgf.algorithmOid).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(t.mgf.hash.algorithmOid).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.NULL, !1, "")])])])),
void 0 !== t.saltLength && r.push(n.create(n.Class.CONTEXT_SPECIFIC, 2, !0, [n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, n.integerToDer(t.saltLength).getBytes())])),
n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, r);
default:
return n.create(n.Class.UNIVERSAL, n.Type.NULL, !1, "")
}
}
function S(e) {
var t = n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, []);
if (0 === e.attributes.length)
return t;
for (var r = e.attributes, i = 0; i < r.length; ++i) {
var s = r[i]
, o = s.value
, c = n.Type.UTF8;
"valueTagClass"in s && (c = s.valueTagClass),
c === n.Type.UTF8 && (o = a.util.encodeUtf8(o));
var u = !1;
"valueConstructed"in s && (u = s.valueConstructed);
var l = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(s.type).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SET, !0, [n.create(n.Class.UNIVERSAL, c, u, o)])]);
t.value.push(l)
}
return t
}
i.certificateFromPem = function(e, t, r) {
var s = a.pem.decode(e)[0];
if ("CERTIFICATE" !== s.type && "X509 CERTIFICATE" !== s.type && "TRUSTED CERTIFICATE" !== s.type) {
var o = new Error('Could not convert certificate from PEM; PEM header type is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".');
throw o.headerType = s.type,
o
}
if (s.procType && "ENCRYPTED" === s.procType.type)
throw new Error("Could not convert certificate from PEM; PEM is encrypted.");
var c = n.fromDer(s.body, r);
return i.certificateFromAsn1(c, t)
}
,
i.certificateToPem = function(e, t) {
var r = {
type: "CERTIFICATE",
body: n.toDer(i.certificateToAsn1(e)).getBytes()
};
return a.pem.encode(r, {
maxline: t
})
}
,
i.publicKeyFromPem = function(e) {
var t = a.pem.decode(e)[0];
if ("PUBLIC KEY" !== t.type && "RSA PUBLIC KEY" !== t.type) {
var r = new Error('Could not convert public key from PEM; PEM header type is not "PUBLIC KEY" or "RSA PUBLIC KEY".');
throw r.headerType = t.type,
r
}
if (t.procType && "ENCRYPTED" === t.procType.type)
throw new Error("Could not convert public key from PEM; PEM is encrypted.");
var s = n.fromDer(t.body);
return i.publicKeyFromAsn1(s)
}
,
i.publicKeyToPem = function(e, t) {
var r = {
type: "PUBLIC KEY",
body: n.toDer(i.publicKeyToAsn1(e)).getBytes()
};
return a.pem.encode(r, {
maxline: t
})
}
,
i.publicKeyToRSAPublicKeyPem = function(e, t) {
var r = {
type: "RSA PUBLIC KEY",
body: n.toDer(i.publicKeyToRSAPublicKey(e)).getBytes()
};
return a.pem.encode(r, {
maxline: t
})
}
,
i.getPublicKeyFingerprint = function(e, t) {
var r, s = (t = t || {}).md || a.md.sha1.create();
switch (t.type || "RSAPublicKey") {
case "RSAPublicKey":
r = n.toDer(i.publicKeyToRSAPublicKey(e)).getBytes();
break;
case "SubjectPublicKeyInfo":
r = n.toDer(i.publicKeyToAsn1(e)).getBytes();
break;
default:
throw new Error('Unknown fingerprint type "' + t.type + '".')
}
s.start(),
s.update(r);
var o = s.digest();
if ("hex" === t.encoding) {
var c = o.toHex();
return t.delimiter ? c.match(/.{2}/g).join(t.delimiter) : c
}
if ("binary" === t.encoding)
return o.getBytes();
if (t.encoding)
throw new Error('Unknown encoding "' + t.encoding + '".');
return o
}
,
i.certificationRequestFromPem = function(e, t, r) {
var s = a.pem.decode(e)[0];
if ("CERTIFICATE REQUEST" !== s.type) {
var o = new Error('Could not convert certification request from PEM; PEM header type is not "CERTIFICATE REQUEST".');
throw o.headerType = s.type,
o
}
if (s.procType && "ENCRYPTED" === s.procType.type)
throw new Error("Could not convert certification request from PEM; PEM is encrypted.");
var c = n.fromDer(s.body, r);
return i.certificationRequestFromAsn1(c, t)
}
,
i.certificationRequestToPem = function(e, t) {
var r = {
type: "CERTIFICATE REQUEST",
body: n.toDer(i.certificationRequestToAsn1(e)).getBytes()
};
return a.pem.encode(r, {
maxline: t
})
}
,
i.createCertificate = function() {
var e = {
version: 2,
serialNumber: "00",
signatureOid: null,
signature: null,
siginfo: {}
};
return e.siginfo.algorithmOid = null,
e.validity = {},
e.validity.notBefore = new Date,
e.validity.notAfter = new Date,
e.issuer = {},
e.issuer.getField = function(t) {
return h(e.issuer, t)
}
,
e.issuer.addField = function(t) {
m([t]),
e.issuer.attributes.push(t)
}
,
e.issuer.attributes = [],
e.issuer.hash = null,
e.subject = {},
e.subject.getField = function(t) {
return h(e.subject, t)
}
,
e.subject.addField = function(t) {
m([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, r) {
m(t),
e.subject.attributes = t,
delete e.subject.uniqueId,
r && (e.subject.uniqueId = r),
e.subject.hash = null
}
,
e.setIssuer = function(t, r) {
m(t),
e.issuer.attributes = t,
delete e.issuer.uniqueId,
r && (e.issuer.uniqueId = r),
e.issuer.hash = null
}
,
e.setExtensions = function(t) {
for (var r = 0; r < t.length; ++r)
C(t[r], {
cert: e
});
e.extensions = t
}
,
e.getExtension = function(t) {
"string" == typeof t && (t = {
name: t
});
for (var r, a = null, n = 0; null === a && n < e.extensions.length; ++n)
r = e.extensions[n],
(t.id && r.id === t.id || t.name && r.name === t.name) && (a = r);
return a
}
,
e.sign = function(t, r) {
e.md = r || a.md.sha1.create();
var o = s[e.md.algorithm + "WithRSAEncryption"];
if (!o) {
var c = new Error("Could not compute certificate digest. Unknown message digest algorithm OID.");
throw c.algorithm = e.md.algorithm,
c
}
e.signatureOid = e.siginfo.algorithmOid = o,
e.tbsCertificate = i.getTBSCertificate(e);
var u = n.toDer(e.tbsCertificate);
e.md.update(u.getBytes()),
e.signature = t.sign(e.md)
}
,
e.verify = function(t) {
var r = !1;
if (!e.issued(t)) {
var a = t.issuer
, s = e.subject
, o = 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 o.expectedIssuer = s.attributes,
o.actualIssuer = a.attributes,
o
}
var c = t.md;
if (null === c) {
c = y({
signatureOid: t.signatureOid,
type: "certificate"
});
var u = t.tbsCertificate || i.getTBSCertificate(t)
, l = n.toDer(u);
c.update(l.getBytes())
}
return null !== c && (r = g({
certificate: e,
md: c,
signature: t.signature
})),
r
}
,
e.isIssuer = function(t) {
var r = !1
, a = e.issuer
, n = t.subject;
if (a.hash && n.hash)
r = a.hash === n.hash;
else if (a.attributes.length === n.attributes.length) {
var i, s;
r = !0;
for (var o = 0; r && o < a.attributes.length; ++o)
i = a.attributes[o],
s = n.attributes[o],
i.type === s.type && i.value === s.value || (r = !1)
}
return r
}
,
e.issued = function(t) {
return t.isIssuer(e)
}
,
e.generateSubjectKeyIdentifier = function() {
return i.getPublicKeyFingerprint(e.publicKey, {
type: "RSAPublicKey"
})
}
,
e.verifySubjectKeyIdentifier = function() {
for (var t = s.subjectKeyIdentifier, r = 0; r < e.extensions.length; ++r) {
var n = e.extensions[r];
if (n.id === t) {
var i = e.generateSubjectKeyIdentifier().getBytes();
return a.util.hexToBytes(n.subjectKeyIdentifier) === i
}
}
return !1
}
,
e
}
,
i.certificateFromAsn1 = function(e, t) {
var r = {}
, s = [];
if (!n.validate(e, u, r, s)) {
var o = new Error("Cannot read X.509 certificate. ASN.1 object is not an X509v3 Certificate.");
throw o.errors = s,
o
}
if (n.derToOid(r.publicKeyOid) !== i.oids.rsaEncryption)
throw new Error("Cannot read public key. OID is not RSA.");
var c = i.createCertificate();
c.version = r.certVersion ? r.certVersion.charCodeAt(0) : 0;
var l = a.util.createBuffer(r.certSerialNumber);
c.serialNumber = l.toHex(),
c.signatureOid = a.asn1.derToOid(r.certSignatureOid),
c.signatureParameters = d(c.signatureOid, r.certSignatureParams, !0),
c.siginfo.algorithmOid = a.asn1.derToOid(r.certinfoSignatureOid),
c.siginfo.parameters = d(c.siginfo.algorithmOid, r.certinfoSignatureParams, !1),
c.signature = r.certSignature;
var p = [];
if (void 0 !== r.certValidity1UTCTime && p.push(n.utcTimeToDate(r.certValidity1UTCTime)),
void 0 !== r.certValidity2GeneralizedTime && p.push(n.generalizedTimeToDate(r.certValidity2GeneralizedTime)),
void 0 !== r.certValidity3UTCTime && p.push(n.utcTimeToDate(r.certValidity3UTCTime)),
void 0 !== r.certValidity4GeneralizedTime && p.push(n.generalizedTimeToDate(r.certValidity4GeneralizedTime)),
p.length > 2)
throw new Error("Cannot read notBefore/notAfter validity times; more than two times were provided in the certificate.");
if (p.length < 2)
throw new Error("Cannot read notBefore/notAfter validity times; they were not provided as either UTCTime or GeneralizedTime.");
if (c.validity.notBefore = p[0],
c.validity.notAfter = p[1],
c.tbsCertificate = r.tbsCertificate,
t) {
c.md = y({
signatureOid: c.signatureOid,
type: "certificate"
});
var f = n.toDer(c.tbsCertificate);
c.md.update(f.getBytes())
}
var g = a.md.sha1.create()
, v = n.toDer(r.certIssuer);
g.update(v.getBytes()),
c.issuer.getField = function(e) {
return h(c.issuer, e)
}
,
c.issuer.addField = function(e) {
m([e]),
c.issuer.attributes.push(e)
}
,
c.issuer.attributes = i.RDNAttributesAsArray(r.certIssuer),
r.certIssuerUniqueId && (c.issuer.uniqueId = r.certIssuerUniqueId),
c.issuer.hash = g.digest().toHex();
var C = a.md.sha1.create()
, E = n.toDer(r.certSubject);
return C.update(E.getBytes()),
c.subject.getField = function(e) {
return h(c.subject, e)
}
,
c.subject.addField = function(e) {
m([e]),
c.subject.attributes.push(e)
}
,
c.subject.attributes = i.RDNAttributesAsArray(r.certSubject),
r.certSubjectUniqueId && (c.subject.uniqueId = r.certSubjectUniqueId),
c.subject.hash = C.digest().toHex(),
r.certExtensions ? c.extensions = i.certificateExtensionsFromAsn1(r.certExtensions) : c.extensions = [],
c.publicKey = i.publicKeyFromAsn1(r.subjectPublicKeyInfo),
c
}
,
i.certificateExtensionsFromAsn1 = function(e) {
for (var t = [], r = 0; r < e.value.length; ++r)
for (var a = e.value[r], n = 0; n < a.value.length; ++n)
t.push(i.certificateExtensionFromAsn1(a.value[n]));
return t
}
,
i.certificateExtensionFromAsn1 = function(e) {
var t = {};
if (t.id = n.derToOid(e.value[0].value),
t.critical = !1,
e.value[1].type === n.Type.BOOLEAN ? (t.critical = 0 !== e.value[1].value.charCodeAt(0),
t.value = e.value[2].value) : t.value = e.value[1].value,
t.id in s)
if (t.name = s[t.id],
"keyUsage" === t.name) {
var r = 0
, i = 0;
(c = n.fromDer(t.value)).value.length > 1 && (r = c.value.charCodeAt(1),
i = c.value.length > 2 ? c.value.charCodeAt(2) : 0),
t.digitalSignature = 128 == (128 & r),
t.nonRepudiation = 64 == (64 & r),
t.keyEncipherment = 32 == (32 & r),
t.dataEncipherment = 16 == (16 & r),
t.keyAgreement = 8 == (8 & r),
t.keyCertSign = 4 == (4 & r),
t.cRLSign = 2 == (2 & r),
t.encipherOnly = 1 == (1 & r),
t.decipherOnly = 128 == (128 & i)
} else if ("basicConstraints" === t.name) {
(c = n.fromDer(t.value)).value.length > 0 && c.value[0].type === n.Type.BOOLEAN ? t.cA = 0 !== c.value[0].value.charCodeAt(0) : t.cA = !1;
var o = null;
c.value.length > 0 && c.value[0].type === n.Type.INTEGER ? o = c.value[0].value : c.value.length > 1 && (o = c.value[1].value),
null !== o && (t.pathLenConstraint = n.derToInteger(o))
} else if ("extKeyUsage" === t.name)
for (var c = n.fromDer(t.value), u = 0; u < c.value.length; ++u) {
var l = n.derToOid(c.value[u].value);
l in s ? t[s[l]] = !0 : t[l] = !0
}
else if ("nsCertType" === t.name) {
r = 0;
(c = n.fromDer(t.value)).value.length > 1 && (r = c.value.charCodeAt(1)),
t.client = 128 == (128 & r),
t.server = 64 == (64 & r),
t.email = 32 == (32 & r),
t.objsign = 16 == (16 & r),
t.reserved = 8 == (8 & r),
t.sslCA = 4 == (4 & r),
t.emailCA = 2 == (2 & r),
t.objCA = 1 == (1 & r)
} else if ("subjectAltName" === t.name || "issuerAltName" === t.name) {
var p;
t.altNames = [];
c = n.fromDer(t.value);
for (var f = 0; f < c.value.length; ++f) {
var h = {
type: (p = c.value[f]).type,
value: p.value
};
switch (t.altNames.push(h),
p.type) {
case 1:
case 2:
case 6:
break;
case 7:
h.ip = a.util.bytesToIP(p.value);
break;
case 8:
h.oid = n.derToOid(p.value)
}
}
} else if ("subjectKeyIdentifier" === t.name) {
c = n.fromDer(t.value);
t.subjectKeyIdentifier = a.util.bytesToHex(c.value)
}
return t
}
,
i.certificationRequestFromAsn1 = function(e, t) {
var r = {}
, s = [];
if (!n.validate(e, f, r, s)) {
var o = new Error("Cannot read PKCS#10 certificate request. ASN.1 object is not a PKCS#10 CertificationRequest.");
throw o.errors = s,
o
}
if (n.derToOid(r.publicKeyOid) !== i.oids.rsaEncryption)
throw new Error("Cannot read public key. OID is not RSA.");
var c = i.createCertificationRequest();
if (c.version = r.csrVersion ? r.csrVersion.charCodeAt(0) : 0,
c.signatureOid = a.asn1.derToOid(r.csrSignatureOid),
c.signatureParameters = d(c.signatureOid, r.csrSignatureParams, !0),
c.siginfo.algorithmOid = a.asn1.derToOid(r.csrSignatureOid),
c.siginfo.parameters = d(c.siginfo.algorithmOid, r.csrSignatureParams, !1),
c.signature = r.csrSignature,
c.certificationRequestInfo = r.certificationRequestInfo,
t) {
c.md = y({
signatureOid: c.signatureOid,
type: "certification request"
});
var u = n.toDer(c.certificationRequestInfo);
c.md.update(u.getBytes())
}
var l = a.md.sha1.create();
return c.subject.getField = function(e) {
return h(c.subject, e)
}
,
c.subject.addField = function(e) {
m([e]),
c.subject.attributes.push(e)
}
,
c.subject.attributes = i.RDNAttributesAsArray(r.certificationRequestInfoSubject, l),
c.subject.hash = l.digest().toHex(),
c.publicKey = i.publicKeyFromAsn1(r.subjectPublicKeyInfo),
c.getAttribute = function(e) {
return h(c, e)
}
,
c.addAttribute = function(e) {
m([e]),
c.attributes.push(e)
}
,
c.attributes = i.CRIAttributesAsArray(r.certificationRequestInfoAttributes || []),
c
}
,
i.createCertificationRequest = function() {
var e = {
version: 0,
signatureOid: null,
signature: null,
siginfo: {}
};
return e.siginfo.algorithmOid = null,
e.subject = {},
e.subject.getField = function(t) {
return h(e.subject, t)
}
,
e.subject.addField = function(t) {
m([t]),
e.subject.attributes.push(t)
}
,
e.subject.attributes = [],
e.subject.hash = null,
e.publicKey = null,
e.attributes = [],
e.getAttribute = function(t) {
return h(e, t)
}
,
e.addAttribute = function(t) {
m([t]),
e.attributes.push(t)
}
,
e.md = null,
e.setSubject = function(t) {
m(t),
e.subject.attributes = t,
e.subject.hash = null
}
,
e.setAttributes = function(t) {
m(t),
e.attributes = t
}
,
e.sign = function(t, r) {
e.md = r || a.md.sha1.create();
var o = s[e.md.algorithm + "WithRSAEncryption"];
if (!o) {
var c = new Error("Could not compute certification request digest. Unknown message digest algorithm OID.");
throw c.algorithm = e.md.algorithm,
c
}
e.signatureOid = e.siginfo.algorithmOid = o,
e.certificationRequestInfo = i.getCertificationRequestInfo(e);
var u = n.toDer(e.certificationRequestInfo);
e.md.update(u.getBytes()),
e.signature = t.sign(e.md)
}
,
e.verify = function() {
var t = !1
, r = e.md;
if (null === r) {
r = y({
signatureOid: e.signatureOid,
type: "certification request"
});
var a = e.certificationRequestInfo || i.getCertificationRequestInfo(e)
, s = n.toDer(a);
r.update(s.getBytes())
}
return null !== r && (t = g({
certificate: e,
md: r,
signature: e.signature
})),
t
}
,
e
}
;
var T = new Date("1950-01-01T00:00:00Z")
, I = new Date("2050-01-01T00:00:00Z");
function A(e) {
return e >= T && e < I ? n.create(n.Class.UNIVERSAL, n.Type.UTCTIME, !1, n.dateToUtcTime(e)) : n.create(n.Class.UNIVERSAL, n.Type.GENERALIZEDTIME, !1, n.dateToGeneralizedTime(e))
}
i.getTBSCertificate = function(e) {
var t = A(e.validity.notBefore)
, r = A(e.validity.notAfter)
, s = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, n.integerToDer(e.version).getBytes())]), n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, a.util.hexToBytes(e.serialNumber)), n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(e.siginfo.algorithmOid).getBytes()), E(e.siginfo.algorithmOid, e.siginfo.parameters)]), v(e.issuer), n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [t, r]), v(e.subject), i.publicKeyToAsn1(e.publicKey)]);
return e.issuer.uniqueId && s.value.push(n.create(n.Class.CONTEXT_SPECIFIC, 1, !0, [n.create(n.Class.UNIVERSAL, n.Type.BITSTRING, !1, String.fromCharCode(0) + e.issuer.uniqueId)])),
e.subject.uniqueId && s.value.push(n.create(n.Class.CONTEXT_SPECIFIC, 2, !0, [n.create(n.Class.UNIVERSAL, n.Type.BITSTRING, !1, String.fromCharCode(0) + e.subject.uniqueId)])),
e.extensions.length > 0 && s.value.push(i.certificateExtensionsToAsn1(e.extensions)),
s
}
,
i.getCertificationRequestInfo = function(e) {
return n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, n.integerToDer(e.version).getBytes()), v(e.subject), i.publicKeyToAsn1(e.publicKey), S(e)])
}
,
i.distinguishedNameToAsn1 = function(e) {
return v(e)
}
,
i.certificateToAsn1 = function(e) {
var t = e.tbsCertificate || i.getTBSCertificate(e);
return n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [t, n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(e.signatureOid).getBytes()), E(e.signatureOid, e.signatureParameters)]), n.create(n.Class.UNIVERSAL, n.Type.BITSTRING, !1, String.fromCharCode(0) + e.signature)])
}
,
i.certificateExtensionsToAsn1 = function(e) {
var t = n.create(n.Class.CONTEXT_SPECIFIC, 3, !0, [])
, r = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, []);
t.value.push(r);
for (var a = 0; a < e.length; ++a)
r.value.push(i.certificateExtensionToAsn1(e[a]));
return t
}
,
i.certificateExtensionToAsn1 = function(e) {
var t = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, []);
t.value.push(n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(e.id).getBytes())),
e.critical && t.value.push(n.create(n.Class.UNIVERSAL, n.Type.BOOLEAN, !1, String.fromCharCode(255)));
var r = e.value;
return "string" != typeof e.value && (r = n.toDer(r).getBytes()),
t.value.push(n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, r)),
t
}
,
i.certificationRequestToAsn1 = function(e) {
var t = e.certificationRequestInfo || i.getCertificationRequestInfo(e);
return n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [t, n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(e.signatureOid).getBytes()), E(e.signatureOid, e.signatureParameters)]), n.create(n.Class.UNIVERSAL, n.Type.BITSTRING, !1, String.fromCharCode(0) + e.signature)])
}
,
i.createCaStore = function(e) {
var t = {
certs: {}
};
function r(e) {
return s(e),
t.certs[e.hash] || null
}
function s(e) {
if (!e.hash) {
var t = a.md.sha1.create();
e.attributes = i.RDNAttributesAsArray(v(e), t),
e.hash = t.digest().toHex()
}
}
if (t.getIssuer = function(e) {
return r(e.issuer)
}
,
t.addCertificate = function(e) {
if ("string" == typeof e && (e = a.pki.certificateFromPem(e)),
s(e.subject),
!t.hasCertificate(e))
if (e.subject.hash in t.certs) {
var r = t.certs[e.subject.hash];
a.util.isArray(r) || (r = [r]),
r.push(e),
t.certs[e.subject.hash] = r
} else
t.certs[e.subject.hash] = e
}
,
t.hasCertificate = function(e) {
"string" == typeof e && (e = a.pki.certificateFromPem(e));
var t = r(e.subject);
if (!t)
return !1;
a.util.isArray(t) || (t = [t]);
for (var s = n.toDer(i.certificateToAsn1(e)).getBytes(), o = 0; o < t.length; ++o) {
if (s === n.toDer(i.certificateToAsn1(t[o])).getBytes())
return !0
}
return !1
}
,
t.listAllCertificates = function() {
var e = [];
for (var r in t.certs)
if (t.certs.hasOwnProperty(r)) {
var n = t.certs[r];
if (a.util.isArray(n))
for (var i = 0; i < n.length; ++i)
e.push(n[i]);
else
e.push(n)
}
return e
}
,
t.removeCertificate = function(e) {
var o;
if ("string" == typeof e && (e = a.pki.certificateFromPem(e)),
s(e.subject),
!t.hasCertificate(e))
return null;
var c = r(e.subject);
if (!a.util.isArray(c))
return o = t.certs[e.subject.hash],
delete t.certs[e.subject.hash],
o;
for (var u = n.toDer(i.certificateToAsn1(e)).getBytes(), l = 0; l < c.length; ++l) {
u === n.toDer(i.certificateToAsn1(c[l])).getBytes() && (o = c[l],
c.splice(l, 1))
}
return 0 === c.length && delete t.certs[e.subject.hash],
o
}
,
e)
for (var o = 0; o < e.length; ++o) {
var c = e[o];
t.addCertificate(c)
}
return t
}
,
i.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"
},
i.verifyCertificateChain = function(e, t, r) {
"function" == typeof r && (r = {
verify: r
}),
r = r || {};
var n = (t = t.slice(0)).slice(0)
, s = r.validityCheckDate;
void 0 === s && (s = new Date);
var o = !0
, c = null
, u = 0;
do {
var l = t.shift()
, p = null
, f = !1;
if (s && (s < l.validity.notBefore || s > l.validity.notAfter) && (c = {
message: "Certificate is not valid yet or has expired.",
error: i.certificateError.certificate_expired,
notBefore: l.validity.notBefore,
notAfter: l.validity.notAfter,
now: s
}),
null === c) {
if (null === (p = t[0] || e.getIssuer(l)) && l.isIssuer(l) && (f = !0,
p = l),
p) {
var h = p;
a.util.isArray(h) || (h = [h]);
for (var d = !1; !d && h.length > 0; ) {
p = h.shift();
try {
d = p.verify(l)
} catch (e) {}
}
d || (c = {
message: "Certificate signature is invalid.",
error: i.certificateError.bad_certificate
})
}
null !== c || p && !f || e.hasCertificate(l) || (c = {
message: "Certificate is not trusted.",
error: i.certificateError.unknown_ca
})
}
if (null === c && p && !l.isIssuer(p) && (c = {
message: "Certificate issuer is invalid.",
error: i.certificateError.bad_certificate
}),
null === c)
for (var y = {
keyUsage: !0,
basicConstraints: !0
}, g = 0; null === c && g < l.extensions.length; ++g) {
var v = l.extensions[g];
v.critical && !(v.name in y) && (c = {
message: "Certificate has an unsupported critical extension.",
error: i.certificateError.unsupported_certificate
})
}
if (null === c && (!o || 0 === t.length && (!p || f))) {
var m = l.getExtension("basicConstraints")
, C = l.getExtension("keyUsage");
if (null !== C && (C.keyCertSign && null !== m || (c = {
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: i.certificateError.bad_certificate
})),
null !== c || null === m || m.cA || (c = {
message: "Certificate basicConstraints indicates the certificate is not a CA.",
error: i.certificateError.bad_certificate
}),
null === c && null !== C && "pathLenConstraint"in m)
u - 1 > m.pathLenConstraint && (c = {
message: "Certificate basicConstraints pathLenConstraint violated.",
error: i.certificateError.bad_certificate
})
}
var E = null === c || c.error
, S = r.verify ? r.verify(E, u, n) : E;
if (!0 !== S)
throw !0 === E && (c = {
message: "The application rejected the certificate.",
error: i.certificateError.bad_certificate
}),
(S || 0 === S) && ("object" != typeof S || a.util.isArray(S) ? "string" == typeof S && (c.error = S) : (S.message && (c.message = S.message),
S.error && (c.error = S.error))),
c;
c = null,
o = !1,
++u
} while (t.length > 0);
return !0
}
}
, function(e, t, r) {
var a = r(0);
r(2),
r(1),
(e.exports = a.pss = a.pss || {}).create = function(e) {
3 === arguments.length && (e = {
md: arguments[0],
mgf: arguments[1],
saltLength: arguments[2]
});
var t, r = e.md, n = e.mgf, i = r.digestLength, s = e.salt || null;
if ("string" == typeof s && (s = a.util.createBuffer(s)),
"saltLength"in e)
t = e.saltLength;
else {
if (null === s)
throw new Error("Salt length not specified or specific salt not given.");
t = s.length()
}
if (null !== s && s.length() !== t)
throw new Error("Given salt length does not match length of given salt.");
var o = e.prng || a.random
, c = {
encode: function(e, c) {
var u, l, p = c - 1, f = Math.ceil(p / 8), h = e.digest().getBytes();
if (f < i + t + 2)
throw new Error("Message is too long to encrypt.");
l = null === s ? o.getBytesSync(t) : s.bytes();
var d = new a.util.ByteBuffer;
d.fillWithByte(0, 8),
d.putBytes(h),
d.putBytes(l),
r.start(),
r.update(d.getBytes());
var y = r.digest().getBytes()
, g = new a.util.ByteBuffer;
g.fillWithByte(0, f - t - i - 2),
g.putByte(1),
g.putBytes(l);
var v = g.getBytes()
, m = f - i - 1
, C = n.generate(y, m)
, E = "";
for (u = 0; u < m; u++)
E += String.fromCharCode(v.charCodeAt(u) ^ C.charCodeAt(u));
var S = 65280 >> 8 * f - p & 255;
return (E = String.fromCharCode(E.charCodeAt(0) & ~S) + E.substr(1)) + y + String.fromCharCode(188)
},
verify: function(e, s, o) {
var c, u = o - 1, l = Math.ceil(u / 8);
if (s = s.substr(-l),
l < i + t + 2)
throw new Error("Inconsistent parameters to PSS signature verification.");
if (188 !== s.charCodeAt(l - 1))
throw new Error("Encoded message does not end in 0xBC.");
var p = l - i - 1
, f = s.substr(0, p)
, h = s.substr(p, i)
, d = 65280 >> 8 * l - u & 255;
if (0 != (f.charCodeAt(0) & d))
throw new Error("Bits beyond keysize not zero as expected.");
var y = n.generate(h, p)
, g = "";
for (c = 0; c < p; c++)
g += String.fromCharCode(f.charCodeAt(c) ^ y.charCodeAt(c));
g = String.fromCharCode(g.charCodeAt(0) & ~d) + g.substr(1);
var v = l - i - t - 2;
for (c = 0; c < v; c++)
if (0 !== g.charCodeAt(c))
throw new Error("Leftmost octets not zero as expected");
if (1 !== g.charCodeAt(v))
throw new Error("Inconsistent PSS signature, 0x01 marker not found");
var m = g.substr(-t)
, C = new a.util.ByteBuffer;
return C.fillWithByte(0, 8),
C.putBytes(e),
C.putBytes(m),
r.start(),
r.update(C.getBytes()),
h === r.digest().getBytes()
}
};
return c
}
}
, function(e, t, r) {
var a = r(0);
r(1),
a.cipher = a.cipher || {};
var n = e.exports = a.cipher.modes = a.cipher.modes || {};
function i(e, t) {
if ("string" == typeof e && (e = a.util.createBuffer(e)),
a.util.isArray(e) && e.length > 4) {
var r = e;
e = a.util.createBuffer();
for (var n = 0; n < r.length; ++n)
e.putByte(r[n])
}
if (e.length() < t)
throw new Error("Invalid IV length; got " + e.length() + " bytes and expected " + t + " bytes.");
if (!a.util.isArray(e)) {
var i = []
, s = t / 4;
for (n = 0; n < s; ++n)
i.push(e.getInt32());
e = i
}
return e
}
function s(e) {
e[e.length - 1] = e[e.length - 1] + 1 & 4294967295
}
function o(e) {
return [e / 4294967296 | 0, 4294967295 & e]
}
n.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)
}
,
n.ecb.prototype.start = function(e) {}
,
n.ecb.prototype.encrypt = function(e, t, r) {
if (e.length() < this.blockSize && !(r && e.length() > 0))
return !0;
for (var a = 0; a < this._ints; ++a)
this._inBlock[a] = e.getInt32();
this.cipher.encrypt(this._inBlock, this._outBlock);
for (a = 0; a < this._ints; ++a)
t.putInt32(this._outBlock[a])
}
,
n.ecb.prototype.decrypt = function(e, t, r) {
if (e.length() < this.blockSize && !(r && e.length() > 0))
return !0;
for (var a = 0; a < this._ints; ++a)
this._inBlock[a] = e.getInt32();
this.cipher.decrypt(this._inBlock, this._outBlock);
for (a = 0; a < this._ints; ++a)
t.putInt32(this._outBlock[a])
}
,
n.ecb.prototype.pad = function(e, t) {
var r = e.length() === this.blockSize ? this.blockSize : this.blockSize - e.length();
return e.fillWithByte(r, r),
!0
}
,
n.ecb.prototype.unpad = function(e, t) {
if (t.overflow > 0)
return !1;
var r = e.length()
, a = e.at(r - 1);
return !(a > this.blockSize << 2) && (e.truncate(a),
!0)
}
,
n.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)
}
,
n.cbc.prototype.start = function(e) {
if (null === e.iv) {
if (!this._prev)
throw new Error("Invalid IV parameter.");
this._iv = this._prev.slice(0)
} else {
if (!("iv"in e))
throw new Error("Invalid IV parameter.");
this._iv = i(e.iv, this.blockSize),
this._prev = this._iv.slice(0)
}
}
,
n.cbc.prototype.encrypt = function(e, t, r) {
if (e.length() < this.blockSize && !(r && e.length() > 0))
return !0;
for (var a = 0; a < this._ints; ++a)
this._inBlock[a] = this._prev[a] ^ e.getInt32();
this.cipher.encrypt(this._inBlock, this._outBlock);
for (a = 0; a < this._ints; ++a)
t.putInt32(this._outBlock[a]);
this._prev = this._outBlock
}
,
n.cbc.prototype.decrypt = function(e, t, r) {
if (e.length() < this.blockSize && !(r && e.length() > 0))
return !0;
for (var a = 0; a < this._ints; ++a)
this._inBlock[a] = e.getInt32();
this.cipher.decrypt(this._inBlock, this._outBlock);
for (a = 0; a < this._ints; ++a)
t.putInt32(this._prev[a] ^ this._outBlock[a]);
this._prev = this._inBlock.slice(0)
}
,
n.cbc.prototype.pad = function(e, t) {
var r = e.length() === this.blockSize ? this.blockSize : this.blockSize - e.length();
return e.fillWithByte(r, r),
!0
}
,
n.cbc.prototype.unpad = function(e, t) {
if (t.overflow > 0)
return !1;
var r = e.length()
, a = e.at(r - 1);
return !(a > this.blockSize << 2) && (e.truncate(a),
!0)
}
,
n.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 = a.util.createBuffer(),
this._partialBytes = 0
}
,
n.cfb.prototype.start = function(e) {
if (!("iv"in e))
throw new Error("Invalid IV parameter.");
this._iv = i(e.iv, this.blockSize),
this._inBlock = this._iv.slice(0),
this._partialBytes = 0
}
,
n.cfb.prototype.encrypt = function(e, t, r) {
var a = e.length();
if (0 === a)
return !0;
if (this.cipher.encrypt(this._inBlock, this._outBlock),
0 === this._partialBytes && a >= this.blockSize)
for (var n = 0; n < this._ints; ++n)
this._inBlock[n] = e.getInt32() ^ this._outBlock[n],
t.putInt32(this._inBlock[n]);
else {
var i = (this.blockSize - a) % this.blockSize;
i > 0 && (i = this.blockSize - i),
this._partialOutput.clear();
for (n = 0; n < this._ints; ++n)
this._partialBlock[n] = e.getInt32() ^ this._outBlock[n],
this._partialOutput.putInt32(this._partialBlock[n]);
if (i > 0)
e.read -= this.blockSize;
else
for (n = 0; n < this._ints; ++n)
this._inBlock[n] = this._partialBlock[n];
if (this._partialBytes > 0 && this._partialOutput.getBytes(this._partialBytes),
i > 0 && !r)
return t.putBytes(this._partialOutput.getBytes(i - this._partialBytes)),
this._partialBytes = i,
!0;
t.putBytes(this._partialOutput.getBytes(a - this._partialBytes)),
this._partialBytes = 0
}
}
,
n.cfb.prototype.decrypt = function(e, t, r) {
var a = e.length();
if (0 === a)
return !0;
if (this.cipher.encrypt(this._inBlock, this._outBlock),
0 === this._partialBytes && a >= this.blockSize)
for (var n = 0; n < this._ints; ++n)
this._inBlock[n] = e.getInt32(),
t.putInt32(this._inBlock[n] ^ this._outBlock[n]);
else {
var i = (this.blockSize - a) % this.blockSize;
i > 0 && (i = this.blockSize - i),
this._partialOutput.clear();
for (n = 0; n < this._ints; ++n)
this._partialBlock[n] = e.getInt32(),
this._partialOutput.putInt32(this._partialBlock[n] ^ this._outBlock[n]);
if (i > 0)
e.read -= this.blockSize;
else
for (n = 0; n < this._ints; ++n)
this._inBlock[n] = this._partialBlock[n];
if (this._partialBytes > 0 && this._partialOutput.getBytes(this._partialBytes),
i > 0 && !r)
return t.putBytes(this._partialOutput.getBytes(i - this._partialBytes)),
this._partialBytes = i,
!0;
t.putBytes(this._partialOutput.getBytes(a - this._partialBytes)),
this._partialBytes = 0
}
}
,
n.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 = a.util.createBuffer(),
this._partialBytes = 0
}
,
n.ofb.prototype.start = function(e) {
if (!("iv"in e))
throw new Error("Invalid IV parameter.");
this._iv = i(e.iv, this.blockSize),
this._inBlock = this._iv.slice(0),
this._partialBytes = 0
}
,
n.ofb.prototype.encrypt = function(e, t, r) {
var a = e.length();
if (0 === e.length())
return !0;
if (this.cipher.encrypt(this._inBlock, this._outBlock),
0 === this._partialBytes && a >= this.blockSize)
for (var n = 0; n < this._ints; ++n)
t.putInt32(e.getInt32() ^ this._outBlock[n]),
this._inBlock[n] = this._outBlock[n];
else {
var i = (this.blockSize - a) % this.blockSize;
i > 0 && (i = this.blockSize - i),
this._partialOutput.clear();
for (n = 0; n < this._ints; ++n)
this._partialOutput.putInt32(e.getInt32() ^ this._outBlock[n]);
if (i > 0)
e.read -= this.blockSize;
else
for (n = 0; n < this._ints; ++n)
this._inBlock[n] = this._outBlock[n];
if (this._partialBytes > 0 && this._partialOutput.getBytes(this._partialBytes),
i > 0 && !r)
return t.putBytes(this._partialOutput.getBytes(i - this._partialBytes)),
this._partialBytes = i,
!0;
t.putBytes(this._partialOutput.getBytes(a - this._partialBytes)),
this._partialBytes = 0
}
}
,
n.ofb.prototype.decrypt = n.ofb.prototype.encrypt,
n.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 = a.util.createBuffer(),
this._partialBytes = 0
}
,
n.ctr.prototype.start = function(e) {
if (!("iv"in e))
throw new Error("Invalid IV parameter.");
this._iv = i(e.iv, this.blockSize),
this._inBlock = this._iv.slice(0),
this._partialBytes = 0
}
,
n.ctr.prototype.encrypt = function(e, t, r) {
var a = e.length();
if (0 === a)
return !0;
if (this.cipher.encrypt(this._inBlock, this._outBlock),
0 === this._partialBytes && a >= this.blockSize)
for (var n = 0; n < this._ints; ++n)
t.putInt32(e.getInt32() ^ this._outBlock[n]);
else {
var i = (this.blockSize - a) % this.blockSize;
i > 0 && (i = this.blockSize - i),
this._partialOutput.clear();
for (n = 0; n < this._ints; ++n)
this._partialOutput.putInt32(e.getInt32() ^ this._outBlock[n]);
if (i > 0 && (e.read -= this.blockSize),
this._partialBytes > 0 && this._partialOutput.getBytes(this._partialBytes),
i > 0 && !r)
return t.putBytes(this._partialOutput.getBytes(i - this._partialBytes)),
this._partialBytes = i,
!0;
t.putBytes(this._partialOutput.getBytes(a - this._partialBytes)),
this._partialBytes = 0
}
s(this._inBlock)
}
,
n.ctr.prototype.decrypt = n.ctr.prototype.encrypt,
n.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 = a.util.createBuffer(),
this._partialBytes = 0,
this._R = 3774873600
}
,
n.gcm.prototype.start = function(e) {
if (!("iv"in e))
throw new Error("Invalid IV parameter.");
var t, r = a.util.createBuffer(e.iv);
if (this._cipherLength = 0,
t = "additionalData"in e ? a.util.createBuffer(e.additionalData) : a.util.createBuffer(),
this._tagLength = "tagLength"in e ? e.tagLength : 128,
this._tag = null,
e.decrypt && (this._tag = a.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 n = r.length();
if (12 === n)
this._j0 = [r.getInt32(), r.getInt32(), r.getInt32(), 1];
else {
for (this._j0 = [0, 0, 0, 0]; r.length() > 0; )
this._j0 = this.ghash(this._hashSubkey, this._j0, [r.getInt32(), r.getInt32(), r.getInt32(), r.getInt32()]);
this._j0 = this.ghash(this._hashSubkey, this._j0, [0, 0].concat(o(8 * n)))
}
this._inBlock = this._j0.slice(0),
s(this._inBlock),
this._partialBytes = 0,
t = a.util.createBuffer(t),
this._aDataLength = o(8 * t.length());
var i = t.length() % this.blockSize;
for (i && t.fillWithByte(0, this.blockSize - i),
this._s = [0, 0, 0, 0]; t.length() > 0; )
this._s = this.ghash(this._hashSubkey, this._s, [t.getInt32(), t.getInt32(), t.getInt32(), t.getInt32()])
}
,
n.gcm.prototype.encrypt = function(e, t, r) {
var a = e.length();
if (0 === a)
return !0;
if (this.cipher.encrypt(this._inBlock, this._outBlock),
0 === this._partialBytes && a >= this.blockSize) {
for (var n = 0; n < this._ints; ++n)
t.putInt32(this._outBlock[n] ^= e.getInt32());
this._cipherLength += this.blockSize
} else {
var i = (this.blockSize - a) % this.blockSize;
i > 0 && (i = this.blockSize - i),
this._partialOutput.clear();
for (n = 0; n < this._ints; ++n)
this._partialOutput.putInt32(e.getInt32() ^ this._outBlock[n]);
if (i <= 0 || r) {
if (r) {
var o = a % this.blockSize;
this._cipherLength += o,
this._partialOutput.truncate(this.blockSize - o)
} else
this._cipherLength += this.blockSize;
for (n = 0; n < this._ints; ++n)
this._outBlock[n] = this._partialOutput.getInt32();
this._partialOutput.read -= this.blockSize
}
if (this._partialBytes > 0 && this._partialOutput.getBytes(this._partialBytes),
i > 0 && !r)
return e.read -= this.blockSize,
t.putBytes(this._partialOutput.getBytes(i - this._partialBytes)),
this._partialBytes = i,
!0;
t.putBytes(this._partialOutput.getBytes(a - this._partialBytes)),
this._partialBytes = 0
}
this._s = this.ghash(this._hashSubkey, this._s, this._outBlock),
s(this._inBlock)
}
,
n.gcm.prototype.decrypt = function(e, t, r) {
var a = e.length();
if (a < this.blockSize && !(r && a > 0))
return !0;
this.cipher.encrypt(this._inBlock, this._outBlock),
s(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 n = 0; n < this._ints; ++n)
t.putInt32(this._outBlock[n] ^ this._hashBlock[n]);
a < this.blockSize ? this._cipherLength += a % this.blockSize : this._cipherLength += this.blockSize
}
,
n.gcm.prototype.afterFinish = function(e, t) {
var r = !0;
t.decrypt && t.overflow && e.truncate(this.blockSize - t.overflow),
this.tag = a.util.createBuffer();
var n = this._aDataLength.concat(o(8 * this._cipherLength));
this._s = this.ghash(this._hashSubkey, this._s, n);
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 && (r = !1),
r
}
,
n.gcm.prototype.multiply = function(e, t) {
for (var r = [0, 0, 0, 0], a = t.slice(0), n = 0; n < 128; ++n) {
e[n / 32 | 0] & 1 << 31 - n % 32 && (r[0] ^= a[0],
r[1] ^= a[1],
r[2] ^= a[2],
r[3] ^= a[3]),
this.pow(a, a)
}
return r
}
,
n.gcm.prototype.pow = function(e, t) {
for (var r = 1 & e[3], a = 3; a > 0; --a)
t[a] = e[a] >>> 1 | (1 & e[a - 1]) << 31;
t[0] = e[0] >>> 1,
r && (t[0] ^= this._R)
}
,
n.gcm.prototype.tableMultiply = function(e) {
for (var t = [0, 0, 0, 0], r = 0; r < 32; ++r) {
var a = e[r / 8 | 0] >>> 4 * (7 - r % 8) & 15
, n = this._m[r][a];
t[0] ^= n[0],
t[1] ^= n[1],
t[2] ^= n[2],
t[3] ^= n[3]
}
return t
}
,
n.gcm.prototype.ghash = function(e, t, r) {
return t[0] ^= r[0],
t[1] ^= r[1],
t[2] ^= r[2],
t[3] ^= r[3],
this.tableMultiply(t)
}
,
n.gcm.prototype.generateHashTable = function(e, t) {
for (var r = 8 / t, a = 4 * r, n = 16 * r, i = new Array(n), s = 0; s < n; ++s) {
var o = [0, 0, 0, 0]
, c = (a - 1 - s % a) * t;
o[s / a | 0] = 1 << t - 1 << c,
i[s] = this.generateSubHashTable(this.multiply(o, e), t)
}
return i
}
,
n.gcm.prototype.generateSubHashTable = function(e, t) {
var r = 1 << t
, a = r >>> 1
, n = new Array(r);
n[a] = e.slice(0);
for (var i = a >>> 1; i > 0; )
this.pow(n[2 * i], n[i] = []),
i >>= 1;
for (i = 2; i < a; ) {
for (var s = 1; s < i; ++s) {
var o = n[i]
, c = n[s];
n[i + s] = [o[0] ^ c[0], o[1] ^ c[1], o[2] ^ c[2], o[3] ^ c[3]]
}
i *= 2
}
for (n[0] = [0, 0, 0, 0],
i = a + 1; i < r; ++i) {
var u = n[i ^ a];
n[i] = [e[0] ^ u[0], e[1] ^ u[1], e[2] ^ u[2], e[3] ^ u[3]]
}
return n
}
}
, function(e, t, r) {
var a = r(0);
r(3),
r(8),
r(14),
r(7),
r(21),
r(2),
r(9),
r(1);
var n = function(e, t, r, n) {
var i = a.util.createBuffer()
, s = e.length >> 1
, o = s + (1 & e.length)
, c = e.substr(0, o)
, u = e.substr(s, o)
, l = a.util.createBuffer()
, p = a.hmac.create();
r = t + r;
var f = Math.ceil(n / 16)
, h = Math.ceil(n / 20);
p.start("MD5", c);
var d = a.util.createBuffer();
l.putBytes(r);
for (var y = 0; y < f; ++y)
p.start(null, null),
p.update(l.getBytes()),
l.putBuffer(p.digest()),
p.start(null, null),
p.update(l.bytes() + r),
d.putBuffer(p.digest());
p.start("SHA1", u);
var g = a.util.createBuffer();
l.clear(),
l.putBytes(r);
for (y = 0; y < h; ++y)
p.start(null, null),
p.update(l.getBytes()),
l.putBuffer(p.digest()),
p.start(null, null),
p.update(l.bytes() + r),
g.putBuffer(p.digest());
return i.putBytes(a.util.xorBytes(d.getBytes(), g.getBytes(), n)),
i
}
, i = function(e, t, r) {
var n = !1;
try {
var i = e.deflate(t.fragment.getBytes());
t.fragment = a.util.createBuffer(i),
t.length = i.length,
n = !0
} catch (e) {}
return n
}
, s = function(e, t, r) {
var n = !1;
try {
var i = e.inflate(t.fragment.getBytes());
t.fragment = a.util.createBuffer(i),
t.length = i.length,
n = !0
} catch (e) {}
return n
}
, o = function(e, t) {
var r = 0;
switch (t) {
case 1:
r = e.getByte();
break;
case 2:
r = e.getInt16();
break;
case 3:
r = e.getInt24();
break;
case 4:
r = e.getInt32()
}
return a.util.createBuffer(e.getBytes(r))
}
, c = function(e, t, r) {
e.putInt(r.length(), t << 3),
e.putBuffer(r)
}
, u = {
Versions: {
TLS_1_0: {
major: 3,
minor: 1
},
TLS_1_1: {
major: 3,
minor: 2
},
TLS_1_2: {
major: 3,
minor: 3
}
}
};
u.SupportedVersions = [u.Versions.TLS_1_1, u.Versions.TLS_1_0],
u.Version = u.SupportedVersions[0],
u.MaxFragment = 15360,
u.ConnectionEnd = {
server: 0,
client: 1
},
u.PRFAlgorithm = {
tls_prf_sha256: 0
},
u.BulkCipherAlgorithm = {
none: null,
rc4: 0,
des3: 1,
aes: 2
},
u.CipherType = {
stream: 0,
block: 1,
aead: 2
},
u.MACAlgorithm = {
none: null,
hmac_md5: 0,
hmac_sha1: 1,
hmac_sha256: 2,
hmac_sha384: 3,
hmac_sha512: 4
},
u.CompressionMethod = {
none: 0,
deflate: 1
},
u.ContentType = {
change_cipher_spec: 20,
alert: 21,
handshake: 22,
application_data: 23,
heartbeat: 24
},
u.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
},
u.Alert = {},
u.Alert.Level = {
warning: 1,
fatal: 2
},
u.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
},
u.HeartbeatMessageType = {
heartbeat_request: 1,
heartbeat_response: 2
},
u.CipherSuites = {},
u.getCipherSuite = function(e) {
var t = null;
for (var r in u.CipherSuites) {
var a = u.CipherSuites[r];
if (a.id[0] === e.charCodeAt(0) && a.id[1] === e.charCodeAt(1)) {
t = a;
break
}
}
return t
}
,
u.handleUnexpected = function(e, t) {
!e.open && e.entity === u.ConnectionEnd.client || e.error(e, {
message: "Unexpected message. Received TLS record out of order.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.unexpected_message
}
})
}
,
u.handleHelloRequest = function(e, t, r) {
!e.handshaking && e.handshakes > 0 && (u.queue(e, u.createAlert(e, {
level: u.Alert.Level.warning,
description: u.Alert.Description.no_renegotiation
})),
u.flush(e)),
e.process()
}
,
u.parseHelloMessage = function(e, t, r) {
var n = null
, i = e.entity === u.ConnectionEnd.client;
if (r < 38)
e.error(e, {
message: i ? "Invalid ServerHello message. Message too short." : "Invalid ClientHello message. Message too short.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.illegal_parameter
}
});
else {
var s = t.fragment
, c = s.length();
if (n = {
version: {
major: s.getByte(),
minor: s.getByte()
},
random: a.util.createBuffer(s.getBytes(32)),
session_id: o(s, 1),
extensions: []
},
i ? (n.cipher_suite = s.getBytes(2),
n.compression_method = s.getByte()) : (n.cipher_suites = o(s, 2),
n.compression_methods = o(s, 1)),
(c = r - (c - s.length())) > 0) {
for (var l = o(s, 2); l.length() > 0; )
n.extensions.push({
type: [l.getByte(), l.getByte()],
data: o(l, 2)
});
if (!i)
for (var p = 0; p < n.extensions.length; ++p) {
var f = n.extensions[p];
if (0 === f.type[0] && 0 === f.type[1])
for (var h = o(f.data, 2); h.length() > 0; ) {
if (0 !== h.getByte())
break;
e.session.extensions.server_name.serverNameList.push(o(h, 2).getBytes())
}
}
}
if (e.session.version && (n.version.major !== e.session.version.major || n.version.minor !== e.session.version.minor))
return e.error(e, {
message: "TLS version change is disallowed during renegotiation.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.protocol_version
}
});
if (i)
e.session.cipherSuite = u.getCipherSuite(n.cipher_suite);
else
for (var d = a.util.createBuffer(n.cipher_suites.bytes()); d.length() > 0 && (e.session.cipherSuite = u.getCipherSuite(d.getBytes(2)),
null === e.session.cipherSuite); )
;
if (null === e.session.cipherSuite)
return e.error(e, {
message: "No cipher suites in common.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.handshake_failure
},
cipherSuite: a.util.bytesToHex(n.cipher_suite)
});
e.session.compressionMethod = i ? n.compression_method : u.CompressionMethod.none
}
return n
}
,
u.createSecurityParameters = function(e, t) {
var r = e.entity === u.ConnectionEnd.client
, a = t.random.bytes()
, n = r ? e.session.sp.client_random : a
, i = r ? a : u.createRandom().getBytes();
e.session.sp = {
entity: e.entity,
prf_algorithm: u.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: n,
server_random: i
}
}
,
u.handleServerHello = function(e, t, r) {
var a = u.parseHelloMessage(e, t, r);
if (!e.fail) {
if (!(a.version.minor <= e.version.minor))
return e.error(e, {
message: "Incompatible TLS version.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.protocol_version
}
});
e.version.minor = a.version.minor,
e.session.version = e.version;
var n = a.session_id.bytes();
n.length > 0 && n === e.session.id ? (e.expect = d,
e.session.resuming = !0,
e.session.sp.server_random = a.random.bytes()) : (e.expect = l,
e.session.resuming = !1,
u.createSecurityParameters(e, a)),
e.session.id = n,
e.process()
}
}
,
u.handleClientHello = function(e, t, r) {
var n = u.parseHelloMessage(e, t, r);
if (!e.fail) {
var i = n.session_id.bytes()
, s = null;
if (e.sessionCache && (null === (s = e.sessionCache.getSession(i)) ? i = "" : (s.version.major !== n.version.major || s.version.minor > n.version.minor) && (s = null,
i = "")),
0 === i.length && (i = a.random.getBytes(32)),
e.session.id = i,
e.session.clientHelloVersion = n.version,
e.session.sp = {},
s)
e.version = e.session.version = s.version,
e.session.sp = s.sp;
else {
for (var o, c = 1; c < u.SupportedVersions.length && !((o = u.SupportedVersions[c]).minor <= n.version.minor); ++c)
;
e.version = {
major: o.major,
minor: o.minor
},
e.session.version = e.version
}
null !== s ? (e.expect = S,
e.session.resuming = !0,
e.session.sp.client_random = n.random.bytes()) : (e.expect = !1 !== e.verifyClient ? m : C,
e.session.resuming = !1,
u.createSecurityParameters(e, n)),
e.open = !0,
u.queue(e, u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createServerHello(e)
})),
e.session.resuming ? (u.queue(e, u.createRecord(e, {
type: u.ContentType.change_cipher_spec,
data: u.createChangeCipherSpec()
})),
e.state.pending = u.createConnectionState(e),
e.state.current.write = e.state.pending.write,
u.queue(e, u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createFinished(e)
}))) : (u.queue(e, u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createCertificate(e)
})),
e.fail || (u.queue(e, u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createServerKeyExchange(e)
})),
!1 !== e.verifyClient && u.queue(e, u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createCertificateRequest(e)
})),
u.queue(e, u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createServerHelloDone(e)
})))),
u.flush(e),
e.process()
}
}
,
u.handleCertificate = function(e, t, r) {
if (r < 3)
return e.error(e, {
message: "Invalid Certificate message. Message too short.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.illegal_parameter
}
});
var n, i, s = t.fragment, c = {
certificate_list: o(s, 3)
}, l = [];
try {
for (; c.certificate_list.length() > 0; )
n = o(c.certificate_list, 3),
i = a.asn1.fromDer(n),
n = a.pki.certificateFromAsn1(i, !0),
l.push(n)
} catch (t) {
return e.error(e, {
message: "Could not parse certificate list.",
cause: t,
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.bad_certificate
}
})
}
var f = e.entity === u.ConnectionEnd.client;
!f && !0 !== e.verifyClient || 0 !== l.length ? 0 === l.length ? e.expect = f ? p : C : (f ? e.session.serverCertificate = l[0] : e.session.clientCertificate = l[0],
u.verifyCertificateChain(e, l) && (e.expect = f ? p : C)) : e.error(e, {
message: f ? "No server certificate provided." : "No client certificate provided.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.illegal_parameter
}
}),
e.process()
}
,
u.handleServerKeyExchange = function(e, t, r) {
if (r > 0)
return e.error(e, {
message: "Invalid key parameters. Only RSA is supported.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.unsupported_certificate
}
});
e.expect = f,
e.process()
}
,
u.handleClientKeyExchange = function(e, t, r) {
if (r < 48)
return e.error(e, {
message: "Invalid key parameters. Only RSA is supported.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.unsupported_certificate
}
});
var n = t.fragment
, i = {
enc_pre_master_secret: o(n, 2).getBytes()
}
, s = null;
if (e.getPrivateKey)
try {
s = e.getPrivateKey(e, e.session.serverCertificate),
s = a.pki.privateKeyFromPem(s)
} catch (t) {
e.error(e, {
message: "Could not get private key.",
cause: t,
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.internal_error
}
})
}
if (null === s)
return e.error(e, {
message: "No private key set.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.internal_error
}
});
try {
var c = e.session.sp;
c.pre_master_secret = s.decrypt(i.enc_pre_master_secret);
var l = e.session.clientHelloVersion;
if (l.major !== c.pre_master_secret.charCodeAt(0) || l.minor !== c.pre_master_secret.charCodeAt(1))
throw new Error("TLS version rollback attack detected.")
} catch (e) {
c.pre_master_secret = a.random.getBytes(48)
}
e.expect = S,
null !== e.session.clientCertificate && (e.expect = E),
e.process()
}
,
u.handleCertificateRequest = function(e, t, r) {
if (r < 3)
return e.error(e, {
message: "Invalid CertificateRequest. Message too short.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.illegal_parameter
}
});
var a = t.fragment
, n = {
certificate_types: o(a, 1),
certificate_authorities: o(a, 2)
};
e.session.certificateRequest = n,
e.expect = h,
e.process()
}
,
u.handleCertificateVerify = function(e, t, r) {
if (r < 2)
return e.error(e, {
message: "Invalid CertificateVerify. Message too short.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.illegal_parameter
}
});
var n = t.fragment;
n.read -= 4;
var i = n.bytes();
n.read += 4;
var s = {
signature: o(n, 2).getBytes()
}
, c = a.util.createBuffer();
c.putBuffer(e.session.md5.digest()),
c.putBuffer(e.session.sha1.digest()),
c = c.getBytes();
try {
if (!e.session.clientCertificate.publicKey.verify(c, s.signature, "NONE"))
throw new Error("CertificateVerify signature does not match.");
e.session.md5.update(i),
e.session.sha1.update(i)
} catch (t) {
return e.error(e, {
message: "Bad signature in CertificateVerify.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.handshake_failure
}
})
}
e.expect = S,
e.process()
}
,
u.handleServerHelloDone = function(e, t, r) {
if (r > 0)
return e.error(e, {
message: "Invalid ServerHelloDone message. Invalid length.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.record_overflow
}
});
if (null === e.serverCertificate) {
var n = {
message: "No server certificate provided. Not enough security.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.insufficient_security
}
}
, i = e.verify(e, n.alert.description, 0, []);
if (!0 !== i)
return (i || 0 === i) && ("object" != typeof i || a.util.isArray(i) ? "number" == typeof i && (n.alert.description = i) : (i.message && (n.message = i.message),
i.alert && (n.alert.description = i.alert))),
e.error(e, n)
}
null !== e.session.certificateRequest && (t = u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createCertificate(e)
}),
u.queue(e, t)),
t = u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createClientKeyExchange(e)
}),
u.queue(e, t),
e.expect = v;
var s = function(e, t) {
null !== e.session.certificateRequest && null !== e.session.clientCertificate && u.queue(e, u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createCertificateVerify(e, t)
})),
u.queue(e, u.createRecord(e, {
type: u.ContentType.change_cipher_spec,
data: u.createChangeCipherSpec()
})),
e.state.pending = u.createConnectionState(e),
e.state.current.write = e.state.pending.write,
u.queue(e, u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createFinished(e)
})),
e.expect = d,
u.flush(e),
e.process()
};
if (null === e.session.certificateRequest || null === e.session.clientCertificate)
return s(e, null);
u.getClientSignature(e, s)
}
,
u.handleChangeCipherSpec = function(e, t) {
if (1 !== t.fragment.getByte())
return e.error(e, {
message: "Invalid ChangeCipherSpec message received.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.illegal_parameter
}
});
var r = e.entity === u.ConnectionEnd.client;
(e.session.resuming && r || !e.session.resuming && !r) && (e.state.pending = u.createConnectionState(e)),
e.state.current.read = e.state.pending.read,
(!e.session.resuming && r || e.session.resuming && !r) && (e.state.pending = null),
e.expect = r ? y : T,
e.process()
}
,
u.handleFinished = function(e, t, r) {
var i = t.fragment;
i.read -= 4;
var s = i.bytes();
i.read += 4;
var o = t.fragment.getBytes();
(i = a.util.createBuffer()).putBuffer(e.session.md5.digest()),
i.putBuffer(e.session.sha1.digest());
var c = e.entity === u.ConnectionEnd.client
, l = c ? "server finished" : "client finished"
, p = e.session.sp;
if ((i = n(p.master_secret, l, i.getBytes(), 12)).getBytes() !== o)
return e.error(e, {
message: "Invalid verify_data in Finished message.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.decrypt_error
}
});
e.session.md5.update(s),
e.session.sha1.update(s),
(e.session.resuming && c || !e.session.resuming && !c) && (u.queue(e, u.createRecord(e, {
type: u.ContentType.change_cipher_spec,
data: u.createChangeCipherSpec()
})),
e.state.current.write = e.state.pending.write,
e.state.pending = null,
u.queue(e, u.createRecord(e, {
type: u.ContentType.handshake,
data: u.createFinished(e)
}))),
e.expect = c ? g : I,
e.handshaking = !1,
++e.handshakes,
e.peerCertificate = c ? e.session.serverCertificate : e.session.clientCertificate,
u.flush(e),
e.isConnected = !0,
e.connected(e),
e.process()
}
,
u.handleAlert = function(e, t) {
var r, a = t.fragment, n = {
level: a.getByte(),
description: a.getByte()
};
switch (n.description) {
case u.Alert.Description.close_notify:
r = "Connection closed.";
break;
case u.Alert.Description.unexpected_message:
r = "Unexpected message.";
break;
case u.Alert.Description.bad_record_mac:
r = "Bad record MAC.";
break;
case u.Alert.Description.decryption_failed:
r = "Decryption failed.";
break;
case u.Alert.Description.record_overflow:
r = "Record overflow.";
break;
case u.Alert.Description.decompression_failure:
r = "Decompression failed.";
break;
case u.Alert.Description.handshake_failure:
r = "Handshake failure.";
break;
case u.Alert.Description.bad_certificate:
r = "Bad certificate.";
break;
case u.Alert.Description.unsupported_certificate:
r = "Unsupported certificate.";
break;
case u.Alert.Description.certificate_revoked:
r = "Certificate revoked.";
break;
case u.Alert.Description.certificate_expired:
r = "Certificate expired.";
break;
case u.Alert.Description.certificate_unknown:
r = "Certificate unknown.";
break;
case u.Alert.Description.illegal_parameter:
r = "Illegal parameter.";
break;
case u.Alert.Description.unknown_ca:
r = "Unknown certificate authority.";
break;
case u.Alert.Description.access_denied:
r = "Access denied.";
break;
case u.Alert.Description.decode_error:
r = "Decode error.";
break;
case u.Alert.Description.decrypt_error:
r = "Decrypt error.";
break;
case u.Alert.Description.export_restriction:
r = "Export restriction.";
break;
case u.Alert.Description.protocol_version:
r = "Unsupported protocol version.";
break;
case u.Alert.Description.insufficient_security:
r = "Insufficient security.";
break;
case u.Alert.Description.internal_error:
r = "Internal error.";
break;
case u.Alert.Description.user_canceled:
r = "User canceled.";
break;
case u.Alert.Description.no_renegotiation:
r = "Renegotiation not supported.";
break;
default:
r = "Unknown error."
}
if (n.description === u.Alert.Description.close_notify)
return e.close();
e.error(e, {
message: r,
send: !1,
origin: e.entity === u.ConnectionEnd.client ? "server" : "client",
alert: n
}),
e.process()
}
,
u.handleHandshake = function(e, t) {
var r = t.fragment
, n = r.getByte()
, i = r.getInt24();
if (i > r.length())
return e.fragmented = t,
t.fragment = a.util.createBuffer(),
r.read -= 4,
e.process();
e.fragmented = null,
r.read -= 4;
var s = r.bytes(i + 4);
r.read += 4,
n in K[e.entity][e.expect] ? (e.entity !== u.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: a.md.md5.create(),
sha1: a.md.sha1.create()
}),
n !== u.HandshakeType.hello_request && n !== u.HandshakeType.certificate_verify && n !== u.HandshakeType.finished && (e.session.md5.update(s),
e.session.sha1.update(s)),
K[e.entity][e.expect][n](e, t, i)) : u.handleUnexpected(e, t)
}
,
u.handleApplicationData = function(e, t) {
e.data.putBuffer(t.fragment),
e.dataReady(e),
e.process()
}
,
u.handleHeartbeat = function(e, t) {
var r = t.fragment
, n = r.getByte()
, i = r.getInt16()
, s = r.getBytes(i);
if (n === u.HeartbeatMessageType.heartbeat_request) {
if (e.handshaking || i > s.length)
return e.process();
u.queue(e, u.createRecord(e, {
type: u.ContentType.heartbeat,
data: u.createHeartbeat(u.HeartbeatMessageType.heartbeat_response, s)
})),
u.flush(e)
} else if (n === u.HeartbeatMessageType.heartbeat_response) {
if (s !== e.expectedHeartbeatPayload)
return e.process();
e.heartbeatReceived && e.heartbeatReceived(e, a.util.createBuffer(s))
}
e.process()
}
;
var l = 1
, p = 2
, f = 3
, h = 4
, d = 5
, y = 6
, g = 7
, v = 8
, m = 1
, C = 2
, E = 3
, S = 4
, T = 5
, I = 6
, A = u.handleUnexpected
, B = u.handleChangeCipherSpec
, b = u.handleAlert
, N = u.handleHandshake
, R = u.handleApplicationData
, w = u.handleHeartbeat
, _ = [];
_[u.ConnectionEnd.client] = [[A, b, N, A, w], [A, b, N, A, w], [A, b, N, A, w], [A, b, N, A, w], [A, b, N, A, w], [B, b, A, A, w], [A, b, N, A, w], [A, b, N, R, w], [A, b, N, A, w]],
_[u.ConnectionEnd.server] = [[A, b, N, A, w], [A, b, N, A, w], [A, b, N, A, w], [A, b, N, A, w], [B, b, A, A, w], [A, b, N, A, w], [A, b, N, R, w], [A, b, N, A, w]];
var L = u.handleHelloRequest
, k = u.handleServerHello
, U = u.handleCertificate
, D = u.handleServerKeyExchange
, P = u.handleCertificateRequest
, V = u.handleServerHelloDone
, O = u.handleFinished
, K = [];
K[u.ConnectionEnd.client] = [[A, A, k, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A], [L, A, A, A, A, A, A, A, A, A, A, U, D, P, V, A, A, A, A, A, A], [L, A, A, A, A, A, A, A, A, A, A, A, D, P, V, A, A, A, A, A, A], [L, A, A, A, A, A, A, A, A, A, A, A, A, P, V, A, A, A, A, A, A], [L, A, A, A, A, A, A, A, A, A, A, A, A, A, V, A, A, A, A, A, A], [L, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A], [L, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, O], [L, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A], [L, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A]];
var x = u.handleClientHello
, M = u.handleClientKeyExchange
, F = u.handleCertificateVerify;
K[u.ConnectionEnd.server] = [[A, x, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A], [A, A, A, A, A, A, A, A, A, A, A, U, A, A, A, A, A, A, A, A, A], [A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, M, A, A, A, A], [A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, F, A, A, A, A, A], [A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A], [A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, O], [A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A], [A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A, A]],
u.generateKeys = function(e, t) {
var r = n
, a = t.client_random + t.server_random;
e.session.resuming || (t.master_secret = r(t.pre_master_secret, "master secret", a, 48).bytes(),
t.pre_master_secret = null),
a = t.server_random + t.client_random;
var i = 2 * t.mac_key_length + 2 * t.enc_key_length
, s = e.version.major === u.Versions.TLS_1_0.major && e.version.minor === u.Versions.TLS_1_0.minor;
s && (i += 2 * t.fixed_iv_length);
var o = r(t.master_secret, "key expansion", a, i)
, c = {
client_write_MAC_key: o.getBytes(t.mac_key_length),
server_write_MAC_key: o.getBytes(t.mac_key_length),
client_write_key: o.getBytes(t.enc_key_length),
server_write_key: o.getBytes(t.enc_key_length)
};
return s && (c.client_write_IV = o.getBytes(t.fixed_iv_length),
c.server_write_IV = o.getBytes(t.fixed_iv_length)),
c
}
,
u.createConnectionState = function(e) {
var t = e.entity === u.ConnectionEnd.client
, r = function() {
var e = {
sequenceNumber: [0, 0],
macKey: null,
macLength: 0,
macFunction: null,
cipherState: null,
cipherFunction: function(e) {
return !0
},
compressionState: null,
compressFunction: function(e) {
return !0
},
updateSequenceNumber: function() {
4294967295 === e.sequenceNumber[1] ? (e.sequenceNumber[1] = 0,
++e.sequenceNumber[0]) : ++e.sequenceNumber[1]
}
};
return e
}
, a = {
read: r(),
write: r()
};
if (a.read.update = function(e, t) {
return a.read.cipherFunction(t, a.read) ? a.read.compressFunction(e, t, a.read) || e.error(e, {
message: "Could not decompress record.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.decompression_failure
}
}) : e.error(e, {
message: "Could not decrypt record or bad MAC.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.bad_record_mac
}
}),
!e.fail
}
,
a.write.update = function(e, t) {
return a.write.compressFunction(e, t, a.write) ? a.write.cipherFunction(t, a.write) || e.error(e, {
message: "Could not encrypt record.",
send: !1,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.internal_error
}
}) : e.error(e, {
message: "Could not compress record.",
send: !1,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.internal_error
}
}),
!e.fail
}
,
e.session) {
var n = e.session.sp;
switch (e.session.cipherSuite.initSecurityParameters(n),
n.keys = u.generateKeys(e, n),
a.read.macKey = t ? n.keys.server_write_MAC_key : n.keys.client_write_MAC_key,
a.write.macKey = t ? n.keys.client_write_MAC_key : n.keys.server_write_MAC_key,
e.session.cipherSuite.initConnectionState(a, e, n),
n.compression_algorithm) {
case u.CompressionMethod.none:
break;
case u.CompressionMethod.deflate:
a.read.compressFunction = s,
a.write.compressFunction = i;
break;
default:
throw new Error("Unsupported compression algorithm.")
}
}
return a
}
,
u.createRandom = function() {
var e = new Date
, t = +e + 6e4 * e.getTimezoneOffset()
, r = a.util.createBuffer();
return r.putInt32(t),
r.putBytes(a.random.getBytes(28)),
r
}
,
u.createRecord = function(e, t) {
return t.data ? {
type: t.type,
version: {
major: e.version.major,
minor: e.version.minor
},
length: t.data.length(),
fragment: t.data
} : null
}
,
u.createAlert = function(e, t) {
var r = a.util.createBuffer();
return r.putByte(t.level),
r.putByte(t.description),
u.createRecord(e, {
type: u.ContentType.alert,
data: r
})
}
,
u.createClientHello = function(e) {
e.session.clientHelloVersion = {
major: e.version.major,
minor: e.version.minor
};
for (var t = a.util.createBuffer(), r = 0; r < e.cipherSuites.length; ++r) {
var n = e.cipherSuites[r];
t.putByte(n.id[0]),
t.putByte(n.id[1])
}
var i = t.length()
, s = a.util.createBuffer();
s.putByte(u.CompressionMethod.none);
var o = s.length()
, l = a.util.createBuffer();
if (e.virtualHost) {
var p = a.util.createBuffer();
p.putByte(0),
p.putByte(0);
var f = a.util.createBuffer();
f.putByte(0),
c(f, 2, a.util.createBuffer(e.virtualHost));
var h = a.util.createBuffer();
c(h, 2, f),
c(p, 2, h),
l.putBuffer(p)
}
var d = l.length();
d > 0 && (d += 2);
var y = e.session.id
, g = y.length + 1 + 2 + 4 + 28 + 2 + i + 1 + o + d
, v = a.util.createBuffer();
return v.putByte(u.HandshakeType.client_hello),
v.putInt24(g),
v.putByte(e.version.major),
v.putByte(e.version.minor),
v.putBytes(e.session.sp.client_random),
c(v, 1, a.util.createBuffer(y)),
c(v, 2, t),
c(v, 1, s),
d > 0 && c(v, 2, l),
v
}
,
u.createServerHello = function(e) {
var t = e.session.id
, r = t.length + 1 + 2 + 4 + 28 + 2 + 1
, n = a.util.createBuffer();
return n.putByte(u.HandshakeType.server_hello),
n.putInt24(r),
n.putByte(e.version.major),
n.putByte(e.version.minor),
n.putBytes(e.session.sp.server_random),
c(n, 1, a.util.createBuffer(t)),
n.putByte(e.session.cipherSuite.id[0]),
n.putByte(e.session.cipherSuite.id[1]),
n.putByte(e.session.compressionMethod),
n
}
,
u.createCertificate = function(e) {
var t, r = e.entity === u.ConnectionEnd.client, n = null;
e.getCertificate && (t = r ? e.session.certificateRequest : e.session.extensions.server_name.serverNameList,
n = e.getCertificate(e, t));
var i = a.util.createBuffer();
if (null !== n)
try {
a.util.isArray(n) || (n = [n]);
for (var s = null, o = 0; o < n.length; ++o) {
var l = a.pem.decode(n[o])[0];
if ("CERTIFICATE" !== l.type && "X509 CERTIFICATE" !== l.type && "TRUSTED CERTIFICATE" !== l.type) {
var p = new Error('Could not convert certificate from PEM; PEM header type is not "CERTIFICATE", "X509 CERTIFICATE", or "TRUSTED CERTIFICATE".');
throw p.headerType = l.type,
p
}
if (l.procType && "ENCRYPTED" === l.procType.type)
throw new Error("Could not convert certificate from PEM; PEM is encrypted.");
var f = a.util.createBuffer(l.body);
null === s && (s = a.asn1.fromDer(f.bytes(), !1));
var h = a.util.createBuffer();
c(h, 3, f),
i.putBuffer(h)
}
n = a.pki.certificateFromAsn1(s),
r ? e.session.clientCertificate = n : e.session.serverCertificate = n
} catch (t) {
return e.error(e, {
message: "Could not send certificate list.",
cause: t,
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.bad_certificate
}
})
}
var d = 3 + i.length()
, y = a.util.createBuffer();
return y.putByte(u.HandshakeType.certificate),
y.putInt24(d),
c(y, 3, i),
y
}
,
u.createClientKeyExchange = function(e) {
var t = a.util.createBuffer();
t.putByte(e.session.clientHelloVersion.major),
t.putByte(e.session.clientHelloVersion.minor),
t.putBytes(a.random.getBytes(46));
var r = e.session.sp;
r.pre_master_secret = t.getBytes();
var n = (t = e.session.serverCertificate.publicKey.encrypt(r.pre_master_secret)).length + 2
, i = a.util.createBuffer();
return i.putByte(u.HandshakeType.client_key_exchange),
i.putInt24(n),
i.putInt16(t.length),
i.putBytes(t),
i
}
,
u.createServerKeyExchange = function(e) {
var t = a.util.createBuffer();
return t
}
,
u.getClientSignature = function(e, t) {
var r = a.util.createBuffer();
r.putBuffer(e.session.md5.digest()),
r.putBuffer(e.session.sha1.digest()),
r = r.getBytes(),
e.getSignature = e.getSignature || function(e, t, r) {
var n = null;
if (e.getPrivateKey)
try {
n = e.getPrivateKey(e, e.session.clientCertificate),
n = a.pki.privateKeyFromPem(n)
} catch (t) {
e.error(e, {
message: "Could not get private key.",
cause: t,
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.internal_error
}
})
}
null === n ? e.error(e, {
message: "No private key set.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.internal_error
}
}) : t = n.sign(t, null),
r(e, t)
}
,
e.getSignature(e, r, t)
}
,
u.createCertificateVerify = function(e, t) {
var r = t.length + 2
, n = a.util.createBuffer();
return n.putByte(u.HandshakeType.certificate_verify),
n.putInt24(r),
n.putInt16(t.length),
n.putBytes(t),
n
}
,
u.createCertificateRequest = function(e) {
var t = a.util.createBuffer();
t.putByte(1);
var r = a.util.createBuffer();
for (var n in e.caStore.certs) {
var i = e.caStore.certs[n]
, s = a.pki.distinguishedNameToAsn1(i.subject)
, o = a.asn1.toDer(s);
r.putInt16(o.length()),
r.putBuffer(o)
}
var l = 1 + t.length() + 2 + r.length()
, p = a.util.createBuffer();
return p.putByte(u.HandshakeType.certificate_request),
p.putInt24(l),
c(p, 1, t),
c(p, 2, r),
p
}
,
u.createServerHelloDone = function(e) {
var t = a.util.createBuffer();
return t.putByte(u.HandshakeType.server_hello_done),
t.putInt24(0),
t
}
,
u.createChangeCipherSpec = function() {
var e = a.util.createBuffer();
return e.putByte(1),
e
}
,
u.createFinished = function(e) {
var t = a.util.createBuffer();
t.putBuffer(e.session.md5.digest()),
t.putBuffer(e.session.sha1.digest());
var r = e.entity === u.ConnectionEnd.client
, i = e.session.sp
, s = r ? "client finished" : "server finished";
t = n(i.master_secret, s, t.getBytes(), 12);
var o = a.util.createBuffer();
return o.putByte(u.HandshakeType.finished),
o.putInt24(t.length()),
o.putBuffer(t),
o
}
,
u.createHeartbeat = function(e, t, r) {
void 0 === r && (r = t.length);
var n = a.util.createBuffer();
n.putByte(e),
n.putInt16(r),
n.putBytes(t);
var i = n.length()
, s = Math.max(16, i - r - 3);
return n.putBytes(a.random.getBytes(s)),
n
}
,
u.queue = function(e, t) {
if (t && (0 !== t.fragment.length() || t.type !== u.ContentType.handshake && t.type !== u.ContentType.alert && t.type !== u.ContentType.change_cipher_spec)) {
if (t.type === u.ContentType.handshake) {
var r = t.fragment.bytes();
e.session.md5.update(r),
e.session.sha1.update(r),
r = null
}
var n;
if (t.fragment.length() <= u.MaxFragment)
n = [t];
else {
n = [];
for (var i = t.fragment.bytes(); i.length > u.MaxFragment; )
n.push(u.createRecord(e, {
type: t.type,
data: a.util.createBuffer(i.slice(0, u.MaxFragment))
})),
i = i.slice(u.MaxFragment);
i.length > 0 && n.push(u.createRecord(e, {
type: t.type,
data: a.util.createBuffer(i)
}))
}
for (var s = 0; s < n.length && !e.fail; ++s) {
var o = n[s];
e.state.current.write.update(e, o) && e.records.push(o)
}
}
}
,
u.flush = function(e) {
for (var t = 0; t < e.records.length; ++t) {
var r = e.records[t];
e.tlsData.putByte(r.type),
e.tlsData.putByte(r.version.major),
e.tlsData.putByte(r.version.minor),
e.tlsData.putInt16(r.fragment.length()),
e.tlsData.putBuffer(e.records[t].fragment)
}
return e.records = [],
e.tlsDataReady(e)
}
;
var j = function(e) {
switch (e) {
case !0:
return !0;
case a.pki.certificateError.bad_certificate:
return u.Alert.Description.bad_certificate;
case a.pki.certificateError.unsupported_certificate:
return u.Alert.Description.unsupported_certificate;
case a.pki.certificateError.certificate_revoked:
return u.Alert.Description.certificate_revoked;
case a.pki.certificateError.certificate_expired:
return u.Alert.Description.certificate_expired;
case a.pki.certificateError.certificate_unknown:
return u.Alert.Description.certificate_unknown;
case a.pki.certificateError.unknown_ca:
return u.Alert.Description.unknown_ca;
default:
return u.Alert.Description.bad_certificate
}
};
for (var G in u.verifyCertificateChain = function(e, t) {
try {
var r = {};
for (var n in e.verifyOptions)
r[n] = e.verifyOptions[n];
r.verify = function(t, r, n) {
j(t);
var i = e.verify(e, t, r, n);
if (!0 !== i) {
if ("object" == typeof i && !a.util.isArray(i)) {
var s = new Error("The application rejected the certificate.");
throw s.send = !0,
s.alert = {
level: u.Alert.Level.fatal,
description: u.Alert.Description.bad_certificate
},
i.message && (s.message = i.message),
i.alert && (s.alert.description = i.alert),
s
}
i !== t && (i = function(e) {
switch (e) {
case !0:
return !0;
case u.Alert.Description.bad_certificate:
return a.pki.certificateError.bad_certificate;
case u.Alert.Description.unsupported_certificate:
return a.pki.certificateError.unsupported_certificate;
case u.Alert.Description.certificate_revoked:
return a.pki.certificateError.certificate_revoked;
case u.Alert.Description.certificate_expired:
return a.pki.certificateError.certificate_expired;
case u.Alert.Description.certificate_unknown:
return a.pki.certificateError.certificate_unknown;
case u.Alert.Description.unknown_ca:
return a.pki.certificateError.unknown_ca;
default:
return a.pki.certificateError.bad_certificate
}
}(i))
}
return i
}
,
a.pki.verifyCertificateChain(e.caStore, t, r)
} catch (t) {
var i = t;
("object" != typeof i || a.util.isArray(i)) && (i = {
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: j(t)
}
}),
"send"in i || (i.send = !0),
"alert"in i || (i.alert = {
level: u.Alert.Level.fatal,
description: j(i.error)
}),
e.error(e, i)
}
return !e.fail
}
,
u.createSessionCache = function(e, t) {
var r = null;
if (e && e.getSession && e.setSession && e.order)
r = e;
else {
for (var n in (r = {}).cache = e || {},
r.capacity = Math.max(t || 100, 1),
r.order = [],
e)
r.order.length <= t ? r.order.push(n) : delete e[n];
r.getSession = function(e) {
var t = null
, n = null;
if (e ? n = a.util.bytesToHex(e) : r.order.length > 0 && (n = r.order[0]),
null !== n && n in r.cache)
for (var i in t = r.cache[n],
delete r.cache[n],
r.order)
if (r.order[i] === n) {
r.order.splice(i, 1);
break
}
return t
}
,
r.setSession = function(e, t) {
if (r.order.length === r.capacity) {
var n = r.order.shift();
delete r.cache[n]
}
n = a.util.bytesToHex(e);
r.order.push(n),
r.cache[n] = t
}
}
return r
}
,
u.createConnection = function(e) {
var t = null;
t = e.caStore ? a.util.isArray(e.caStore) ? a.pki.createCaStore(e.caStore) : e.caStore : a.pki.createCaStore();
var r = e.cipherSuites || null;
if (null === r)
for (var n in r = [],
u.CipherSuites)
r.push(u.CipherSuites[n]);
var i = e.server ? u.ConnectionEnd.server : u.ConnectionEnd.client
, s = e.sessionCache ? u.createSessionCache(e.sessionCache) : null
, o = {
version: {
major: u.Version.major,
minor: u.Version.minor
},
entity: i,
sessionId: e.sessionId,
caStore: t,
sessionCache: s,
cipherSuites: r,
connected: e.connected,
virtualHost: e.virtualHost || null,
verifyClient: e.verifyClient || !1,
verify: e.verify || function(e, t, r, a) {
return t
}
,
verifyOptions: e.verifyOptions || {},
getCertificate: e.getCertificate || null,
getPrivateKey: e.getPrivateKey || null,
getSignature: e.getSignature || null,
input: a.util.createBuffer(),
tlsData: a.util.createBuffer(),
data: a.util.createBuffer(),
tlsDataReady: e.tlsDataReady,
dataReady: e.dataReady,
heartbeatReceived: e.heartbeatReceived,
closed: e.closed,
error: function(t, r) {
r.origin = r.origin || (t.entity === u.ConnectionEnd.client ? "client" : "server"),
r.send && (u.queue(t, u.createAlert(t, r.alert)),
u.flush(t));
var a = !1 !== r.fatal;
a && (t.fail = !0),
e.error(t, r),
a && t.close(!1)
},
deflate: e.deflate || null,
inflate: e.inflate || null,
reset: function(e) {
o.version = {
major: u.Version.major,
minor: u.Version.minor
},
o.record = null,
o.session = null,
o.peerCertificate = null,
o.state = {
pending: null,
current: null
},
o.expect = (o.entity,
u.ConnectionEnd.client,
0),
o.fragmented = null,
o.records = [],
o.open = !1,
o.handshakes = 0,
o.handshaking = !1,
o.isConnected = !1,
o.fail = !(e || void 0 === e),
o.input.clear(),
o.tlsData.clear(),
o.data.clear(),
o.state.current = u.createConnectionState(o)
}
};
o.reset();
return o.handshake = function(e) {
if (o.entity !== u.ConnectionEnd.client)
o.error(o, {
message: "Cannot initiate handshake as a server.",
fatal: !1
});
else if (o.handshaking)
o.error(o, {
message: "Handshake already in progress.",
fatal: !1
});
else {
o.fail && !o.open && 0 === o.handshakes && (o.fail = !1),
o.handshaking = !0;
var t = null;
(e = e || "").length > 0 && (o.sessionCache && (t = o.sessionCache.getSession(e)),
null === t && (e = "")),
0 === e.length && o.sessionCache && null !== (t = o.sessionCache.getSession()) && (e = t.id),
o.session = {
id: e,
version: null,
cipherSuite: null,
compressionMethod: null,
serverCertificate: null,
certificateRequest: null,
clientCertificate: null,
sp: {},
md5: a.md.md5.create(),
sha1: a.md.sha1.create()
},
t && (o.version = t.version,
o.session.sp = t.sp),
o.session.sp.client_random = u.createRandom().getBytes(),
o.open = !0,
u.queue(o, u.createRecord(o, {
type: u.ContentType.handshake,
data: u.createClientHello(o)
})),
u.flush(o)
}
}
,
o.process = function(e) {
var t = 0;
return e && o.input.putBytes(e),
o.fail || (null !== o.record && o.record.ready && o.record.fragment.isEmpty() && (o.record = null),
null === o.record && (t = function(e) {
var t = 0
, r = e.input
, n = r.length();
if (n < 5)
t = 5 - n;
else {
e.record = {
type: r.getByte(),
version: {
major: r.getByte(),
minor: r.getByte()
},
length: r.getInt16(),
fragment: a.util.createBuffer(),
ready: !1
};
var i = e.record.version.major === e.version.major;
i && e.session && e.session.version && (i = e.record.version.minor === e.version.minor),
i || e.error(e, {
message: "Incompatible TLS version.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.protocol_version
}
})
}
return t
}(o)),
o.fail || null === o.record || o.record.ready || (t = function(e) {
var t = 0
, r = e.input
, a = r.length();
a < e.record.length ? t = e.record.length - a : (e.record.fragment.putBytes(r.getBytes(e.record.length)),
r.compact(),
e.state.current.read.update(e, e.record) && (null !== e.fragmented && (e.fragmented.type === e.record.type ? (e.fragmented.fragment.putBuffer(e.record.fragment),
e.record = e.fragmented) : e.error(e, {
message: "Invalid fragmented record.",
send: !0,
alert: {
level: u.Alert.Level.fatal,
description: u.Alert.Description.unexpected_message
}
})),
e.record.ready = !0));
return t
}(o)),
!o.fail && null !== o.record && o.record.ready && function(e, t) {
var r = t.type - u.ContentType.change_cipher_spec
, a = _[e.entity][e.expect];
r in a ? a[r](e, t) : u.handleUnexpected(e, t)
}(o, o.record)),
t
}
,
o.prepare = function(e) {
return u.queue(o, u.createRecord(o, {
type: u.ContentType.application_data,
data: a.util.createBuffer(e)
})),
u.flush(o)
}
,
o.prepareHeartbeatRequest = function(e, t) {
return e instanceof a.util.ByteBuffer && (e = e.bytes()),
void 0 === t && (t = e.length),
o.expectedHeartbeatPayload = e,
u.queue(o, u.createRecord(o, {
type: u.ContentType.heartbeat,
data: u.createHeartbeat(u.HeartbeatMessageType.heartbeat_request, e, t)
})),
u.flush(o)
}
,
o.close = function(e) {
if (!o.fail && o.sessionCache && o.session) {
var t = {
id: o.session.id,
version: o.session.version,
sp: o.session.sp
};
t.sp.keys = null,
o.sessionCache.setSession(t.id, t)
}
o.open && (o.open = !1,
o.input.clear(),
(o.isConnected || o.handshaking) && (o.isConnected = o.handshaking = !1,
u.queue(o, u.createAlert(o, {
level: u.Alert.Level.warning,
description: u.Alert.Description.close_notify
})),
u.flush(o)),
o.closed(o)),
o.reset(e)
}
,
o
}
,
e.exports = a.tls = a.tls || {},
u)
"function" != typeof u[G] && (a.tls[G] = u[G]);
a.tls.prf_tls1 = n,
a.tls.hmac_sha1 = function(e, t, r) {
var n = a.hmac.create();
n.start("SHA1", e);
var i = a.util.createBuffer();
return i.putInt32(t[0]),
i.putInt32(t[1]),
i.putByte(r.type),
i.putByte(r.version.major),
i.putByte(r.version.minor),
i.putInt16(r.length),
i.putBytes(r.fragment.bytes()),
n.update(i.getBytes()),
n.digest().getBytes()
}
,
a.tls.createSessionCache = u.createSessionCache,
a.tls.createConnection = u.createConnection
}
, function(e, t, r) {
var a = r(0);
r(3),
r(6),
r(22),
r(7),
r(15),
r(28),
r(18),
r(11),
r(1),
r(17);
var n = a.asn1
, i = e.exports = a.pki = a.pki || {};
i.pemToDer = function(e) {
var t = a.pem.decode(e)[0];
if (t.procType && "ENCRYPTED" === t.procType.type)
throw new Error("Could not convert PEM to DER; PEM is encrypted.");
return a.util.createBuffer(t.body)
}
,
i.privateKeyFromPem = function(e) {
var t = a.pem.decode(e)[0];
if ("PRIVATE KEY" !== t.type && "RSA PRIVATE KEY" !== t.type) {
var r = new Error('Could not convert private key from PEM; PEM header type is not "PRIVATE KEY" or "RSA PRIVATE KEY".');
throw r.headerType = t.type,
r
}
if (t.procType && "ENCRYPTED" === t.procType.type)
throw new Error("Could not convert private key from PEM; PEM is encrypted.");
var s = n.fromDer(t.body);
return i.privateKeyFromAsn1(s)
}
,
i.privateKeyToPem = function(e, t) {
var r = {
type: "RSA PRIVATE KEY",
body: n.toDer(i.privateKeyToAsn1(e)).getBytes()
};
return a.pem.encode(r, {
maxline: t
})
}
,
i.privateKeyInfoToPem = function(e, t) {
var r = {
type: "PRIVATE KEY",
body: n.toDer(e).getBytes()
};
return a.pem.encode(r, {
maxline: t
})
}
}
, function(e, t, r) {
var a = r(0);
if (r(5),
r(3),
r(10),
r(4),
r(6),
r(15),
r(7),
r(2),
r(25),
r(11),
r(1),
void 0 === n)
var n = a.jsbn.BigInteger;
var i = a.asn1
, s = a.pki = a.pki || {};
e.exports = s.pbe = a.pbe = a.pbe || {};
var o = s.oids
, c = {
name: "EncryptedPrivateKeyInfo",
tagClass: i.Class.UNIVERSAL,
type: i.Type.SEQUENCE,
constructed: !0,
value: [{
name: "EncryptedPrivateKeyInfo.encryptionAlgorithm",
tagClass: i.Class.UNIVERSAL,
type: i.Type.SEQUENCE,
constructed: !0,
value: [{
name: "AlgorithmIdentifier.algorithm",
tagClass: i.Class.UNIVERSAL,
type: i.Type.OID,
constructed: !1,
capture: "encryptionOid"
}, {
name: "AlgorithmIdentifier.parameters",
tagClass: i.Class.UNIVERSAL,
type: i.Type.SEQUENCE,
constructed: !0,
captureAsn1: "encryptionParams"
}]
}, {
name: "EncryptedPrivateKeyInfo.encryptedData",
tagClass: i.Class.UNIVERSAL,
type: i.Type.OCTETSTRING,
constructed: !1,
capture: "encryptedData"
}]
}
, u = {
name: "PBES2Algorithms",
tagClass: i.Class.UNIVERSAL,
type: i.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PBES2Algorithms.keyDerivationFunc",
tagClass: i.Class.UNIVERSAL,
type: i.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PBES2Algorithms.keyDerivationFunc.oid",
tagClass: i.Class.UNIVERSAL,
type: i.Type.OID,
constructed: !1,
capture: "kdfOid"
}, {
name: "PBES2Algorithms.params",
tagClass: i.Class.UNIVERSAL,
type: i.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PBES2Algorithms.params.salt",
tagClass: i.Class.UNIVERSAL,
type: i.Type.OCTETSTRING,
constructed: !1,
capture: "kdfSalt"
}, {
name: "PBES2Algorithms.params.iterationCount",
tagClass: i.Class.UNIVERSAL,
type: i.Type.INTEGER,
constructed: !1,
capture: "kdfIterationCount"
}, {
name: "PBES2Algorithms.params.keyLength",
tagClass: i.Class.UNIVERSAL,
type: i.Type.INTEGER,
constructed: !1,
optional: !0,
capture: "keyLength"
}, {
name: "PBES2Algorithms.params.prf",
tagClass: i.Class.UNIVERSAL,
type: i.Type.SEQUENCE,
constructed: !0,
optional: !0,
value: [{
name: "PBES2Algorithms.params.prf.algorithm",
tagClass: i.Class.UNIVERSAL,
type: i.Type.OID,
constructed: !1,
capture: "prfOid"
}]
}]
}]
}, {
name: "PBES2Algorithms.encryptionScheme",
tagClass: i.Class.UNIVERSAL,
type: i.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PBES2Algorithms.encryptionScheme.oid",
tagClass: i.Class.UNIVERSAL,
type: i.Type.OID,
constructed: !1,
capture: "encOid"
}, {
name: "PBES2Algorithms.encryptionScheme.iv",
tagClass: i.Class.UNIVERSAL,
type: i.Type.OCTETSTRING,
constructed: !1,
capture: "encIv"
}]
}]
}
, l = {
name: "pkcs-12PbeParams",
tagClass: i.Class.UNIVERSAL,
type: i.Type.SEQUENCE,
constructed: !0,
value: [{
name: "pkcs-12PbeParams.salt",
tagClass: i.Class.UNIVERSAL,
type: i.Type.OCTETSTRING,
constructed: !1,
capture: "salt"
}, {
name: "pkcs-12PbeParams.iterations",
tagClass: i.Class.UNIVERSAL,
type: i.Type.INTEGER,
constructed: !1,
capture: "iterations"
}]
};
function p(e, t) {
return e.start().update(t).digest().getBytes()
}
function f(e) {
var t;
if (e) {
if (!(t = s.oids[i.derToOid(e)])) {
var r = new Error("Unsupported PRF OID.");
throw r.oid = e,
r.supported = ["hmacWithSHA1", "hmacWithSHA224", "hmacWithSHA256", "hmacWithSHA384", "hmacWithSHA512"],
r
}
} else
t = "hmacWithSHA1";
return h(t)
}
function h(e) {
var t = a.md;
switch (e) {
case "hmacWithSHA224":
t = a.md.sha512;
case "hmacWithSHA1":
case "hmacWithSHA256":
case "hmacWithSHA384":
case "hmacWithSHA512":
e = e.substr(8).toLowerCase();
break;
default:
var r = new Error("Unsupported PRF algorithm.");
throw r.algorithm = e,
r.supported = ["hmacWithSHA1", "hmacWithSHA224", "hmacWithSHA256", "hmacWithSHA384", "hmacWithSHA512"],
r
}
if (!t || !(e in t))
throw new Error("Unknown hash algorithm: " + e);
return t[e].create()
}
s.encryptPrivateKeyInfo = function(e, t, r) {
(r = r || {}).saltSize = r.saltSize || 8,
r.count = r.count || 2048,
r.algorithm = r.algorithm || "aes128",
r.prfAlgorithm = r.prfAlgorithm || "sha1";
var n, c, u, l = a.random.getBytesSync(r.saltSize), p = r.count, f = i.integerToDer(p);
if (0 === r.algorithm.indexOf("aes") || "des" === r.algorithm) {
var d, y, g;
switch (r.algorithm) {
case "aes128":
n = 16,
d = 16,
y = o["aes128-CBC"],
g = a.aes.createEncryptionCipher;
break;
case "aes192":
n = 24,
d = 16,
y = o["aes192-CBC"],
g = a.aes.createEncryptionCipher;
break;
case "aes256":
n = 32,
d = 16,
y = o["aes256-CBC"],
g = a.aes.createEncryptionCipher;
break;
case "des":
n = 8,
d = 8,
y = o.desCBC,
g = a.des.createEncryptionCipher;
break;
default:
throw (T = new Error("Cannot encrypt private key. Unknown encryption algorithm.")).algorithm = r.algorithm,
T
}
var v = "hmacWith" + r.prfAlgorithm.toUpperCase()
, m = h(v)
, C = a.pkcs5.pbkdf2(t, l, p, n, m)
, E = a.random.getBytesSync(d);
(I = g(C)).start(E),
I.update(i.toDer(e)),
I.finish(),
u = I.output.getBytes();
var S = function(e, t, r, n) {
var o = i.create(i.Class.UNIVERSAL, i.Type.SEQUENCE, !0, [i.create(i.Class.UNIVERSAL, i.Type.OCTETSTRING, !1, e), i.create(i.Class.UNIVERSAL, i.Type.INTEGER, !1, t.getBytes())]);
"hmacWithSHA1" !== n && o.value.push(i.create(i.Class.UNIVERSAL, i.Type.INTEGER, !1, a.util.hexToBytes(r.toString(16))), i.create(i.Class.UNIVERSAL, i.Type.SEQUENCE, !0, [i.create(i.Class.UNIVERSAL, i.Type.OID, !1, i.oidToDer(s.oids[n]).getBytes()), i.create(i.Class.UNIVERSAL, i.Type.NULL, !1, "")]));
return o
}(l, f, n, v);
c = i.create(i.Class.UNIVERSAL, i.Type.SEQUENCE, !0, [i.create(i.Class.UNIVERSAL, i.Type.OID, !1, i.oidToDer(o.pkcs5PBES2).getBytes()), i.create(i.Class.UNIVERSAL, i.Type.SEQUENCE, !0, [i.create(i.Class.UNIVERSAL, i.Type.SEQUENCE, !0, [i.create(i.Class.UNIVERSAL, i.Type.OID, !1, i.oidToDer(o.pkcs5PBKDF2).getBytes()), S]), i.create(i.Class.UNIVERSAL, i.Type.SEQUENCE, !0, [i.create(i.Class.UNIVERSAL, i.Type.OID, !1, i.oidToDer(y).getBytes()), i.create(i.Class.UNIVERSAL, i.Type.OCTETSTRING, !1, E)])])])
} else {
var T;
if ("3des" !== r.algorithm)
throw (T = new Error("Cannot encrypt private key. Unknown encryption algorithm.")).algorithm = r.algorithm,
T;
n = 24;
var I, A = new a.util.ByteBuffer(l);
C = s.pbe.generatePkcs12Key(t, A, 1, p, n),
E = s.pbe.generatePkcs12Key(t, A, 2, p, n);
(I = a.des.createEncryptionCipher(C)).start(E),
I.update(i.toDer(e)),
I.finish(),
u = I.output.getBytes(),
c = i.create(i.Class.UNIVERSAL, i.Type.SEQUENCE, !0, [i.create(i.Class.UNIVERSAL, i.Type.OID, !1, i.oidToDer(o["pbeWithSHAAnd3-KeyTripleDES-CBC"]).getBytes()), i.create(i.Class.UNIVERSAL, i.Type.SEQUENCE, !0, [i.create(i.Class.UNIVERSAL, i.Type.OCTETSTRING, !1, l), i.create(i.Class.UNIVERSAL, i.Type.INTEGER, !1, f.getBytes())])])
}
return i.create(i.Class.UNIVERSAL, i.Type.SEQUENCE, !0, [c, i.create(i.Class.UNIVERSAL, i.Type.OCTETSTRING, !1, u)])
}
,
s.decryptPrivateKeyInfo = function(e, t) {
var r = null
, n = {}
, o = [];
if (!i.validate(e, c, n, o)) {
var u = new Error("Cannot read encrypted private key. ASN.1 object is not a supported EncryptedPrivateKeyInfo.");
throw u.errors = o,
u
}
var l = i.derToOid(n.encryptionOid)
, p = s.pbe.getCipher(l, n.encryptionParams, t)
, f = a.util.createBuffer(n.encryptedData);
return p.update(f),
p.finish() && (r = i.fromDer(p.output)),
r
}
,
s.encryptedPrivateKeyToPem = function(e, t) {
var r = {
type: "ENCRYPTED PRIVATE KEY",
body: i.toDer(e).getBytes()
};
return a.pem.encode(r, {
maxline: t
})
}
,
s.encryptedPrivateKeyFromPem = function(e) {
var t = a.pem.decode(e)[0];
if ("ENCRYPTED PRIVATE KEY" !== t.type) {
var r = new Error('Could not convert encrypted private key from PEM; PEM header type is "ENCRYPTED PRIVATE KEY".');
throw r.headerType = t.type,
r
}
if (t.procType && "ENCRYPTED" === t.procType.type)
throw new Error("Could not convert encrypted private key from PEM; PEM is encrypted.");
return i.fromDer(t.body)
}
,
s.encryptRsaPrivateKey = function(e, t, r) {
if (!(r = r || {}).legacy) {
var n = s.wrapRsaPrivateKey(s.privateKeyToAsn1(e));
return n = s.encryptPrivateKeyInfo(n, t, r),
s.encryptedPrivateKeyToPem(n)
}
var o, c, u, l;
switch (r.algorithm) {
case "aes128":
o = "AES-128-CBC",
u = 16,
c = a.random.getBytesSync(16),
l = a.aes.createEncryptionCipher;
break;
case "aes192":
o = "AES-192-CBC",
u = 24,
c = a.random.getBytesSync(16),
l = a.aes.createEncryptionCipher;
break;
case "aes256":
o = "AES-256-CBC",
u = 32,
c = a.random.getBytesSync(16),
l = a.aes.createEncryptionCipher;
break;
case "3des":
o = "DES-EDE3-CBC",
u = 24,
c = a.random.getBytesSync(8),
l = a.des.createEncryptionCipher;
break;
case "des":
o = "DES-CBC",
u = 8,
c = a.random.getBytesSync(8),
l = a.des.createEncryptionCipher;
break;
default:
var p = new Error('Could not encrypt RSA private key; unsupported encryption algorithm "' + r.algorithm + '".');
throw p.algorithm = r.algorithm,
p
}
var f = l(a.pbe.opensslDeriveBytes(t, c.substr(0, 8), u));
f.start(c),
f.update(i.toDer(s.privateKeyToAsn1(e))),
f.finish();
var h = {
type: "RSA PRIVATE KEY",
procType: {
version: "4",
type: "ENCRYPTED"
},
dekInfo: {
algorithm: o,
parameters: a.util.bytesToHex(c).toUpperCase()
},
body: f.output.getBytes()
};
return a.pem.encode(h)
}
,
s.decryptRsaPrivateKey = function(e, t) {
var r = null
, n = a.pem.decode(e)[0];
if ("ENCRYPTED PRIVATE KEY" !== n.type && "PRIVATE KEY" !== n.type && "RSA PRIVATE KEY" !== n.type)
throw (u = new Error('Could not convert private key from PEM; PEM header type is not "ENCRYPTED PRIVATE KEY", "PRIVATE KEY", or "RSA PRIVATE KEY".')).headerType = u,
u;
if (n.procType && "ENCRYPTED" === n.procType.type) {
var o, c;
switch (n.dekInfo.algorithm) {
case "DES-CBC":
o = 8,
c = a.des.createDecryptionCipher;
break;
case "DES-EDE3-CBC":
o = 24,
c = a.des.createDecryptionCipher;
break;
case "AES-128-CBC":
o = 16,
c = a.aes.createDecryptionCipher;
break;
case "AES-192-CBC":
o = 24,
c = a.aes.createDecryptionCipher;
break;
case "AES-256-CBC":
o = 32,
c = a.aes.createDecryptionCipher;
break;
case "RC2-40-CBC":
o = 5,
c = function(e) {
return a.rc2.createDecryptionCipher(e, 40)
}
;
break;
case "RC2-64-CBC":
o = 8,
c = function(e) {
return a.rc2.createDecryptionCipher(e, 64)
}
;
break;
case "RC2-128-CBC":
o = 16,
c = function(e) {
return a.rc2.createDecryptionCipher(e, 128)
}
;
break;
default:
var u;
throw (u = new Error('Could not decrypt private key; unsupported encryption algorithm "' + n.dekInfo.algorithm + '".')).algorithm = n.dekInfo.algorithm,
u
}
var l = a.util.hexToBytes(n.dekInfo.parameters)
, p = c(a.pbe.opensslDeriveBytes(t, l.substr(0, 8), o));
if (p.start(l),
p.update(a.util.createBuffer(n.body)),
!p.finish())
return r;
r = p.output.getBytes()
} else
r = n.body;
return null !== (r = "ENCRYPTED PRIVATE KEY" === n.type ? s.decryptPrivateKeyInfo(i.fromDer(r), t) : i.fromDer(r)) && (r = s.privateKeyFromAsn1(r)),
r
}
,
s.pbe.generatePkcs12Key = function(e, t, r, n, i, s) {
var o, c;
if (null == s) {
if (!("sha1"in a.md))
throw new Error('"sha1" hash algorithm unavailable.');
s = a.md.sha1.create()
}
var u = s.digestLength
, l = s.blockLength
, p = new a.util.ByteBuffer
, f = new a.util.ByteBuffer;
if (null != e) {
for (c = 0; c < e.length; c++)
f.putInt16(e.charCodeAt(c));
f.putInt16(0)
}
var h = f.length()
, d = t.length()
, y = new a.util.ByteBuffer;
y.fillWithByte(r, l);
var g = l * Math.ceil(d / l)
, v = new a.util.ByteBuffer;
for (c = 0; c < g; c++)
v.putByte(t.at(c % d));
var m = l * Math.ceil(h / l)
, C = new a.util.ByteBuffer;
for (c = 0; c < m; c++)
C.putByte(f.at(c % h));
var E = v;
E.putBuffer(C);
for (var S = Math.ceil(i / u), T = 1; T <= S; T++) {
var I = new a.util.ByteBuffer;
I.putBytes(y.bytes()),
I.putBytes(E.bytes());
for (var A = 0; A < n; A++)
s.start(),
s.update(I.getBytes()),
I = s.digest();
var B = new a.util.ByteBuffer;
for (c = 0; c < l; c++)
B.putByte(I.at(c % u));
var b = Math.ceil(d / l) + Math.ceil(h / l)
, N = new a.util.ByteBuffer;
for (o = 0; o < b; o++) {
var R = new a.util.ByteBuffer(E.getBytes(l))
, w = 511;
for (c = B.length() - 1; c >= 0; c--)
w >>= 8,
w += B.at(c) + R.at(c),
R.setAt(c, 255 & w);
N.putBuffer(R)
}
E = N,
p.putBuffer(I)
}
return p.truncate(p.length() - i),
p
}
,
s.pbe.getCipher = function(e, t, r) {
switch (e) {
case s.oids.pkcs5PBES2:
return s.pbe.getCipherForPBES2(e, t, r);
case s.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:
case s.oids["pbewithSHAAnd40BitRC2-CBC"]:
return s.pbe.getCipherForPKCS12PBE(e, t, r);
default:
var a = new Error("Cannot read encrypted PBE data block. Unsupported OID.");
throw a.oid = e,
a.supportedOids = ["pkcs5PBES2", "pbeWithSHAAnd3-KeyTripleDES-CBC", "pbewithSHAAnd40BitRC2-CBC"],
a
}
}
,
s.pbe.getCipherForPBES2 = function(e, t, r) {
var n, o = {}, c = [];
if (!i.validate(t, u, o, c))
throw (n = new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.")).errors = c,
n;
if ((e = i.derToOid(o.kdfOid)) !== s.oids.pkcs5PBKDF2)
throw (n = new Error("Cannot read encrypted private key. Unsupported key derivation function OID.")).oid = e,
n.supportedOids = ["pkcs5PBKDF2"],
n;
if ((e = i.derToOid(o.encOid)) !== s.oids["aes128-CBC"] && e !== s.oids["aes192-CBC"] && e !== s.oids["aes256-CBC"] && e !== s.oids["des-EDE3-CBC"] && e !== s.oids.desCBC)
throw (n = new Error("Cannot read encrypted private key. Unsupported encryption scheme OID.")).oid = e,
n.supportedOids = ["aes128-CBC", "aes192-CBC", "aes256-CBC", "des-EDE3-CBC", "desCBC"],
n;
var l, p, h = o.kdfSalt, d = a.util.createBuffer(o.kdfIterationCount);
switch (d = d.getInt(d.length() << 3),
s.oids[e]) {
case "aes128-CBC":
l = 16,
p = a.aes.createDecryptionCipher;
break;
case "aes192-CBC":
l = 24,
p = a.aes.createDecryptionCipher;
break;
case "aes256-CBC":
l = 32,
p = a.aes.createDecryptionCipher;
break;
case "des-EDE3-CBC":
l = 24,
p = a.des.createDecryptionCipher;
break;
case "desCBC":
l = 8,
p = a.des.createDecryptionCipher
}
var y = f(o.prfOid)
, g = a.pkcs5.pbkdf2(r, h, d, l, y)
, v = o.encIv
, m = p(g);
return m.start(v),
m
}
,
s.pbe.getCipherForPKCS12PBE = function(e, t, r) {
var n = {}
, o = [];
if (!i.validate(t, l, n, o))
throw (y = new Error("Cannot read password-based-encryption algorithm parameters. ASN.1 object is not a supported EncryptedPrivateKeyInfo.")).errors = o,
y;
var c, u, p, h = a.util.createBuffer(n.salt), d = a.util.createBuffer(n.iterations);
switch (d = d.getInt(d.length() << 3),
e) {
case s.oids["pbeWithSHAAnd3-KeyTripleDES-CBC"]:
c = 24,
u = 8,
p = a.des.startDecrypting;
break;
case s.oids["pbewithSHAAnd40BitRC2-CBC"]:
c = 5,
u = 8,
p = function(e, t) {
var r = a.rc2.createDecryptionCipher(e, 40);
return r.start(t, null),
r
}
;
break;
default:
var y;
throw (y = new Error("Cannot read PKCS #12 PBE data block. Unsupported OID.")).oid = e,
y
}
var g = f(n.prfOid)
, v = s.pbe.generatePkcs12Key(r, h, 1, d, c, g);
return g.start(),
p(v, s.pbe.generatePkcs12Key(r, h, 2, d, u, g))
}
,
s.pbe.opensslDeriveBytes = function(e, t, r, n) {
if (null == n) {
if (!("md5"in a.md))
throw new Error('"md5" hash algorithm unavailable.');
n = a.md.md5.create()
}
null === t && (t = "");
for (var i = [p(n, e + t)], s = 16, o = 1; s < r; ++o,
s += 16)
i.push(p(n, i[o - 1] + e + t));
return i.join("").substr(0, r)
}
}
, function(e, t, r) {
var a = r(0);
r(4),
r(1);
var n = e.exports = a.sha256 = a.sha256 || {};
a.md.sha256 = a.md.algorithms.sha256 = n,
n.create = function() {
s || (i = String.fromCharCode(128),
i += a.util.fillString(String.fromCharCode(0), 64),
o = [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],
s = !0);
var e = null
, t = a.util.createBuffer()
, r = new Array(64)
, n = {
algorithm: "sha256",
blockLength: 64,
digestLength: 32,
messageLength: 0,
fullMessageLength: null,
messageLengthSize: 8,
start: function() {
n.messageLength = 0,
n.fullMessageLength = n.messageLength64 = [];
for (var r = n.messageLengthSize / 4, i = 0; i < r; ++i)
n.fullMessageLength.push(0);
return t = a.util.createBuffer(),
e = {
h0: 1779033703,
h1: 3144134277,
h2: 1013904242,
h3: 2773480762,
h4: 1359893119,
h5: 2600822924,
h6: 528734635,
h7: 1541459225
},
n
}
};
return n.start(),
n.update = function(i, s) {
"utf8" === s && (i = a.util.encodeUtf8(i));
var o = i.length;
n.messageLength += o,
o = [o / 4294967296 >>> 0, o >>> 0];
for (var u = n.fullMessageLength.length - 1; u >= 0; --u)
n.fullMessageLength[u] += o[1],
o[1] = o[0] + (n.fullMessageLength[u] / 4294967296 >>> 0),
n.fullMessageLength[u] = n.fullMessageLength[u] >>> 0,
o[0] = o[1] / 4294967296 >>> 0;
return t.putBytes(i),
c(e, r, t),
(t.read > 2048 || 0 === t.length()) && t.compact(),
n
}
,
n.digest = function() {
var s = a.util.createBuffer();
s.putBytes(t.bytes());
var o, u = n.fullMessageLength[n.fullMessageLength.length - 1] + n.messageLengthSize & n.blockLength - 1;
s.putBytes(i.substr(0, n.blockLength - u));
for (var l = 8 * n.fullMessageLength[0], p = 0; p < n.fullMessageLength.length - 1; ++p)
l += (o = 8 * n.fullMessageLength[p + 1]) / 4294967296 >>> 0,
s.putInt32(l >>> 0),
l = o >>> 0;
s.putInt32(l);
var f = {
h0: e.h0,
h1: e.h1,
h2: e.h2,
h3: e.h3,
h4: e.h4,
h5: e.h5,
h6: e.h6,
h7: e.h7
};
c(f, r, s);
var h = a.util.createBuffer();
return h.putInt32(f.h0),
h.putInt32(f.h1),
h.putInt32(f.h2),
h.putInt32(f.h3),
h.putInt32(f.h4),
h.putInt32(f.h5),
h.putInt32(f.h6),
h.putInt32(f.h7),
h
}
,
n
}
;
var i = null
, s = !1
, o = null;
function c(e, t, r) {
for (var a, n, i, s, c, u, l, p, f, h, d, y, g, v = r.length(); v >= 64; ) {
for (c = 0; c < 16; ++c)
t[c] = r.getInt32();
for (; c < 64; ++c)
a = ((a = t[c - 2]) >>> 17 | a << 15) ^ (a >>> 19 | a << 13) ^ a >>> 10,
n = ((n = t[c - 15]) >>> 7 | n << 25) ^ (n >>> 18 | n << 14) ^ n >>> 3,
t[c] = a + t[c - 7] + n + t[c - 16] | 0;
for (u = e.h0,
l = e.h1,
p = e.h2,
f = e.h3,
h = e.h4,
d = e.h5,
y = e.h6,
g = e.h7,
c = 0; c < 64; ++c)
i = (u >>> 2 | u << 30) ^ (u >>> 13 | u << 19) ^ (u >>> 22 | u << 10),
s = u & l | p & (u ^ l),
a = g + ((h >>> 6 | h << 26) ^ (h >>> 11 | h << 21) ^ (h >>> 25 | h << 7)) + (y ^ h & (d ^ y)) + o[c] + t[c],
g = y,
y = d,
d = h,
h = f + a >>> 0,
f = p,
p = l,
l = u,
u = a + (n = i + s) >>> 0;
e.h0 = e.h0 + u | 0,
e.h1 = e.h1 + l | 0,
e.h2 = e.h2 + p | 0,
e.h3 = e.h3 + f | 0,
e.h4 = e.h4 + h | 0,
e.h5 = e.h5 + d | 0,
e.h6 = e.h6 + y | 0,
e.h7 = e.h7 + g | 0,
v -= 64
}
}
}
, function(e, t, r) {
var a = r(0);
r(1);
var n = null;
!a.util.isNodejs || a.options.usePureJavaScript || process.versions["node-webkit"] || (n = r(16)),
(e.exports = a.prng = a.prng || {}).create = function(e) {
for (var t = {
plugin: e,
key: null,
seed: null,
time: null,
reseeds: 0,
generated: 0,
keyBytes: ""
}, r = e.md, i = new Array(32), s = 0; s < 32; ++s)
i[s] = r.create();
function o() {
if (t.pools[0].messageLength >= 32)
return c();
var e = 32 - t.pools[0].messageLength << 5;
t.collect(t.seedFileSync(e)),
c()
}
function c() {
t.reseeds = 4294967295 === t.reseeds ? 0 : t.reseeds + 1;
var e = t.plugin.md.create();
e.update(t.keyBytes);
for (var r = 1, a = 0; a < 32; ++a)
t.reseeds % r == 0 && (e.update(t.pools[a].digest().getBytes()),
t.pools[a].start()),
r <<= 1;
t.keyBytes = e.digest().getBytes(),
e.start(),
e.update(t.keyBytes);
var n = e.digest().getBytes();
t.key = t.plugin.formatKey(t.keyBytes),
t.seed = t.plugin.formatSeed(n),
t.generated = 0
}
function u(e) {
var t = null
, r = a.util.globalScope
, n = r.crypto || r.msCrypto;
n && n.getRandomValues && (t = function(e) {
return n.getRandomValues(e)
}
);
var i = a.util.createBuffer();
if (t)
for (; i.length() < e; ) {
var s = Math.max(1, Math.min(e - i.length(), 65536) / 4)
, o = new Uint32Array(Math.floor(s));
try {
t(o);
for (var c = 0; c < o.length; ++c)
i.putInt32(o[c])
} catch (e) {
if (!("undefined" != typeof QuotaExceededError && e instanceof QuotaExceededError))
throw e
}
}
if (i.length() < e)
for (var u, l, p, f = Math.floor(65536 * Math.random()); i.length() < e; ) {
l = 16807 * (65535 & f),
l += (32767 & (u = 16807 * (f >> 16))) << 16,
f = 4294967295 & (l = (2147483647 & (l += u >> 15)) + (l >> 31));
for (c = 0; c < 3; ++c)
p = f >>> (c << 3),
p ^= Math.floor(256 * Math.random()),
i.putByte(255 & p)
}
return i.getBytes(e)
}
return t.pools = i,
t.pool = 0,
t.generate = function(e, r) {
if (!r)
return t.generateSync(e);
var n = t.plugin.cipher
, i = t.plugin.increment
, s = t.plugin.formatKey
, o = t.plugin.formatSeed
, u = a.util.createBuffer();
t.key = null,
function l(p) {
if (p)
return r(p);
if (u.length() >= e)
return r(null, u.getBytes(e));
t.generated > 1048575 && (t.key = null);
if (null === t.key)
return a.util.nextTick((function() {
!function(e) {
if (t.pools[0].messageLength >= 32)
return c(),
e();
var r = 32 - t.pools[0].messageLength << 5;
t.seedFile(r, (function(r, a) {
if (r)
return e(r);
t.collect(a),
c(),
e()
}
))
}(l)
}
));
var f = n(t.key, t.seed);
t.generated += f.length,
u.putBytes(f),
t.key = s(n(t.key, i(t.seed))),
t.seed = o(n(t.key, t.seed)),
a.util.setImmediate(l)
}()
}
,
t.generateSync = function(e) {
var r = t.plugin.cipher
, n = t.plugin.increment
, i = t.plugin.formatKey
, s = t.plugin.formatSeed;
t.key = null;
for (var c = a.util.createBuffer(); c.length() < e; ) {
t.generated > 1048575 && (t.key = null),
null === t.key && o();
var u = r(t.key, t.seed);
t.generated += u.length,
c.putBytes(u),
t.key = i(r(t.key, n(t.seed))),
t.seed = s(r(t.key, t.seed))
}
return c.getBytes(e)
}
,
n ? (t.seedFile = function(e, t) {
n.randomBytes(e, (function(e, r) {
if (e)
return t(e);
t(null, r.toString())
}
))
}
,
t.seedFileSync = function(e) {
return n.randomBytes(e).toString()
}
) : (t.seedFile = function(e, t) {
try {
t(null, u(e))
} catch (e) {
t(e)
}
}
,
t.seedFileSync = u),
t.collect = function(e) {
for (var r = e.length, a = 0; a < r; ++a)
t.pools[t.pool].update(e.substr(a, 1)),
t.pool = 31 === t.pool ? 0 : t.pool + 1
}
,
t.collectInt = function(e, r) {
for (var a = "", n = 0; n < r; n += 8)
a += String.fromCharCode(e >> n & 255);
t.collect(a)
}
,
t.registerWorker = function(e) {
if (e === self)
t.seedFile = function(e, t) {
self.addEventListener("message", (function e(r) {
var a = r.data;
a.forge && a.forge.prng && (self.removeEventListener("message", e),
t(a.forge.prng.err, a.forge.prng.bytes))
}
)),
self.postMessage({
forge: {
prng: {
needed: e
}
}
})
}
;
else {
e.addEventListener("message", (function(r) {
var a = r.data;
a.forge && a.forge.prng && t.seedFile(a.forge.prng.needed, (function(t, r) {
e.postMessage({
forge: {
prng: {
err: t,
bytes: r
}
}
})
}
))
}
))
}
}
,
t
}
}
, function(e, t, r) {
var a = r(0);
r(1);
var n = [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]
, i = [1, 2, 3, 5]
, s = function(e, t) {
return e << t & 65535 | (65535 & e) >> 16 - t
}
, o = function(e, t) {
return (65535 & e) >> t | e << 16 - t & 65535
};
e.exports = a.rc2 = a.rc2 || {},
a.rc2.expandKey = function(e, t) {
"string" == typeof e && (e = a.util.createBuffer(e)),
t = t || 128;
var r, i = e, s = e.length(), o = t, c = Math.ceil(o / 8), u = 255 >> (7 & o);
for (r = s; r < 128; r++)
i.putByte(n[i.at(r - 1) + i.at(r - s) & 255]);
for (i.setAt(128 - c, n[i.at(128 - c) & u]),
r = 127 - c; r >= 0; r--)
i.setAt(r, n[i.at(r + 1) ^ i.at(r + c)]);
return i
}
;
var c = function(e, t, r) {
var n, c, u, l, p = !1, f = null, h = null, d = null, y = [];
for (e = a.rc2.expandKey(e, t),
u = 0; u < 64; u++)
y.push(e.getInt16Le());
r ? (n = function(e) {
for (u = 0; u < 4; u++)
e[u] += y[l] + (e[(u + 3) % 4] & e[(u + 2) % 4]) + (~e[(u + 3) % 4] & e[(u + 1) % 4]),
e[u] = s(e[u], i[u]),
l++
}
,
c = function(e) {
for (u = 0; u < 4; u++)
e[u] += y[63 & e[(u + 3) % 4]]
}
) : (n = function(e) {
for (u = 3; u >= 0; u--)
e[u] = o(e[u], i[u]),
e[u] -= y[l] + (e[(u + 3) % 4] & e[(u + 2) % 4]) + (~e[(u + 3) % 4] & e[(u + 1) % 4]),
l--
}
,
c = function(e) {
for (u = 3; u >= 0; u--)
e[u] -= y[63 & e[(u + 3) % 4]]
}
);
var g = function(e) {
var t = [];
for (u = 0; u < 4; u++) {
var a = f.getInt16Le();
null !== d && (r ? a ^= d.getInt16Le() : d.putInt16Le(a)),
t.push(65535 & a)
}
l = r ? 0 : 63;
for (var n = 0; n < e.length; n++)
for (var i = 0; i < e[n][0]; i++)
e[n][1](t);
for (u = 0; u < 4; u++)
null !== d && (r ? d.putInt16Le(t[u]) : t[u] ^= d.getInt16Le()),
h.putInt16Le(t[u])
}
, v = null;
return v = {
start: function(e, t) {
e && "string" == typeof e && (e = a.util.createBuffer(e)),
p = !1,
f = a.util.createBuffer(),
h = t || new a.util.createBuffer,
d = e,
v.output = h
},
update: function(e) {
for (p || f.putBuffer(e); f.length() >= 8; )
g([[5, n], [1, c], [6, n], [1, c], [5, n]])
},
finish: function(e) {
var t = !0;
if (r)
if (e)
t = e(8, f, !r);
else {
var a = 8 === f.length() ? 8 : 8 - f.length();
f.fillWithByte(a, a)
}
if (t && (p = !0,
v.update()),
!r && (t = 0 === f.length()))
if (e)
t = e(8, h, !r);
else {
var n = h.length()
, i = h.at(n - 1);
i > n ? t = !1 : h.truncate(i)
}
return t
}
}
};
a.rc2.startEncrypting = function(e, t, r) {
var n = a.rc2.createEncryptionCipher(e, 128);
return n.start(t, r),
n
}
,
a.rc2.createEncryptionCipher = function(e, t) {
return c(e, t, !0)
}
,
a.rc2.startDecrypting = function(e, t, r) {
var n = a.rc2.createDecryptionCipher(e, 128);
return n.start(t, r),
n
}
,
a.rc2.createDecryptionCipher = function(e, t) {
return c(e, t, !1)
}
}
, function(e, t, r) {
var a = r(0);
r(1),
r(2),
r(9);
var n = e.exports = a.pkcs1 = a.pkcs1 || {};
function i(e, t, r) {
r || (r = a.md.sha1.create());
for (var n = "", i = Math.ceil(t / r.digestLength), s = 0; s < i; ++s) {
var o = String.fromCharCode(s >> 24 & 255, s >> 16 & 255, s >> 8 & 255, 255 & s);
r.start(),
r.update(e + o),
n += r.digest().getBytes()
}
return n.substring(0, t)
}
n.encode_rsa_oaep = function(e, t, r) {
var n, s, o, c;
"string" == typeof r ? (n = r,
s = arguments[3] || void 0,
o = arguments[4] || void 0) : r && (n = r.label || void 0,
s = r.seed || void 0,
o = r.md || void 0,
r.mgf1 && r.mgf1.md && (c = r.mgf1.md)),
o ? o.start() : o = a.md.sha1.create(),
c || (c = o);
var u = Math.ceil(e.n.bitLength() / 8)
, l = u - 2 * o.digestLength - 2;
if (t.length > l)
throw (g = new Error("RSAES-OAEP input message length is too long.")).length = t.length,
g.maxLength = l,
g;
n || (n = ""),
o.update(n, "raw");
for (var p = o.digest(), f = "", h = l - t.length, d = 0; d < h; d++)
f += "\0";
var y = p.getBytes() + f + "" + t;
if (s) {
if (s.length !== o.digestLength) {
var g;
throw (g = new Error("Invalid RSAES-OAEP seed. The seed length must match the digest length.")).seedLength = s.length,
g.digestLength = o.digestLength,
g
}
} else
s = a.random.getBytes(o.digestLength);
var v = i(s, u - o.digestLength - 1, c)
, m = a.util.xorBytes(y, v, y.length)
, C = i(m, o.digestLength, c)
, E = a.util.xorBytes(s, C, s.length);
return "\0" + E + m
}
,
n.decode_rsa_oaep = function(e, t, r) {
var n, s, o;
"string" == typeof r ? (n = r,
s = arguments[3] || void 0) : r && (n = r.label || void 0,
s = r.md || void 0,
r.mgf1 && r.mgf1.md && (o = r.mgf1.md));
var c = Math.ceil(e.n.bitLength() / 8);
if (t.length !== c)
throw (m = new Error("RSAES-OAEP encoded message length is invalid.")).length = t.length,
m.expectedLength = c,
m;
if (void 0 === s ? s = a.md.sha1.create() : s.start(),
o || (o = s),
c < 2 * s.digestLength + 2)
throw new Error("RSAES-OAEP key is too short for the hash function.");
n || (n = ""),
s.update(n, "raw");
for (var u = s.digest().getBytes(), l = t.charAt(0), p = t.substring(1, s.digestLength + 1), f = t.substring(1 + s.digestLength), h = i(f, s.digestLength, o), d = a.util.xorBytes(p, h, p.length), y = i(d, c - s.digestLength - 1, o), g = a.util.xorBytes(f, y, f.length), v = g.substring(0, s.digestLength), m = "\0" !== l, C = 0; C < s.digestLength; ++C)
m |= u.charAt(C) !== v.charAt(C);
for (var E = 1, S = s.digestLength, T = s.digestLength; T < g.length; T++) {
var I = g.charCodeAt(T)
, A = 1 & I ^ 1
, B = E ? 65534 : 0;
m |= I & B,
S += E &= A
}
if (m || 1 !== g.charCodeAt(S))
throw new Error("Invalid RSAES-OAEP padding.");
return g.substring(S + 1)
}
}
, function(e, t, r) {
var a = r(0);
r(1),
r(12),
r(2),
function() {
if (a.prime)
e.exports = a.prime;
else {
var t = e.exports = a.prime = a.prime || {}
, r = a.jsbn.BigInteger
, n = [6, 4, 2, 4, 2, 4, 6, 2]
, i = new r(null);
i.fromInt(30);
var s = function(e, t) {
return e | t
};
t.generateProbablePrime = function(e, t, n) {
"function" == typeof t && (n = t,
t = {});
var i = (t = t || {}).algorithm || "PRIMEINC";
"string" == typeof i && (i = {
name: i
}),
i.options = i.options || {};
var s = t.prng || a.random
, u = {
nextBytes: function(e) {
for (var t = s.getBytesSync(e.length), r = 0; r < e.length; ++r)
e[r] = t.charCodeAt(r)
}
};
if ("PRIMEINC" === i.name)
return function(e, t, n, i) {
if ("workers"in n)
return function(e, t, n, i) {
if ("undefined" == typeof Worker)
return o(e, t, n, i);
var s = c(e, t)
, u = n.workers
, l = n.workLoad || 100
, p = 30 * l / 8
, f = n.workerScript || "forge/prime.worker.js";
if (-1 === u)
return a.util.estimateCores((function(e, t) {
e && (t = 2),
u = t - 1,
h()
}
));
function h() {
u = Math.max(1, u);
for (var a = [], n = 0; n < u; ++n)
a[n] = new Worker(f);
for (n = 0; n < u; ++n)
a[n].addEventListener("message", h);
var o = !1;
function h(n) {
if (!o) {
0;
var u = n.data;
if (u.found) {
for (var f = 0; f < a.length; ++f)
a[f].terminate();
return o = !0,
i(null, new r(u.prime,16))
}
s.bitLength() > e && (s = c(e, t));
var h = s.toString(16);
n.target.postMessage({
hex: h,
workLoad: l
}),
s.dAddOffset(p, 0)
}
}
}
h()
}(e, t, n, i);
return o(e, t, n, i)
}(e, u, i.options, n);
throw new Error("Invalid prime generation algorithm: " + i.name)
}
}
function o(e, t, r, i) {
var s = c(e, t)
, o = function(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
}(s.bitLength());
"millerRabinTests"in r && (o = r.millerRabinTests);
var u = 10;
"maxBlockTime"in r && (u = r.maxBlockTime),
function e(t, r, i, s, o, u, l) {
var p = +new Date;
do {
if (t.bitLength() > r && (t = c(r, i)),
t.isProbablePrime(o))
return l(null, t);
t.dAddOffset(n[s++ % 8], 0)
} while (u < 0 || +new Date - p < u);
a.util.setImmediate((function() {
e(t, r, i, s, o, u, l)
}
))
}(s, e, t, 0, o, u, i)
}
function c(e, t) {
var a = new r(e,t)
, n = e - 1;
return a.testBit(n) || a.bitwiseTo(r.ONE.shiftLeft(n), s, a),
a.dAddOffset(31 - a.mod(i).byteValue(), 0),
a
}
}()
}
, function(e, t, r) {
var a = r(0);
r(3),
r(8),
r(6),
r(29),
r(22),
r(2),
r(11),
r(9),
r(1),
r(17);
var n = a.asn1
, i = a.pki
, s = e.exports = a.pkcs12 = a.pkcs12 || {}
, o = {
name: "ContentInfo",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "ContentInfo.contentType",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "contentType"
}, {
name: "ContentInfo.content",
tagClass: n.Class.CONTEXT_SPECIFIC,
constructed: !0,
captureAsn1: "content"
}]
}
, c = {
name: "PFX",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PFX.version",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "version"
}, o, {
name: "PFX.macData",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
optional: !0,
captureAsn1: "mac",
value: [{
name: "PFX.macData.mac",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PFX.macData.mac.digestAlgorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PFX.macData.mac.digestAlgorithm.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "macAlgorithm"
}, {
name: "PFX.macData.mac.digestAlgorithm.parameters",
tagClass: n.Class.UNIVERSAL,
captureAsn1: "macAlgorithmParameters"
}]
}, {
name: "PFX.macData.mac.digest",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OCTETSTRING,
constructed: !1,
capture: "macDigest"
}]
}, {
name: "PFX.macData.macSalt",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OCTETSTRING,
constructed: !1,
capture: "macSalt"
}, {
name: "PFX.macData.iterations",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
optional: !0,
capture: "macIterations"
}]
}]
}
, u = {
name: "SafeBag",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "SafeBag.bagId",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "bagId"
}, {
name: "SafeBag.bagValue",
tagClass: n.Class.CONTEXT_SPECIFIC,
constructed: !0,
captureAsn1: "bagValue"
}, {
name: "SafeBag.bagAttributes",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SET,
constructed: !0,
optional: !0,
capture: "bagAttributes"
}]
}
, l = {
name: "Attribute",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "Attribute.attrId",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "oid"
}, {
name: "Attribute.attrValues",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SET,
constructed: !0,
capture: "values"
}]
}
, p = {
name: "CertBag",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "CertBag.certId",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "certId"
}, {
name: "CertBag.certValue",
tagClass: n.Class.CONTEXT_SPECIFIC,
constructed: !0,
value: [{
name: "CertBag.certValue[0]",
tagClass: n.Class.UNIVERSAL,
type: n.Class.OCTETSTRING,
constructed: !1,
capture: "cert"
}]
}]
};
function f(e, t, r, a) {
for (var n = [], i = 0; i < e.length; i++)
for (var s = 0; s < e[i].safeBags.length; s++) {
var o = e[i].safeBags[s];
void 0 !== a && o.type !== a || (null !== t ? void 0 !== o.attributes[t] && o.attributes[t].indexOf(r) >= 0 && n.push(o) : n.push(o))
}
return n
}
function h(e) {
if (e.composed || e.constructed) {
for (var t = a.util.createBuffer(), r = 0; r < e.value.length; ++r)
t.putBytes(e.value[r].value);
e.composed = e.constructed = !1,
e.value = t.getBytes()
}
return e
}
function d(e, t) {
var r = {}
, s = [];
if (!n.validate(e, a.pkcs7.asn1.encryptedDataValidator, r, s))
throw (o = new Error("Cannot read EncryptedContentInfo.")).errors = s,
o;
var o, c = n.derToOid(r.contentType);
if (c !== i.oids.data)
throw (o = new Error("PKCS#12 EncryptedContentInfo ContentType is not Data.")).oid = c,
o;
c = n.derToOid(r.encAlgorithm);
var u = i.pbe.getCipher(c, r.encParameter, t)
, l = h(r.encryptedContentAsn1)
, p = a.util.createBuffer(l.value);
if (u.update(p),
!u.finish())
throw new Error("Failed to decrypt PKCS#12 SafeContents.");
return u.output.getBytes()
}
function y(e, t, r) {
if (!t && 0 === e.length)
return [];
if ((e = n.fromDer(e, t)).tagClass !== n.Class.UNIVERSAL || e.type !== n.Type.SEQUENCE || !0 !== e.constructed)
throw new Error("PKCS#12 SafeContents expected to be a SEQUENCE OF SafeBag.");
for (var a = [], s = 0; s < e.value.length; s++) {
var o = e.value[s]
, c = {}
, l = [];
if (!n.validate(o, u, c, l))
throw (v = new Error("Cannot read SafeBag.")).errors = l,
v;
var f, h, d = {
type: n.derToOid(c.bagId),
attributes: g(c.bagAttributes)
};
a.push(d);
var y = c.bagValue.value[0];
switch (d.type) {
case i.oids.pkcs8ShroudedKeyBag:
if (null === (y = i.decryptPrivateKeyInfo(y, r)))
throw new Error("Unable to decrypt PKCS#8 ShroudedKeyBag, wrong password?");
case i.oids.keyBag:
try {
d.key = i.privateKeyFromAsn1(y)
} catch (e) {
d.key = null,
d.asn1 = y
}
continue;
case i.oids.certBag:
f = p,
h = function() {
if (n.derToOid(c.certId) !== i.oids.x509Certificate) {
var e = new Error("Unsupported certificate type, only X.509 supported.");
throw e.oid = n.derToOid(c.certId),
e
}
var r = n.fromDer(c.cert, t);
try {
d.cert = i.certificateFromAsn1(r, !0)
} catch (e) {
d.cert = null,
d.asn1 = r
}
}
;
break;
default:
var v;
throw (v = new Error("Unsupported PKCS#12 SafeBag type.")).oid = d.type,
v
}
if (void 0 !== f && !n.validate(y, f, c, l))
throw (v = new Error("Cannot read PKCS#12 " + f.name)).errors = l,
v;
h()
}
return a
}
function g(e) {
var t = {};
if (void 0 !== e)
for (var r = 0; r < e.length; ++r) {
var a = {}
, s = [];
if (!n.validate(e[r], l, a, s)) {
var o = new Error("Cannot read PKCS#12 BagAttribute.");
throw o.errors = s,
o
}
var c = n.derToOid(a.oid);
if (void 0 !== i.oids[c]) {
t[i.oids[c]] = [];
for (var u = 0; u < a.values.length; ++u)
t[i.oids[c]].push(a.values[u].value)
}
}
return t
}
s.pkcs12FromAsn1 = function(e, t, r) {
"string" == typeof t ? (r = t,
t = !0) : void 0 === t && (t = !0);
var u = {};
if (!n.validate(e, c, u, []))
throw (l = new Error("Cannot read PKCS#12 PFX. ASN.1 object is not an PKCS#12 PFX.")).errors = l,
l;
var l, p = {
version: u.version.charCodeAt(0),
safeContents: [],
getBags: function(e) {
var t, r = {};
return "localKeyId"in e ? t = e.localKeyId : "localKeyIdHex"in e && (t = a.util.hexToBytes(e.localKeyIdHex)),
void 0 === t && !("friendlyName"in e) && "bagType"in e && (r[e.bagType] = f(p.safeContents, null, null, e.bagType)),
void 0 !== t && (r.localKeyId = f(p.safeContents, "localKeyId", t, e.bagType)),
"friendlyName"in e && (r.friendlyName = f(p.safeContents, "friendlyName", e.friendlyName, e.bagType)),
r
},
getBagsByFriendlyName: function(e, t) {
return f(p.safeContents, "friendlyName", e, t)
},
getBagsByLocalKeyId: function(e, t) {
return f(p.safeContents, "localKeyId", e, t)
}
};
if (3 !== u.version.charCodeAt(0))
throw (l = new Error("PKCS#12 PFX of version other than 3 not supported.")).version = u.version.charCodeAt(0),
l;
if (n.derToOid(u.contentType) !== i.oids.data)
throw (l = new Error("Only PKCS#12 PFX in password integrity mode supported.")).oid = n.derToOid(u.contentType),
l;
var g = u.content.value[0];
if (g.tagClass !== n.Class.UNIVERSAL || g.type !== n.Type.OCTETSTRING)
throw new Error("PKCS#12 authSafe content data is not an OCTET STRING.");
if (g = h(g),
u.mac) {
var v = null
, m = 0
, C = n.derToOid(u.macAlgorithm);
switch (C) {
case i.oids.sha1:
v = a.md.sha1.create(),
m = 20;
break;
case i.oids.sha256:
v = a.md.sha256.create(),
m = 32;
break;
case i.oids.sha384:
v = a.md.sha384.create(),
m = 48;
break;
case i.oids.sha512:
v = a.md.sha512.create(),
m = 64;
break;
case i.oids.md5:
v = a.md.md5.create(),
m = 16
}
if (null === v)
throw new Error("PKCS#12 uses unsupported MAC algorithm: " + C);
var E = new a.util.ByteBuffer(u.macSalt)
, S = "macIterations"in u ? parseInt(a.util.bytesToHex(u.macIterations), 16) : 1
, T = s.generateKey(r, E, 3, S, m, v)
, I = a.hmac.create();
if (I.start(v, T),
I.update(g.value),
I.getMac().getBytes() !== u.macDigest)
throw new Error("PKCS#12 MAC could not be verified. Invalid password?")
}
return function(e, t, r, a) {
if ((t = n.fromDer(t, r)).tagClass !== n.Class.UNIVERSAL || t.type !== n.Type.SEQUENCE || !0 !== t.constructed)
throw new Error("PKCS#12 AuthenticatedSafe expected to be a SEQUENCE OF ContentInfo");
for (var s = 0; s < t.value.length; s++) {
var c = t.value[s]
, u = {}
, l = [];
if (!n.validate(c, o, u, l))
throw (v = new Error("Cannot read ContentInfo.")).errors = l,
v;
var p = {
encrypted: !1
}
, f = null
, g = u.content.value[0];
switch (n.derToOid(u.contentType)) {
case i.oids.data:
if (g.tagClass !== n.Class.UNIVERSAL || g.type !== n.Type.OCTETSTRING)
throw new Error("PKCS#12 SafeContents Data is not an OCTET STRING.");
f = h(g).value;
break;
case i.oids.encryptedData:
f = d(g, a),
p.encrypted = !0;
break;
default:
var v;
throw (v = new Error("Unsupported PKCS#12 contentType.")).contentType = n.derToOid(u.contentType),
v
}
p.safeBags = y(f, r, a),
e.safeContents.push(p)
}
}(p, g.value, t, r),
p
}
,
s.toPkcs12Asn1 = function(e, t, r, o) {
(o = o || {}).saltSize = o.saltSize || 8,
o.count = o.count || 2048,
o.algorithm = o.algorithm || o.encAlgorithm || "aes128",
"useMac"in o || (o.useMac = !0),
"localKeyId"in o || (o.localKeyId = null),
"generateLocalKeyId"in o || (o.generateLocalKeyId = !0);
var c, u = o.localKeyId;
if (null !== u)
u = a.util.hexToBytes(u);
else if (o.generateLocalKeyId)
if (t) {
var l = a.util.isArray(t) ? t[0] : t;
"string" == typeof l && (l = i.certificateFromPem(l)),
(N = a.md.sha1.create()).update(n.toDer(i.certificateToAsn1(l)).getBytes()),
u = N.digest().getBytes()
} else
u = a.random.getBytes(20);
var p = [];
null !== u && p.push(n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(i.oids.localKeyId).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SET, !0, [n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, u)])])),
"friendlyName"in o && p.push(n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(i.oids.friendlyName).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SET, !0, [n.create(n.Class.UNIVERSAL, n.Type.BMPSTRING, !1, o.friendlyName)])])),
p.length > 0 && (c = n.create(n.Class.UNIVERSAL, n.Type.SET, !0, p));
var f = []
, h = [];
null !== t && (h = a.util.isArray(t) ? t : [t]);
for (var d = [], y = 0; y < h.length; ++y) {
"string" == typeof (t = h[y]) && (t = i.certificateFromPem(t));
var g = 0 === y ? c : void 0
, v = i.certificateToAsn1(t)
, m = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(i.oids.certBag).getBytes()), n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(i.oids.x509Certificate).getBytes()), n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, n.toDer(v).getBytes())])])]), g]);
d.push(m)
}
if (d.length > 0) {
var C = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, d)
, E = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(i.oids.data).getBytes()), n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, n.toDer(C).getBytes())])]);
f.push(E)
}
var S = null;
if (null !== e) {
var T = i.wrapRsaPrivateKey(i.privateKeyToAsn1(e));
S = null === r ? n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(i.oids.keyBag).getBytes()), n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [T]), c]) : n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(i.oids.pkcs8ShroudedKeyBag).getBytes()), n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [i.encryptPrivateKeyInfo(T, r, o)]), c]);
var I = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [S])
, A = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(i.oids.data).getBytes()), n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, n.toDer(I).getBytes())])]);
f.push(A)
}
var B, b = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, f);
if (o.useMac) {
var N = a.md.sha1.create()
, R = new a.util.ByteBuffer(a.random.getBytes(o.saltSize))
, w = o.count
, _ = (e = s.generateKey(r, R, 3, w, 20),
a.hmac.create());
_.start(N, e),
_.update(n.toDer(b).getBytes());
var L = _.getMac();
B = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(i.oids.sha1).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.NULL, !1, "")]), n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, L.getBytes())]), n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, R.getBytes()), n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, n.integerToDer(w).getBytes())])
}
return n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, n.integerToDer(3).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(i.oids.data).getBytes()), n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, n.toDer(b).getBytes())])]), B])
}
,
s.generateKey = a.pbe.generatePkcs12Key
}
, function(e, t, r) {
var a = r(0);
r(3),
r(1);
var n = a.asn1
, i = e.exports = a.pkcs7asn1 = a.pkcs7asn1 || {};
a.pkcs7 = a.pkcs7 || {},
a.pkcs7.asn1 = i;
var s = {
name: "ContentInfo",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "ContentInfo.ContentType",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "contentType"
}, {
name: "ContentInfo.content",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 0,
constructed: !0,
optional: !0,
captureAsn1: "content"
}]
};
i.contentInfoValidator = s;
var o = {
name: "EncryptedContentInfo",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "EncryptedContentInfo.contentType",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "contentType"
}, {
name: "EncryptedContentInfo.contentEncryptionAlgorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "EncryptedContentInfo.contentEncryptionAlgorithm.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "encAlgorithm"
}, {
name: "EncryptedContentInfo.contentEncryptionAlgorithm.parameter",
tagClass: n.Class.UNIVERSAL,
captureAsn1: "encParameter"
}]
}, {
name: "EncryptedContentInfo.encryptedContent",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 0,
capture: "encryptedContent",
captureAsn1: "encryptedContentAsn1"
}]
};
i.envelopedDataValidator = {
name: "EnvelopedData",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "EnvelopedData.Version",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "version"
}, {
name: "EnvelopedData.RecipientInfos",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SET,
constructed: !0,
captureAsn1: "recipientInfos"
}].concat(o)
},
i.encryptedDataValidator = {
name: "EncryptedData",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "EncryptedData.Version",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "version"
}].concat(o)
};
var c = {
name: "SignerInfo",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "SignerInfo.version",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1
}, {
name: "SignerInfo.issuerAndSerialNumber",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "SignerInfo.issuerAndSerialNumber.issuer",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
captureAsn1: "issuer"
}, {
name: "SignerInfo.issuerAndSerialNumber.serialNumber",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "serial"
}]
}, {
name: "SignerInfo.digestAlgorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "SignerInfo.digestAlgorithm.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "digestAlgorithm"
}, {
name: "SignerInfo.digestAlgorithm.parameter",
tagClass: n.Class.UNIVERSAL,
constructed: !1,
captureAsn1: "digestParameter",
optional: !0
}]
}, {
name: "SignerInfo.authenticatedAttributes",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 0,
constructed: !0,
optional: !0,
capture: "authenticatedAttributes"
}, {
name: "SignerInfo.digestEncryptionAlgorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
capture: "signatureAlgorithm"
}, {
name: "SignerInfo.encryptedDigest",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OCTETSTRING,
constructed: !1,
capture: "signature"
}, {
name: "SignerInfo.unauthenticatedAttributes",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 1,
constructed: !0,
optional: !0,
capture: "unauthenticatedAttributes"
}]
};
i.signedDataValidator = {
name: "SignedData",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "SignedData.Version",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "version"
}, {
name: "SignedData.DigestAlgorithms",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SET,
constructed: !0,
captureAsn1: "digestAlgorithms"
}, s, {
name: "SignedData.Certificates",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 0,
optional: !0,
captureAsn1: "certificates"
}, {
name: "SignedData.CertificateRevocationLists",
tagClass: n.Class.CONTEXT_SPECIFIC,
type: 1,
optional: !0,
captureAsn1: "crls"
}, {
name: "SignedData.SignerInfos",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SET,
capture: "signerInfos",
optional: !0,
value: [c]
}]
},
i.recipientInfoValidator = {
name: "RecipientInfo",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "RecipientInfo.version",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "version"
}, {
name: "RecipientInfo.issuerAndSerial",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "RecipientInfo.issuerAndSerial.issuer",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
captureAsn1: "issuer"
}, {
name: "RecipientInfo.issuerAndSerial.serialNumber",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "serial"
}]
}, {
name: "RecipientInfo.keyEncryptionAlgorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "RecipientInfo.keyEncryptionAlgorithm.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "encAlgorithm"
}, {
name: "RecipientInfo.keyEncryptionAlgorithm.parameter",
tagClass: n.Class.UNIVERSAL,
constructed: !1,
captureAsn1: "encParameter",
optional: !0
}]
}, {
name: "RecipientInfo.encryptedKey",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OCTETSTRING,
constructed: !1,
capture: "encKey"
}]
}
}
, function(e, t, r) {
var a = r(0);
r(1),
a.mgf = a.mgf || {},
(e.exports = a.mgf.mgf1 = a.mgf1 = a.mgf1 || {}).create = function(e) {
return {
generate: function(t, r) {
for (var n = new a.util.ByteBuffer, i = Math.ceil(r / e.digestLength), s = 0; s < i; s++) {
var o = new a.util.ByteBuffer;
o.putInt32(s),
e.start(),
e.update(t + o.getBytes()),
n.putBuffer(e.digest())
}
return n.truncate(n.length() - r),
n.getBytes()
}
}
}
}
, function(e, t, r) {
var a = r(0);
r(4),
r(1);
var n = e.exports = a.sha512 = a.sha512 || {};
a.md.sha512 = a.md.algorithms.sha512 = n;
var i = a.sha384 = a.sha512.sha384 = a.sha512.sha384 || {};
i.create = function() {
return n.create("SHA-384")
}
,
a.md.sha384 = a.md.algorithms.sha384 = i,
a.sha512.sha256 = a.sha512.sha256 || {
create: function() {
return n.create("SHA-512/256")
}
},
a.md["sha512/256"] = a.md.algorithms["sha512/256"] = a.sha512.sha256,
a.sha512.sha224 = a.sha512.sha224 || {
create: function() {
return n.create("SHA-512/224")
}
},
a.md["sha512/224"] = a.md.algorithms["sha512/224"] = a.sha512.sha224,
n.create = function(e) {
if (o || (s = String.fromCharCode(128),
s += a.util.fillString(String.fromCharCode(0), 128),
c = [[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]],
(u = {})["SHA-512"] = [[1779033703, 4089235720], [3144134277, 2227873595], [1013904242, 4271175723], [2773480762, 1595750129], [1359893119, 2917565137], [2600822924, 725511199], [528734635, 4215389547], [1541459225, 327033209]],
u["SHA-384"] = [[3418070365, 3238371032], [1654270250, 914150663], [2438529370, 812702999], [355462360, 4144912697], [1731405415, 4290775857], [2394180231, 1750603025], [3675008525, 1694076839], [1203062813, 3204075428]],
u["SHA-512/256"] = [[573645204, 4230739756], [2673172387, 3360449730], [596883563, 1867755857], [2520282905, 1497426621], [2519219938, 2827943907], [3193839141, 1401305490], [721525244, 746961066], [246885852, 2177182882]],
u["SHA-512/224"] = [[2352822216, 424955298], [1944164710, 2312950998], [502970286, 855612546], [1738396948, 1479516111], [258812777, 2077511080], [2011393907, 79989058], [1067287976, 1780299464], [286451373, 2446758561]],
o = !0),
void 0 === e && (e = "SHA-512"),
!(e in u))
throw new Error("Invalid SHA-512 algorithm: " + e);
for (var t = u[e], r = null, n = a.util.createBuffer(), i = new Array(80), p = 0; p < 80; ++p)
i[p] = new Array(2);
var f = 64;
switch (e) {
case "SHA-384":
f = 48;
break;
case "SHA-512/256":
f = 32;
break;
case "SHA-512/224":
f = 28
}
var h = {
algorithm: e.replace("-", "").toLowerCase(),
blockLength: 128,
digestLength: f,
messageLength: 0,
fullMessageLength: null,
messageLengthSize: 16,
start: function() {
h.messageLength = 0,
h.fullMessageLength = h.messageLength128 = [];
for (var e = h.messageLengthSize / 4, i = 0; i < e; ++i)
h.fullMessageLength.push(0);
n = a.util.createBuffer(),
r = new Array(t.length);
for (i = 0; i < t.length; ++i)
r[i] = t[i].slice(0);
return h
}
};
return h.start(),
h.update = function(e, t) {
"utf8" === t && (e = a.util.encodeUtf8(e));
var s = e.length;
h.messageLength += s,
s = [s / 4294967296 >>> 0, s >>> 0];
for (var o = h.fullMessageLength.length - 1; o >= 0; --o)
h.fullMessageLength[o] += s[1],
s[1] = s[0] + (h.fullMessageLength[o] / 4294967296 >>> 0),
h.fullMessageLength[o] = h.fullMessageLength[o] >>> 0,
s[0] = s[1] / 4294967296 >>> 0;
return n.putBytes(e),
l(r, i, n),
(n.read > 2048 || 0 === n.length()) && n.compact(),
h
}
,
h.digest = function() {
var t = a.util.createBuffer();
t.putBytes(n.bytes());
var o, c = h.fullMessageLength[h.fullMessageLength.length - 1] + h.messageLengthSize & h.blockLength - 1;
t.putBytes(s.substr(0, h.blockLength - c));
for (var u = 8 * h.fullMessageLength[0], p = 0; p < h.fullMessageLength.length - 1; ++p)
u += (o = 8 * h.fullMessageLength[p + 1]) / 4294967296 >>> 0,
t.putInt32(u >>> 0),
u = o >>> 0;
t.putInt32(u);
var f = new Array(r.length);
for (p = 0; p < r.length; ++p)
f[p] = r[p].slice(0);
l(f, i, t);
var d, y = a.util.createBuffer();
d = "SHA-512" === e ? f.length : "SHA-384" === e ? f.length - 2 : f.length - 4;
for (p = 0; p < d; ++p)
y.putInt32(f[p][0]),
p === d - 1 && "SHA-512/224" === e || y.putInt32(f[p][1]);
return y
}
,
h
}
;
var s = null
, o = !1
, c = null
, u = null;
function l(e, t, r) {
for (var a, n, i, s, o, u, l, p, f, h, d, y, g, v, m, C, E, S, T, I, A, B, b, N, R, w, _, L, k, U, D, P, V, O = r.length(); O >= 128; ) {
for (_ = 0; _ < 16; ++_)
t[_][0] = r.getInt32() >>> 0,
t[_][1] = r.getInt32() >>> 0;
for (; _ < 80; ++_)
a = (((L = (U = t[_ - 2])[0]) >>> 19 | (k = U[1]) << 13) ^ (k >>> 29 | L << 3) ^ L >>> 6) >>> 0,
n = ((L << 13 | k >>> 19) ^ (k << 3 | L >>> 29) ^ (L << 26 | k >>> 6)) >>> 0,
i = (((L = (P = t[_ - 15])[0]) >>> 1 | (k = P[1]) << 31) ^ (L >>> 8 | k << 24) ^ L >>> 7) >>> 0,
s = ((L << 31 | k >>> 1) ^ (L << 24 | k >>> 8) ^ (L << 25 | k >>> 7)) >>> 0,
D = t[_ - 7],
V = t[_ - 16],
k = n + D[1] + s + V[1],
t[_][0] = a + D[0] + i + V[0] + (k / 4294967296 >>> 0) >>> 0,
t[_][1] = k >>> 0;
for (d = e[0][0],
y = e[0][1],
g = e[1][0],
v = e[1][1],
m = e[2][0],
C = e[2][1],
E = e[3][0],
S = e[3][1],
T = e[4][0],
I = e[4][1],
A = e[5][0],
B = e[5][1],
b = e[6][0],
N = e[6][1],
R = e[7][0],
w = e[7][1],
_ = 0; _ < 80; ++_)
l = ((T >>> 14 | I << 18) ^ (T >>> 18 | I << 14) ^ (I >>> 9 | T << 23)) >>> 0,
p = (b ^ T & (A ^ b)) >>> 0,
o = ((d >>> 28 | y << 4) ^ (y >>> 2 | d << 30) ^ (y >>> 7 | d << 25)) >>> 0,
u = ((d << 4 | y >>> 28) ^ (y << 30 | d >>> 2) ^ (y << 25 | d >>> 7)) >>> 0,
f = (d & g | m & (d ^ g)) >>> 0,
h = (y & v | C & (y ^ v)) >>> 0,
k = w + (((T << 18 | I >>> 14) ^ (T << 14 | I >>> 18) ^ (I << 23 | T >>> 9)) >>> 0) + ((N ^ I & (B ^ N)) >>> 0) + c[_][1] + t[_][1],
a = R + l + p + c[_][0] + t[_][0] + (k / 4294967296 >>> 0) >>> 0,
n = k >>> 0,
i = o + f + ((k = u + h) / 4294967296 >>> 0) >>> 0,
s = k >>> 0,
R = b,
w = N,
b = A,
N = B,
A = T,
B = I,
T = E + a + ((k = S + n) / 4294967296 >>> 0) >>> 0,
I = k >>> 0,
E = m,
S = C,
m = g,
C = v,
g = d,
v = y,
d = a + i + ((k = n + s) / 4294967296 >>> 0) >>> 0,
y = k >>> 0;
k = e[0][1] + y,
e[0][0] = e[0][0] + d + (k / 4294967296 >>> 0) >>> 0,
e[0][1] = k >>> 0,
k = e[1][1] + v,
e[1][0] = e[1][0] + g + (k / 4294967296 >>> 0) >>> 0,
e[1][1] = k >>> 0,
k = e[2][1] + C,
e[2][0] = e[2][0] + m + (k / 4294967296 >>> 0) >>> 0,
e[2][1] = k >>> 0,
k = e[3][1] + S,
e[3][0] = e[3][0] + E + (k / 4294967296 >>> 0) >>> 0,
e[3][1] = k >>> 0,
k = e[4][1] + I,
e[4][0] = e[4][0] + T + (k / 4294967296 >>> 0) >>> 0,
e[4][1] = k >>> 0,
k = e[5][1] + B,
e[5][0] = e[5][0] + A + (k / 4294967296 >>> 0) >>> 0,
e[5][1] = k >>> 0,
k = e[6][1] + N,
e[6][0] = e[6][0] + b + (k / 4294967296 >>> 0) >>> 0,
e[6][1] = k >>> 0,
k = e[7][1] + w,
e[7][0] = e[7][0] + R + (k / 4294967296 >>> 0) >>> 0,
e[7][1] = k >>> 0,
O -= 128
}
}
}
, function(e, t, r) {
e.exports = r(33)
}
, function(e, t, r) {
e.exports = r(0),
r(5),
r(36),
r(3),
r(13),
r(10),
r(38),
r(8),
r(40),
r(41),
r(42),
r(30),
r(15),
r(7),
r(26),
r(28),
r(43),
r(21),
r(27),
r(24),
r(18),
r(2),
r(25),
r(44),
r(20),
r(1)
}
, function(e, t) {
var r;
r = function() {
return this
}();
try {
r = r || new Function("return this")()
} catch (e) {
"object" == typeof window && (r = window)
}
e.exports = r
}
, function(e, t) {
var r = {};
e.exports = r;
var a = {};
r.encode = function(e, t, r) {
if ("string" != typeof t)
throw new TypeError('"alphabet" must be a string.');
if (void 0 !== r && "number" != typeof r)
throw new TypeError('"maxline" must be a number.');
var a = "";
if (e instanceof Uint8Array) {
var n = 0
, i = t.length
, s = t.charAt(0)
, o = [0];
for (n = 0; n < e.length; ++n) {
for (var c = 0, u = e[n]; c < o.length; ++c)
u += o[c] << 8,
o[c] = u % i,
u = u / i | 0;
for (; u > 0; )
o.push(u % i),
u = u / i | 0
}
for (n = 0; 0 === e[n] && n < e.length - 1; ++n)
a += s;
for (n = o.length - 1; n >= 0; --n)
a += t[o[n]]
} else
a = function(e, t) {
var r = 0
, a = t.length
, n = t.charAt(0)
, i = [0];
for (r = 0; r < e.length(); ++r) {
for (var s = 0, o = e.at(r); s < i.length; ++s)
o += i[s] << 8,
i[s] = o % a,
o = o / a | 0;
for (; o > 0; )
i.push(o % a),
o = o / a | 0
}
var c = "";
for (r = 0; 0 === e.at(r) && r < e.length() - 1; ++r)
c += n;
for (r = i.length - 1; r >= 0; --r)
c += t[i[r]];
return c
}(e, t);
if (r) {
var l = new RegExp(".{1," + r + "}","g");
a = a.match(l).join("\r\n")
}
return a
}
,
r.decode = function(e, t) {
if ("string" != typeof e)
throw new TypeError('"input" must be a string.');
if ("string" != typeof t)
throw new TypeError('"alphabet" must be a string.');
var r = a[t];
if (!r) {
r = a[t] = [];
for (var n = 0; n < t.length; ++n)
r[t.charCodeAt(n)] = n
}
e = e.replace(/\s/g, "");
var i = t.length
, s = t.charAt(0)
, o = [0];
for (n = 0; n < e.length; n++) {
var c = r[e.charCodeAt(n)];
if (void 0 === c)
return;
for (var u = 0, l = c; u < o.length; ++u)
l += o[u] * i,
o[u] = 255 & l,
l >>= 8;
for (; l > 0; )
o.push(255 & l),
l >>= 8
}
for (var p = 0; e[p] === s && p < e.length - 1; ++p)
o.push(0);
return "undefined" != typeof Buffer ? Buffer.from(o.reverse()) : new Uint8Array(o.reverse())
}
}
, function(e, t, r) {
var a = r(0);
r(5),
r(20);
var n = e.exports = a.tls;
function i(e, t, r) {
var i = t.entity === a.tls.ConnectionEnd.client;
e.read.cipherState = {
init: !1,
cipher: a.cipher.createDecipher("AES-CBC", i ? r.keys.server_write_key : r.keys.client_write_key),
iv: i ? r.keys.server_write_IV : r.keys.client_write_IV
},
e.write.cipherState = {
init: !1,
cipher: a.cipher.createCipher("AES-CBC", i ? r.keys.client_write_key : r.keys.server_write_key),
iv: i ? r.keys.client_write_IV : r.keys.server_write_IV
},
e.read.cipherFunction = u,
e.write.cipherFunction = s,
e.read.macLength = e.write.macLength = r.mac_length,
e.read.macFunction = e.write.macFunction = n.hmac_sha1
}
function s(e, t) {
var r, i = !1, s = t.macFunction(t.macKey, t.sequenceNumber, e);
e.fragment.putBytes(s),
t.updateSequenceNumber(),
r = e.version.minor === n.Versions.TLS_1_0.minor ? t.cipherState.init ? null : t.cipherState.iv : a.random.getBytesSync(16),
t.cipherState.init = !0;
var c = t.cipherState.cipher;
return c.start({
iv: r
}),
e.version.minor >= n.Versions.TLS_1_1.minor && c.output.putBytes(r),
c.update(e.fragment),
c.finish(o) && (e.fragment = c.output,
e.length = e.fragment.length(),
i = !0),
i
}
function o(e, t, r) {
if (!r) {
var a = e - t.length() % e;
t.fillWithByte(a - 1, a)
}
return !0
}
function c(e, t, r) {
var a = !0;
if (r) {
for (var n = t.length(), i = t.last(), s = n - 1 - i; s < n - 1; ++s)
a = a && t.at(s) == i;
a && t.truncate(i + 1)
}
return a
}
function u(e, t) {
var r, i = !1;
r = e.version.minor === n.Versions.TLS_1_0.minor ? t.cipherState.init ? null : t.cipherState.iv : e.fragment.getBytes(16),
t.cipherState.init = !0;
var s = t.cipherState.cipher;
s.start({
iv: r
}),
s.update(e.fragment),
i = s.finish(c);
var o = t.macLength
, u = a.random.getBytesSync(o)
, l = s.output.length();
l >= o ? (e.fragment = s.output.getBytes(l - o),
u = s.output.getBytes(o)) : e.fragment = s.output.getBytes(),
e.fragment = a.util.createBuffer(e.fragment),
e.length = e.fragment.length();
var p = t.macFunction(t.macKey, t.sequenceNumber, e);
return t.updateSequenceNumber(),
i = function(e, t, r) {
var n = a.hmac.create();
return n.start("SHA1", e),
n.update(t),
t = n.digest().getBytes(),
n.start(null, null),
n.update(r),
r = n.digest().getBytes(),
t === r
}(t.macKey, u, p) && i
}
n.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 = n.BulkCipherAlgorithm.aes,
e.cipher_type = n.CipherType.block,
e.enc_key_length = 16,
e.block_length = 16,
e.fixed_iv_length = 16,
e.record_iv_length = 16,
e.mac_algorithm = n.MACAlgorithm.hmac_sha1,
e.mac_length = 20,
e.mac_key_length = 20
},
initConnectionState: i
},
n.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 = n.BulkCipherAlgorithm.aes,
e.cipher_type = n.CipherType.block,
e.enc_key_length = 32,
e.block_length = 16,
e.fixed_iv_length = 16,
e.record_iv_length = 16,
e.mac_algorithm = n.MACAlgorithm.hmac_sha1,
e.mac_length = 20,
e.mac_key_length = 20
},
initConnectionState: i
}
}
, function(e, t, r) {
var a = r(0);
r(30),
e.exports = a.mgf = a.mgf || {},
a.mgf.mgf1 = a.mgf1
}
, function(e, t, r) {
var a = r(0);
r(12),
r(2),
r(31),
r(1);
var n = r(39)
, i = n.publicKeyValidator
, s = n.privateKeyValidator;
if (void 0 === o)
var o = a.jsbn.BigInteger;
var c = a.util.ByteBuffer
, u = "undefined" == typeof Buffer ? Uint8Array : Buffer;
a.pki = a.pki || {},
e.exports = a.pki.ed25519 = a.ed25519 = a.ed25519 || {};
var l = a.ed25519;
function p(e) {
var t = e.message;
if (t instanceof Uint8Array || t instanceof u)
return t;
var r = e.encoding;
if (void 0 === t) {
if (!e.md)
throw new TypeError('"options.message" or "options.md" not specified.');
t = e.md.digest().getBytes(),
r = "binary"
}
if ("string" == typeof t && !r)
throw new TypeError('"options.encoding" must be "binary" or "utf8".');
if ("string" == typeof t) {
if ("undefined" != typeof Buffer)
return Buffer.from(t, r);
t = new c(t,r)
} else if (!(t instanceof c))
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 a = new u(t.length()), n = 0; n < a.length; ++n)
a[n] = t.at(n);
return a
}
l.constants = {},
l.constants.PUBLIC_KEY_BYTE_LENGTH = 32,
l.constants.PRIVATE_KEY_BYTE_LENGTH = 64,
l.constants.SEED_BYTE_LENGTH = 32,
l.constants.SIGN_BYTE_LENGTH = 64,
l.constants.HASH_BYTE_LENGTH = 64,
l.generateKeyPair = function(e) {
var t = (e = e || {}).seed;
if (void 0 === t)
t = a.random.getBytesSync(l.constants.SEED_BYTE_LENGTH);
else if ("string" == typeof t) {
if (t.length !== l.constants.SEED_BYTE_LENGTH)
throw new TypeError('"seed" must be ' + l.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 = p({
message: t,
encoding: "binary"
});
for (var r = new u(l.constants.PUBLIC_KEY_BYTE_LENGTH), n = new u(l.constants.PRIVATE_KEY_BYTE_LENGTH), i = 0; i < 32; ++i)
n[i] = t[i];
return function(e, t) {
var r, a = [P(), P(), P(), P()], n = E(t, 32);
for (n[0] &= 248,
n[31] &= 127,
n[31] |= 64,
L(a, n),
B(e, a),
r = 0; r < 32; ++r)
t[r + 32] = e[r]
}(r, n),
{
publicKey: r,
privateKey: n
}
}
,
l.privateKeyFromAsn1 = function(e) {
var t = {}
, r = [];
if (!a.asn1.validate(e, s, t, r)) {
var n = new Error("Invalid Key.");
throw n.errors = r,
n
}
var i = a.asn1.derToOid(t.privateKeyOid)
, o = a.oids.EdDSA25519;
if (i !== o)
throw new Error('Invalid OID "' + i + '"; OID must be "' + o + '".');
var c = t.privateKey;
return {
privateKeyBytes: p({
message: a.asn1.fromDer(c).value,
encoding: "binary"
})
}
}
,
l.publicKeyFromAsn1 = function(e) {
var t = {}
, r = [];
if (!a.asn1.validate(e, i, t, r)) {
var n = new Error("Invalid Key.");
throw n.errors = r,
n
}
var s = a.asn1.derToOid(t.publicKeyOid)
, o = a.oids.EdDSA25519;
if (s !== o)
throw new Error('Invalid OID "' + s + '"; OID must be "' + o + '".');
var c = t.ed25519PublicKey;
if (c.length !== l.constants.PUBLIC_KEY_BYTE_LENGTH)
throw new Error("Key length is invalid.");
return p({
message: c,
encoding: "binary"
})
}
,
l.publicKeyFromPrivateKey = function(e) {
var t = p({
message: (e = e || {}).privateKey,
encoding: "binary"
});
if (t.length !== l.constants.PRIVATE_KEY_BYTE_LENGTH)
throw new TypeError('"options.privateKey" must have a byte length of ' + l.constants.PRIVATE_KEY_BYTE_LENGTH);
for (var r = new u(l.constants.PUBLIC_KEY_BYTE_LENGTH), a = 0; a < r.length; ++a)
r[a] = t[32 + a];
return r
}
,
l.sign = function(e) {
var t = p(e = e || {})
, r = p({
message: e.privateKey,
encoding: "binary"
});
if (r.length === l.constants.SEED_BYTE_LENGTH)
r = l.generateKeyPair({
seed: r
}).privateKey;
else if (r.length !== l.constants.PRIVATE_KEY_BYTE_LENGTH)
throw new TypeError('"options.privateKey" must have a byte length of ' + l.constants.SEED_BYTE_LENGTH + " or " + l.constants.PRIVATE_KEY_BYTE_LENGTH);
var a = new u(l.constants.SIGN_BYTE_LENGTH + t.length);
!function(e, t, r, a) {
var n, i, s = new Float64Array(64), o = [P(), P(), P(), P()], c = E(a, 32);
c[0] &= 248,
c[31] &= 127,
c[31] |= 64;
var u = r + 64;
for (n = 0; n < r; ++n)
e[64 + n] = t[n];
for (n = 0; n < 32; ++n)
e[32 + n] = c[32 + n];
var l = E(e.subarray(32), r + 32);
for (T(l),
L(o, l),
B(e, o),
n = 32; n < 64; ++n)
e[n] = a[n];
var p = E(e, r + 64);
for (T(p),
n = 32; n < 64; ++n)
s[n] = 0;
for (n = 0; n < 32; ++n)
s[n] = l[n];
for (n = 0; n < 32; ++n)
for (i = 0; i < 32; i++)
s[n + i] += p[n] * c[i];
S(e.subarray(32), s)
}(a, t, t.length, r);
for (var n = new u(l.constants.SIGN_BYTE_LENGTH), i = 0; i < n.length; ++i)
n[i] = a[i];
return n
}
,
l.verify = function(e) {
var t = p(e = e || {});
if (void 0 === e.signature)
throw new TypeError('"options.signature" must be a node.js Buffer, a Uint8Array, a forge ByteBuffer, or a binary string.');
var r = p({
message: e.signature,
encoding: "binary"
});
if (r.length !== l.constants.SIGN_BYTE_LENGTH)
throw new TypeError('"options.signature" must have a byte length of ' + l.constants.SIGN_BYTE_LENGTH);
var a = p({
message: e.publicKey,
encoding: "binary"
});
if (a.length !== l.constants.PUBLIC_KEY_BYTE_LENGTH)
throw new TypeError('"options.publicKey" must have a byte length of ' + l.constants.PUBLIC_KEY_BYTE_LENGTH);
var n, i = new u(l.constants.SIGN_BYTE_LENGTH + t.length), s = new u(l.constants.SIGN_BYTE_LENGTH + t.length);
for (n = 0; n < l.constants.SIGN_BYTE_LENGTH; ++n)
i[n] = r[n];
for (n = 0; n < t.length; ++n)
i[n + l.constants.SIGN_BYTE_LENGTH] = t[n];
return function(e, t, r, a) {
var n, i = new u(32), s = [P(), P(), P(), P()], o = [P(), P(), P(), P()];
if (-1,
r < 64)
return -1;
if (function(e, t) {
var r = P()
, a = P()
, n = P()
, i = P()
, s = P()
, o = P()
, c = P();
k(e[2], h),
function(e, t) {
var r;
for (r = 0; r < 16; ++r)
e[r] = t[2 * r] + (t[2 * r + 1] << 8);
e[15] &= 32767
}(e[1], t),
K(n, e[1]),
x(i, n, d),
O(n, n, e[2]),
V(i, e[2], i),
K(s, i),
K(o, s),
x(c, o, s),
x(r, c, n),
x(r, r, i),
function(e, t) {
var r, a = P();
for (r = 0; r < 16; ++r)
a[r] = t[r];
for (r = 250; r >= 0; --r)
K(a, a),
1 !== r && x(a, a, t);
for (r = 0; r < 16; ++r)
e[r] = a[r]
}(r, r),
x(r, r, n),
x(r, r, i),
x(r, r, i),
x(e[0], r, i),
K(a, e[0]),
x(a, a, i),
N(a, n) && x(e[0], e[0], C);
if (K(a, e[0]),
x(a, a, i),
N(a, n))
return -1;
w(e[0]) === t[31] >> 7 && O(e[0], f, e[0]);
return x(e[3], e[0], e[1]),
0
}(o, a))
return -1;
for (n = 0; n < r; ++n)
e[n] = t[n];
for (n = 0; n < 32; ++n)
e[n + 32] = a[n];
var c = E(e, r);
if (T(c),
_(s, o, c),
L(o, t.subarray(32)),
I(s, o),
B(i, s),
r -= 64,
R(t, 0, i, 0)) {
for (n = 0; n < r; ++n)
e[n] = 0;
return -1
}
for (n = 0; n < r; ++n)
e[n] = t[n + 64];
return r
}(s, i, i.length, a) >= 0
}
;
var f = P()
, h = P([1])
, d = P([30883, 4953, 19914, 30187, 55467, 16705, 2637, 112, 59544, 30585, 16505, 36039, 65139, 11119, 27886, 20995])
, y = P([61785, 9906, 39828, 60374, 45398, 33411, 5274, 224, 53552, 61171, 33010, 6542, 64743, 22239, 55772, 9222])
, g = P([54554, 36645, 11616, 51542, 42930, 38181, 51040, 26924, 56412, 64982, 57905, 49316, 21502, 52590, 14035, 8553])
, v = P([26200, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214, 26214])
, m = 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])
, C = P([41136, 18958, 6951, 50414, 58488, 44335, 6150, 12099, 55207, 15867, 153, 11085, 57099, 20417, 9344, 11139]);
function E(e, t) {
var r = a.md.sha512.create()
, n = new c(e);
r.update(n.getBytes(t), "binary");
var i = r.digest().getBytes();
if ("undefined" != typeof Buffer)
return Buffer.from(i, "binary");
for (var s = new u(l.constants.HASH_BYTE_LENGTH), o = 0; o < 64; ++o)
s[o] = i.charCodeAt(o);
return s
}
function S(e, t) {
var r, a, n, i;
for (a = 63; a >= 32; --a) {
for (r = 0,
n = a - 32,
i = a - 12; n < i; ++n)
t[n] += r - 16 * t[a] * m[n - (a - 32)],
r = t[n] + 128 >> 8,
t[n] -= 256 * r;
t[n] += r,
t[a] = 0
}
for (r = 0,
n = 0; n < 32; ++n)
t[n] += r - (t[31] >> 4) * m[n],
r = t[n] >> 8,
t[n] &= 255;
for (n = 0; n < 32; ++n)
t[n] -= r * m[n];
for (a = 0; a < 32; ++a)
t[a + 1] += t[a] >> 8,
e[a] = 255 & t[a]
}
function T(e) {
for (var t = new Float64Array(64), r = 0; r < 64; ++r)
t[r] = e[r],
e[r] = 0;
S(e, t)
}
function I(e, t) {
var r = P()
, a = P()
, n = P()
, i = P()
, s = P()
, o = P()
, c = P()
, u = P()
, l = P();
O(r, e[1], e[0]),
O(l, t[1], t[0]),
x(r, r, l),
V(a, e[0], e[1]),
V(l, t[0], t[1]),
x(a, a, l),
x(n, e[3], t[3]),
x(n, n, y),
x(i, e[2], t[2]),
V(i, i, i),
O(s, a, r),
O(o, i, n),
V(c, i, n),
V(u, a, r),
x(e[0], s, o),
x(e[1], u, c),
x(e[2], c, o),
x(e[3], s, u)
}
function A(e, t, r) {
for (var a = 0; a < 4; ++a)
D(e[a], t[a], r)
}
function B(e, t) {
var r = P()
, a = P()
, n = P();
!function(e, t) {
var r, a = P();
for (r = 0; r < 16; ++r)
a[r] = t[r];
for (r = 253; r >= 0; --r)
K(a, a),
2 !== r && 4 !== r && x(a, a, t);
for (r = 0; r < 16; ++r)
e[r] = a[r]
}(n, t[2]),
x(r, t[0], n),
x(a, t[1], n),
b(e, a),
e[31] ^= w(r) << 7
}
function b(e, t) {
var r, a, n, i = P(), s = P();
for (r = 0; r < 16; ++r)
s[r] = t[r];
for (U(s),
U(s),
U(s),
a = 0; a < 2; ++a) {
for (i[0] = s[0] - 65517,
r = 1; r < 15; ++r)
i[r] = s[r] - 65535 - (i[r - 1] >> 16 & 1),
i[r - 1] &= 65535;
i[15] = s[15] - 32767 - (i[14] >> 16 & 1),
n = i[15] >> 16 & 1,
i[14] &= 65535,
D(s, i, 1 - n)
}
for (r = 0; r < 16; r++)
e[2 * r] = 255 & s[r],
e[2 * r + 1] = s[r] >> 8
}
function N(e, t) {
var r = new u(32)
, a = new u(32);
return b(r, e),
b(a, t),
R(r, 0, a, 0)
}
function R(e, t, r, a) {
return function(e, t, r, a, n) {
var i, s = 0;
for (i = 0; i < n; ++i)
s |= e[t + i] ^ r[a + i];
return (1 & s - 1 >>> 8) - 1
}(e, t, r, a, 32)
}
function w(e) {
var t = new u(32);
return b(t, e),
1 & t[0]
}
function _(e, t, r) {
var a, n;
for (k(e[0], f),
k(e[1], h),
k(e[2], h),
k(e[3], f),
n = 255; n >= 0; --n)
A(e, t, a = r[n / 8 | 0] >> (7 & n) & 1),
I(t, e),
I(e, e),
A(e, t, a)
}
function L(e, t) {
var r = [P(), P(), P(), P()];
k(r[0], g),
k(r[1], v),
k(r[2], h),
x(r[3], g, v),
_(e, r, t)
}
function k(e, t) {
var r;
for (r = 0; r < 16; r++)
e[r] = 0 | t[r]
}
function U(e) {
var t, r, a = 1;
for (t = 0; t < 16; ++t)
r = e[t] + a + 65535,
a = Math.floor(r / 65536),
e[t] = r - 65536 * a;
e[0] += a - 1 + 37 * (a - 1)
}
function D(e, t, r) {
for (var a, n = ~(r - 1), i = 0; i < 16; ++i)
a = n & (e[i] ^ t[i]),
e[i] ^= a,
t[i] ^= a
}
function P(e) {
var t, r = new Float64Array(16);
if (e)
for (t = 0; t < e.length; ++t)
r[t] = e[t];
return r
}
function V(e, t, r) {
for (var a = 0; a < 16; ++a)
e[a] = t[a] + r[a]
}
function O(e, t, r) {
for (var a = 0; a < 16; ++a)
e[a] = t[a] - r[a]
}
function K(e, t) {
x(e, t, t)
}
function x(e, t, r) {
var a, n, i = 0, s = 0, o = 0, c = 0, u = 0, l = 0, p = 0, f = 0, h = 0, d = 0, y = 0, g = 0, v = 0, m = 0, C = 0, E = 0, S = 0, T = 0, I = 0, A = 0, B = 0, b = 0, N = 0, R = 0, w = 0, _ = 0, L = 0, k = 0, U = 0, D = 0, P = 0, V = r[0], O = r[1], K = r[2], x = r[3], M = r[4], F = r[5], j = r[6], G = r[7], H = r[8], q = r[9], Q = r[10], z = r[11], Y = r[12], X = r[13], W = r[14], Z = r[15];
i += (a = t[0]) * V,
s += a * O,
o += a * K,
c += a * x,
u += a * M,
l += a * F,
p += a * j,
f += a * G,
h += a * H,
d += a * q,
y += a * Q,
g += a * z,
v += a * Y,
m += a * X,
C += a * W,
E += a * Z,
s += (a = t[1]) * V,
o += a * O,
c += a * K,
u += a * x,
l += a * M,
p += a * F,
f += a * j,
h += a * G,
d += a * H,
y += a * q,
g += a * Q,
v += a * z,
m += a * Y,
C += a * X,
E += a * W,
S += a * Z,
o += (a = t[2]) * V,
c += a * O,
u += a * K,
l += a * x,
p += a * M,
f += a * F,
h += a * j,
d += a * G,
y += a * H,
g += a * q,
v += a * Q,
m += a * z,
C += a * Y,
E += a * X,
S += a * W,
T += a * Z,
c += (a = t[3]) * V,
u += a * O,
l += a * K,
p += a * x,
f += a * M,
h += a * F,
d += a * j,
y += a * G,
g += a * H,
v += a * q,
m += a * Q,
C += a * z,
E += a * Y,
S += a * X,
T += a * W,
I += a * Z,
u += (a = t[4]) * V,
l += a * O,
p += a * K,
f += a * x,
h += a * M,
d += a * F,
y += a * j,
g += a * G,
v += a * H,
m += a * q,
C += a * Q,
E += a * z,
S += a * Y,
T += a * X,
I += a * W,
A += a * Z,
l += (a = t[5]) * V,
p += a * O,
f += a * K,
h += a * x,
d += a * M,
y += a * F,
g += a * j,
v += a * G,
m += a * H,
C += a * q,
E += a * Q,
S += a * z,
T += a * Y,
I += a * X,
A += a * W,
B += a * Z,
p += (a = t[6]) * V,
f += a * O,
h += a * K,
d += a * x,
y += a * M,
g += a * F,
v += a * j,
m += a * G,
C += a * H,
E += a * q,
S += a * Q,
T += a * z,
I += a * Y,
A += a * X,
B += a * W,
b += a * Z,
f += (a = t[7]) * V,
h += a * O,
d += a * K,
y += a * x,
g += a * M,
v += a * F,
m += a * j,
C += a * G,
E += a * H,
S += a * q,
T += a * Q,
I += a * z,
A += a * Y,
B += a * X,
b += a * W,
N += a * Z,
h += (a = t[8]) * V,
d += a * O,
y += a * K,
g += a * x,
v += a * M,
m += a * F,
C += a * j,
E += a * G,
S += a * H,
T += a * q,
I += a * Q,
A += a * z,
B += a * Y,
b += a * X,
N += a * W,
R += a * Z,
d += (a = t[9]) * V,
y += a * O,
g += a * K,
v += a * x,
m += a * M,
C += a * F,
E += a * j,
S += a * G,
T += a * H,
I += a * q,
A += a * Q,
B += a * z,
b += a * Y,
N += a * X,
R += a * W,
w += a * Z,
y += (a = t[10]) * V,
g += a * O,
v += a * K,
m += a * x,
C += a * M,
E += a * F,
S += a * j,
T += a * G,
I += a * H,
A += a * q,
B += a * Q,
b += a * z,
N += a * Y,
R += a * X,
w += a * W,
_ += a * Z,
g += (a = t[11]) * V,
v += a * O,
m += a * K,
C += a * x,
E += a * M,
S += a * F,
T += a * j,
I += a * G,
A += a * H,
B += a * q,
b += a * Q,
N += a * z,
R += a * Y,
w += a * X,
_ += a * W,
L += a * Z,
v += (a = t[12]) * V,
m += a * O,
C += a * K,
E += a * x,
S += a * M,
T += a * F,
I += a * j,
A += a * G,
B += a * H,
b += a * q,
N += a * Q,
R += a * z,
w += a * Y,
_ += a * X,
L += a * W,
k += a * Z,
m += (a = t[13]) * V,
C += a * O,
E += a * K,
S += a * x,
T += a * M,
I += a * F,
A += a * j,
B += a * G,
b += a * H,
N += a * q,
R += a * Q,
w += a * z,
_ += a * Y,
L += a * X,
k += a * W,
U += a * Z,
C += (a = t[14]) * V,
E += a * O,
S += a * K,
T += a * x,
I += a * M,
A += a * F,
B += a * j,
b += a * G,
N += a * H,
R += a * q,
w += a * Q,
_ += a * z,
L += a * Y,
k += a * X,
U += a * W,
D += a * Z,
E += (a = t[15]) * V,
s += 38 * (T += a * K),
o += 38 * (I += a * x),
c += 38 * (A += a * M),
u += 38 * (B += a * F),
l += 38 * (b += a * j),
p += 38 * (N += a * G),
f += 38 * (R += a * H),
h += 38 * (w += a * q),
d += 38 * (_ += a * Q),
y += 38 * (L += a * z),
g += 38 * (k += a * Y),
v += 38 * (U += a * X),
m += 38 * (D += a * W),
C += 38 * (P += a * Z),
i = (a = (i += 38 * (S += a * O)) + (n = 1) + 65535) - 65536 * (n = Math.floor(a / 65536)),
s = (a = s + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
o = (a = o + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
c = (a = c + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
u = (a = u + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
l = (a = l + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
p = (a = p + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
f = (a = f + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
h = (a = h + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
d = (a = d + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
y = (a = y + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
g = (a = g + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
v = (a = v + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
m = (a = m + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
C = (a = C + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
E = (a = E + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
i = (a = (i += n - 1 + 37 * (n - 1)) + (n = 1) + 65535) - 65536 * (n = Math.floor(a / 65536)),
s = (a = s + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
o = (a = o + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
c = (a = c + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
u = (a = u + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
l = (a = l + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
p = (a = p + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
f = (a = f + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
h = (a = h + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
d = (a = d + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
y = (a = y + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
g = (a = g + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
v = (a = v + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
m = (a = m + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
C = (a = C + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
E = (a = E + n + 65535) - 65536 * (n = Math.floor(a / 65536)),
i += n - 1 + 37 * (n - 1),
e[0] = i,
e[1] = s,
e[2] = o,
e[3] = c,
e[4] = u,
e[5] = l,
e[6] = p,
e[7] = f,
e[8] = h,
e[9] = d,
e[10] = y,
e[11] = g,
e[12] = v,
e[13] = m,
e[14] = C,
e[15] = E
}
}
, function(e, t, r) {
var a = r(0);
r(3);
var n = a.asn1;
t.privateKeyValidator = {
name: "PrivateKeyInfo",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "PrivateKeyInfo.version",
tagClass: n.Class.UNIVERSAL,
type: n.Type.INTEGER,
constructed: !1,
capture: "privateKeyVersion"
}, {
name: "PrivateKeyInfo.privateKeyAlgorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "AlgorithmIdentifier.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "privateKeyOid"
}]
}, {
name: "PrivateKeyInfo",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OCTETSTRING,
constructed: !1,
capture: "privateKey"
}]
},
t.publicKeyValidator = {
name: "SubjectPublicKeyInfo",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
captureAsn1: "subjectPublicKeyInfo",
value: [{
name: "SubjectPublicKeyInfo.AlgorithmIdentifier",
tagClass: n.Class.UNIVERSAL,
type: n.Type.SEQUENCE,
constructed: !0,
value: [{
name: "AlgorithmIdentifier.algorithm",
tagClass: n.Class.UNIVERSAL,
type: n.Type.OID,
constructed: !1,
capture: "publicKeyOid"
}]
}, {
tagClass: n.Class.UNIVERSAL,
type: n.Type.BITSTRING,
constructed: !1,
composed: !0,
captureBitStringValue: "ed25519PublicKey"
}]
}
}
, function(e, t, r) {
var a = r(0);
r(1),
r(2),
r(12),
e.exports = a.kem = a.kem || {};
var n = a.jsbn.BigInteger;
function i(e, t, r, n) {
e.generate = function(e, i) {
for (var s = new a.util.ByteBuffer, o = Math.ceil(i / n) + r, c = new a.util.ByteBuffer, u = r; u < o; ++u) {
c.putInt32(u),
t.start(),
t.update(e + c.getBytes());
var l = t.digest();
s.putBytes(l.getBytes(n))
}
return s.truncate(s.length() - i),
s.getBytes()
}
}
a.kem.rsa = {},
a.kem.rsa.create = function(e, t) {
var r = (t = t || {}).prng || a.random
, i = {
encrypt: function(t, i) {
var s, o = Math.ceil(t.n.bitLength() / 8);
do {
s = new n(a.util.bytesToHex(r.getBytesSync(o)),16).mod(t.n)
} while (s.compareTo(n.ONE) <= 0);
var c = o - (s = a.util.hexToBytes(s.toString(16))).length;
return c > 0 && (s = a.util.fillString(String.fromCharCode(0), c) + s),
{
encapsulation: t.encrypt(s, "NONE"),
key: e.generate(s, i)
}
},
decrypt: function(t, r, a) {
var n = t.decrypt(r, "NONE");
return e.generate(n, a)
}
};
return i
}
,
a.kem.kdf1 = function(e, t) {
i(this, e, 0, t || e.digestLength)
}
,
a.kem.kdf2 = function(e, t) {
i(this, e, 1, t || e.digestLength)
}
}
, function(e, t, r) {
var a = r(0);
r(1),
e.exports = a.log = a.log || {},
a.log.levels = ["none", "error", "warning", "info", "debug", "verbose", "max"];
var n = {}
, i = []
, s = null;
a.log.LEVEL_LOCKED = 2,
a.log.NO_LEVEL_CHECK = 4,
a.log.INTERPOLATE = 8;
for (var o = 0; o < a.log.levels.length; ++o) {
var c = a.log.levels[o];
n[c] = {
index: o,
name: c.toUpperCase()
}
}
a.log.logMessage = function(e) {
for (var t = n[e.level].index, r = 0; r < i.length; ++r) {
var s = i[r];
if (s.flags & a.log.NO_LEVEL_CHECK)
s.f(e);
else
t <= n[s.level].index && s.f(s, e)
}
}
,
a.log.prepareStandard = function(e) {
"standard"in e || (e.standard = n[e.level].name + " [" + e.category + "] " + e.message)
}
,
a.log.prepareFull = function(e) {
if (!("full"in e)) {
var t = [e.message];
t = t.concat([] || !1),
e.full = a.util.format.apply(this, t)
}
}
,
a.log.prepareStandardFull = function(e) {
"standardFull"in e || (a.log.prepareStandard(e),
e.standardFull = e.standard)
}
;
var u = ["error", "warning", "info", "debug", "verbose"];
for (o = 0; o < u.length; ++o)
!function(e) {
a.log[e] = function(t, r) {
var n = Array.prototype.slice.call(arguments).slice(2)
, i = {
timestamp: new Date,
level: e,
category: t,
message: r,
arguments: n
};
a.log.logMessage(i)
}
}(u[o]);
if (a.log.makeLogger = function(e) {
var t = {
flags: 0,
f: e
};
return a.log.setLevel(t, "none"),
t
}
,
a.log.setLevel = function(e, t) {
var r = !1;
if (e && !(e.flags & a.log.LEVEL_LOCKED))
for (var n = 0; n < a.log.levels.length; ++n) {
if (t == a.log.levels[n]) {
e.level = t,
r = !0;
break
}
}
return r
}
,
a.log.lock = function(e, t) {
void 0 === t || t ? e.flags |= a.log.LEVEL_LOCKED : e.flags &= ~a.log.LEVEL_LOCKED
}
,
a.log.addLogger = function(e) {
i.push(e)
}
,
"undefined" != typeof console && "log"in console) {
var l;
if (console.error && console.warn && console.info && console.debug) {
var p = {
error: console.error,
warning: console.warn,
info: console.info,
debug: console.debug,
verbose: console.debug
}
, f = function(e, t) {
a.log.prepareStandard(t);
var r = p[t.level]
, n = [t.standard];
n = n.concat(t.arguments.slice()),
r.apply(console, n)
};
l = a.log.makeLogger(f)
} else {
f = function(e, t) {
a.log.prepareStandardFull(t),
console.log(t.standardFull)
}
;
l = a.log.makeLogger(f)
}
a.log.setLevel(l, "debug"),
a.log.addLogger(l),
s = l
} else
console = {
log: function() {}
};
if (null !== s && "undefined" != typeof window && window.location) {
var h = new URL(window.location.href).searchParams;
if (h.has("console.level") && a.log.setLevel(s, h.get("console.level").slice(-1)[0]),
h.has("console.lock"))
"true" == h.get("console.lock").slice(-1)[0] && a.log.lock(s)
}
a.log.consoleLogger = s
}
, function(e, t, r) {
e.exports = r(4),
r(14),
r(9),
r(23),
r(31)
}
, function(e, t, r) {
var a = r(0);
r(5),
r(3),
r(10),
r(6),
r(7),
r(29),
r(2),
r(1),
r(17);
var n = a.asn1
, i = e.exports = a.pkcs7 = a.pkcs7 || {};
function s(e) {
var t = {}
, r = [];
if (!n.validate(e, i.asn1.recipientInfoValidator, t, r)) {
var s = new Error("Cannot read PKCS#7 RecipientInfo. ASN.1 object is not an PKCS#7 RecipientInfo.");
throw s.errors = r,
s
}
return {
version: t.version.charCodeAt(0),
issuer: a.pki.RDNAttributesAsArray(t.issuer),
serialNumber: a.util.createBuffer(t.serial).toHex(),
encryptedContent: {
algorithm: n.derToOid(t.encAlgorithm),
parameter: t.encParameter ? t.encParameter.value : void 0,
content: t.encKey
}
}
}
function o(e) {
for (var t, r = [], i = 0; i < e.length; ++i)
r.push((t = e[i],
n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, n.integerToDer(t.version).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [a.pki.distinguishedNameToAsn1({
attributes: t.issuer
}), n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, a.util.hexToBytes(t.serialNumber))]), n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(t.encryptedContent.algorithm).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.NULL, !1, "")]), n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, t.encryptedContent.content)])));
return r
}
function c(e) {
var t = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, n.integerToDer(e.version).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [a.pki.distinguishedNameToAsn1({
attributes: e.issuer
}), n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, a.util.hexToBytes(e.serialNumber))]), n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(e.digestAlgorithm).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.NULL, !1, "")])]);
if (e.authenticatedAttributesAsn1 && t.value.push(e.authenticatedAttributesAsn1),
t.value.push(n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(e.signatureAlgorithm).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.NULL, !1, "")])),
t.value.push(n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, e.signature)),
e.unauthenticatedAttributes.length > 0) {
for (var r = n.create(n.Class.CONTEXT_SPECIFIC, 1, !0, []), i = 0; i < e.unauthenticatedAttributes.length; ++i) {
var s = e.unauthenticatedAttributes[i];
r.values.push(u(s))
}
t.value.push(r)
}
return t
}
function u(e) {
var t;
if (e.type === a.pki.oids.contentType)
t = n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(e.value).getBytes());
else if (e.type === a.pki.oids.messageDigest)
t = n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, e.value.bytes());
else if (e.type === a.pki.oids.signingTime) {
var r = new Date("1950-01-01T00:00:00Z")
, i = new Date("2050-01-01T00:00:00Z")
, s = e.value;
if ("string" == typeof s) {
var o = Date.parse(s);
s = isNaN(o) ? 13 === s.length ? n.utcTimeToDate(s) : n.generalizedTimeToDate(s) : new Date(o)
}
t = s >= r && s < i ? n.create(n.Class.UNIVERSAL, n.Type.UTCTIME, !1, n.dateToUtcTime(s)) : n.create(n.Class.UNIVERSAL, n.Type.GENERALIZEDTIME, !1, n.dateToGeneralizedTime(s))
}
return n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(e.type).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SET, !0, [t])])
}
function l(e, t, r) {
var i = {};
if (!n.validate(t, 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
}
if (n.derToOid(i.contentType) !== a.pki.oids.data)
throw new Error("Unsupported PKCS#7 message. Only wrapped ContentType Data supported.");
if (i.encryptedContent) {
var o = "";
if (a.util.isArray(i.encryptedContent))
for (var c = 0; c < i.encryptedContent.length; ++c) {
if (i.encryptedContent[c].type !== n.Type.OCTETSTRING)
throw new Error("Malformed PKCS#7 message, expecting encrypted content constructed of only OCTET STRING objects.");
o += i.encryptedContent[c].value
}
else
o = i.encryptedContent;
e.encryptedContent = {
algorithm: n.derToOid(i.encAlgorithm),
parameter: a.util.createBuffer(i.encParameter.value),
content: a.util.createBuffer(o)
}
}
if (i.content) {
o = "";
if (a.util.isArray(i.content))
for (c = 0; c < i.content.length; ++c) {
if (i.content[c].type !== n.Type.OCTETSTRING)
throw new Error("Malformed PKCS#7 message, expecting content constructed of only OCTET STRING objects.");
o += i.content[c].value
}
else
o = i.content;
e.content = a.util.createBuffer(o)
}
return e.version = i.version.charCodeAt(0),
e.rawCapture = i,
i
}
function p(e) {
if (void 0 === e.encryptedContent.key)
throw new Error("Symmetric key not available.");
if (void 0 === e.content) {
var t;
switch (e.encryptedContent.algorithm) {
case a.pki.oids["aes128-CBC"]:
case a.pki.oids["aes192-CBC"]:
case a.pki.oids["aes256-CBC"]:
t = a.aes.createDecryptionCipher(e.encryptedContent.key);
break;
case a.pki.oids.desCBC:
case a.pki.oids["des-EDE3-CBC"]:
t = a.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
}
}
i.messageFromPem = function(e) {
var t = a.pem.decode(e)[0];
if ("PKCS7" !== t.type) {
var r = new Error('Could not convert PKCS#7 message from PEM; PEM header type is not "PKCS#7".');
throw r.headerType = t.type,
r
}
if (t.procType && "ENCRYPTED" === t.procType.type)
throw new Error("Could not convert PKCS#7 message from PEM; PEM is encrypted.");
var s = n.fromDer(t.body);
return i.messageFromAsn1(s)
}
,
i.messageToPem = function(e, t) {
var r = {
type: "PKCS7",
body: n.toDer(e.toAsn1()).getBytes()
};
return a.pem.encode(r, {
maxline: t
})
}
,
i.messageFromAsn1 = function(e) {
var t = {}
, r = [];
if (!n.validate(e, i.asn1.contentInfoValidator, t, r)) {
var s = new Error("Cannot read PKCS#7 message. ASN.1 object is not an PKCS#7 ContentInfo.");
throw s.errors = r,
s
}
var o, c = n.derToOid(t.contentType);
switch (c) {
case a.pki.oids.envelopedData:
o = i.createEnvelopedData();
break;
case a.pki.oids.encryptedData:
o = i.createEncryptedData();
break;
case a.pki.oids.signedData:
o = i.createSignedData();
break;
default:
throw new Error("Cannot read PKCS#7 message. ContentType with OID " + c + " is not (yet) supported.")
}
return o.fromAsn1(t.content.value[0]),
o
}
,
i.createSignedData = function() {
var e = null;
return e = {
type: a.pki.oids.signedData,
version: 1,
certificates: [],
crls: [],
signers: [],
digestAlgorithmIdentifiers: [],
contentInfo: null,
signerInfos: [],
fromAsn1: function(t) {
if (l(e, t, i.asn1.signedDataValidator),
e.certificates = [],
e.crls = [],
e.digestAlgorithmIdentifiers = [],
e.contentInfo = null,
e.signerInfos = [],
e.rawCapture.certificates)
for (var r = e.rawCapture.certificates.value, n = 0; n < r.length; ++n)
e.certificates.push(a.pki.certificateFromAsn1(r[n]))
},
toAsn1: function() {
e.contentInfo || e.sign();
for (var t = [], r = 0; r < e.certificates.length; ++r)
t.push(a.pki.certificateToAsn1(e.certificates[r]));
var i = []
, s = n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, n.integerToDer(e.version).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SET, !0, e.digestAlgorithmIdentifiers), e.contentInfo])]);
return t.length > 0 && s.value[0].value.push(n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, t)),
i.length > 0 && s.value[0].value.push(n.create(n.Class.CONTEXT_SPECIFIC, 1, !0, i)),
s.value[0].value.push(n.create(n.Class.UNIVERSAL, n.Type.SET, !0, e.signerInfos)),
n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(e.type).getBytes()), s])
},
addSigner: function(t) {
var r = t.issuer
, n = t.serialNumber;
if (t.certificate) {
var i = t.certificate;
"string" == typeof i && (i = a.pki.certificateFromPem(i)),
r = i.issuer.attributes,
n = i.serialNumber
}
var s = t.key;
if (!s)
throw new Error("Could not add PKCS#7 signer; no private key specified.");
"string" == typeof s && (s = a.pki.privateKeyFromPem(s));
var o = t.digestAlgorithm || a.pki.oids.sha1;
switch (o) {
case a.pki.oids.sha1:
case a.pki.oids.sha256:
case a.pki.oids.sha384:
case a.pki.oids.sha512:
case a.pki.oids.md5:
break;
default:
throw new Error("Could not add PKCS#7 signer; unknown message digest algorithm: " + o)
}
var c = t.authenticatedAttributes || [];
if (c.length > 0) {
for (var u = !1, l = !1, p = 0; p < c.length; ++p) {
var f = c[p];
if (u || f.type !== a.pki.oids.contentType) {
if (l || f.type !== a.pki.oids.messageDigest)
;
else if (l = !0,
u)
break
} else if (u = !0,
l)
break
}
if (!u || !l)
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: s,
version: 1,
issuer: r,
serialNumber: n,
digestAlgorithm: o,
signatureAlgorithm: a.pki.oids.rsaEncryption,
signature: null,
authenticatedAttributes: c,
unauthenticatedAttributes: []
})
},
sign: function(t) {
var r;
(t = t || {},
"object" != typeof e.content || null === e.contentInfo) && (e.contentInfo = n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(a.pki.oids.data).getBytes())]),
"content"in e && (e.content instanceof a.util.ByteBuffer ? r = e.content.bytes() : "string" == typeof e.content && (r = a.util.encodeUtf8(e.content)),
t.detached ? e.detachedContent = n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, r) : e.contentInfo.value.push(n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, r)]))));
0 !== e.signers.length && function(t) {
var r;
r = e.detachedContent ? e.detachedContent : (r = e.contentInfo.value[1]).value[0];
if (!r)
throw new Error("Could not sign PKCS#7 message; there is no content to sign.");
var i = n.derToOid(e.contentInfo.value[0].value)
, s = n.toDer(r);
for (var o in s.getByte(),
n.getBerValueLength(s),
s = s.getBytes(),
t)
t[o].start().update(s);
for (var l = new Date, p = 0; p < e.signers.length; ++p) {
var f = e.signers[p];
if (0 === f.authenticatedAttributes.length) {
if (i !== a.pki.oids.data)
throw new Error("Invalid signer; authenticatedAttributes must be present when the ContentInfo content type is not PKCS#7 Data.")
} else {
f.authenticatedAttributesAsn1 = n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, []);
for (var h = n.create(n.Class.UNIVERSAL, n.Type.SET, !0, []), d = 0; d < f.authenticatedAttributes.length; ++d) {
var y = f.authenticatedAttributes[d];
y.type === a.pki.oids.messageDigest ? y.value = t[f.digestAlgorithm].digest() : y.type === a.pki.oids.signingTime && (y.value || (y.value = l)),
h.value.push(u(y)),
f.authenticatedAttributesAsn1.value.push(u(y))
}
s = n.toDer(h).getBytes(),
f.md.start().update(s)
}
f.signature = f.key.sign(f.md, "RSASSA-PKCS1-V1_5")
}
e.signerInfos = function(e) {
for (var t = [], r = 0; r < e.length; ++r)
t.push(c(e[r]));
return t
}(e.signers)
}(function() {
for (var t = {}, r = 0; r < e.signers.length; ++r) {
var i = e.signers[r];
(s = i.digestAlgorithm)in t || (t[s] = a.md[a.pki.oids[s]].create()),
0 === i.authenticatedAttributes.length ? i.md = t[s] : i.md = a.md[a.pki.oids[s]].create()
}
for (var s in e.digestAlgorithmIdentifiers = [],
t)
e.digestAlgorithmIdentifiers.push(n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(s).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.NULL, !1, "")]));
return t
}())
},
verify: function() {
throw new Error("PKCS#7 signature verification not yet implemented.")
},
addCertificate: function(t) {
"string" == typeof t && (t = a.pki.certificateFromPem(t)),
e.certificates.push(t)
},
addCertificateRevokationList: function(e) {
throw new Error("PKCS#7 CRL support not yet implemented.")
}
}
}
,
i.createEncryptedData = function() {
var e = null;
return e = {
type: a.pki.oids.encryptedData,
version: 0,
encryptedContent: {
algorithm: a.pki.oids["aes256-CBC"]
},
fromAsn1: function(t) {
l(e, t, i.asn1.encryptedDataValidator)
},
decrypt: function(t) {
void 0 !== t && (e.encryptedContent.key = t),
p(e)
}
}
}
,
i.createEnvelopedData = function() {
var e = null;
return e = {
type: a.pki.oids.envelopedData,
version: 0,
recipients: [],
encryptedContent: {
algorithm: a.pki.oids["aes256-CBC"]
},
fromAsn1: function(t) {
var r = l(e, t, i.asn1.envelopedDataValidator);
e.recipients = function(e) {
for (var t = [], r = 0; r < e.length; ++r)
t.push(s(e[r]));
return t
}(r.recipientInfos.value)
},
toAsn1: function() {
return n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(e.type).getBytes()), n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.INTEGER, !1, n.integerToDer(e.version).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SET, !0, o(e.recipients)), n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, (t = e.encryptedContent,
[n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(a.pki.oids.data).getBytes()), n.create(n.Class.UNIVERSAL, n.Type.SEQUENCE, !0, [n.create(n.Class.UNIVERSAL, n.Type.OID, !1, n.oidToDer(t.algorithm).getBytes()), t.parameter ? n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, t.parameter.getBytes()) : void 0]), n.create(n.Class.CONTEXT_SPECIFIC, 0, !0, [n.create(n.Class.UNIVERSAL, n.Type.OCTETSTRING, !1, t.content.getBytes())])]))])])]);
var t
},
findRecipient: function(t) {
for (var r = t.issuer.attributes, a = 0; a < e.recipients.length; ++a) {
var n = e.recipients[a]
, i = n.issuer;
if (n.serialNumber === t.serialNumber && i.length === r.length) {
for (var s = !0, o = 0; o < r.length; ++o)
if (i[o].type !== r[o].type || i[o].value !== r[o].value) {
s = !1;
break
}
if (s)
return n
}
}
return null
},
decrypt: function(t, r) {
if (void 0 === e.encryptedContent.key && void 0 !== t && void 0 !== r)
switch (t.encryptedContent.algorithm) {
case a.pki.oids.rsaEncryption:
case a.pki.oids.desCBC:
var n = r.decrypt(t.encryptedContent.content);
e.encryptedContent.key = a.util.createBuffer(n);
break;
default:
throw new Error("Unsupported asymmetric cipher, OID " + t.encryptedContent.algorithm)
}
p(e)
},
addRecipient: function(t) {
e.recipients.push({
version: 0,
issuer: t.issuer.attributes,
serialNumber: t.serialNumber,
encryptedContent: {
algorithm: a.pki.oids.rsaEncryption,
key: t.publicKey
}
})
},
encrypt: function(t, r) {
if (void 0 === e.encryptedContent.content) {
var n, i, s;
switch (r = r || e.encryptedContent.algorithm,
t = t || e.encryptedContent.key,
r) {
case a.pki.oids["aes128-CBC"]:
n = 16,
i = 16,
s = a.aes.createEncryptionCipher;
break;
case a.pki.oids["aes192-CBC"]:
n = 24,
i = 16,
s = a.aes.createEncryptionCipher;
break;
case a.pki.oids["aes256-CBC"]:
n = 32,
i = 16,
s = a.aes.createEncryptionCipher;
break;
case a.pki.oids["des-EDE3-CBC"]:
n = 24,
i = 8,
s = a.des.createEncryptionCipher;
break;
default:
throw new Error("Unsupported symmetric cipher, OID " + r)
}
if (void 0 === t)
t = a.util.createBuffer(a.random.getBytes(n));
else if (t.length() != n)
throw new Error("Symmetric key has wrong length; got " + t.length() + " bytes, expected " + n + ".");
e.encryptedContent.algorithm = r,
e.encryptedContent.key = t,
e.encryptedContent.parameter = a.util.createBuffer(a.random.getBytes(i));
var o = s(t);
if (o.start(e.encryptedContent.parameter.copy()),
o.update(e.content),
!o.finish())
throw new Error("Symmetric encryption failed.");
e.encryptedContent.content = o.output
}
for (var c = 0; c < e.recipients.length; ++c) {
var u = e.recipients[c];
if (void 0 === u.encryptedContent.content)
switch (u.encryptedContent.algorithm) {
case a.pki.oids.rsaEncryption:
u.encryptedContent.content = u.encryptedContent.key.encrypt(e.encryptedContent.key.data);
break;
default:
throw new Error("Unsupported asymmetric cipher, OID " + u.encryptedContent.algorithm)
}
}
}
}
}
}
, function(e, t, r) {
var a = r(0);
r(5),
r(8),
r(14),
r(9),
r(1);
var n = e.exports = a.ssh = a.ssh || {};
function i(e, t) {
var r = t.toString(16);
r[0] >= "8" && (r = "00" + r);
var n = a.util.hexToBytes(r);
e.putInt32(n.length),
e.putBytes(n)
}
function s(e, t) {
e.putInt32(t.length),
e.putString(t)
}
function o() {
for (var e = a.md.sha1.create(), t = arguments.length, r = 0; r < t; ++r)
e.update(arguments[r]);
return e.digest()
}
n.privateKeyToPutty = function(e, t, r) {
var n = "" === (t = t || "") ? "none" : "aes256-cbc"
, c = "PuTTY-User-Key-File-2: ssh-rsa\r\n";
c += "Encryption: " + n + "\r\n",
c += "Comment: " + (r = r || "") + "\r\n";
var u = a.util.createBuffer();
s(u, "ssh-rsa"),
i(u, e.e),
i(u, e.n);
var l = a.util.encode64(u.bytes(), 64)
, p = Math.floor(l.length / 66) + 1;
c += "Public-Lines: " + p + "\r\n",
c += l;
var f, h = a.util.createBuffer();
if (i(h, e.d),
i(h, e.p),
i(h, e.q),
i(h, e.qInv),
t) {
var d = h.length() + 16 - 1;
d -= d % 16;
var y = o(h.bytes());
y.truncate(y.length() - d + h.length()),
h.putBuffer(y);
var g = a.util.createBuffer();
g.putBuffer(o("\0\0\0\0", t)),
g.putBuffer(o("\0\0\0", t));
var v = a.aes.createEncryptionCipher(g.truncate(8), "CBC");
v.start(a.util.createBuffer().fillWithByte(0, 16)),
v.update(h.copy()),
v.finish();
var m = v.output;
m.truncate(16),
f = a.util.encode64(m.bytes(), 64)
} else
f = a.util.encode64(h.bytes(), 64);
c += "\r\nPrivate-Lines: " + (p = Math.floor(f.length / 66) + 1) + "\r\n",
c += f;
var C = o("putty-private-key-file-mac-key", t)
, E = a.util.createBuffer();
s(E, "ssh-rsa"),
s(E, n),
s(E, r),
E.putInt32(u.length()),
E.putBuffer(u),
E.putInt32(h.length()),
E.putBuffer(h);
var S = a.hmac.create();
return S.start("sha1", C),
S.update(E.bytes()),
c += "\r\nPrivate-MAC: " + S.digest().toHex() + "\r\n"
}
,
n.publicKeyToOpenSSH = function(e, t) {
t = t || "";
var r = a.util.createBuffer();
return s(r, "ssh-rsa"),
i(r, e.e),
i(r, e.n),
"ssh-rsa " + a.util.encode64(r.bytes()) + " " + t
}
,
n.privateKeyToOpenSSH = function(e, t) {
return t ? a.pki.encryptRsaPrivateKey(e, t, {
legacy: !0,
algorithm: "aes128"
}) : a.pki.privateKeyToPem(e)
}
,
n.getPublicKeyFingerprint = function(e, t) {
var r = (t = t || {}).md || a.md.md5.create()
, n = a.util.createBuffer();
s(n, "ssh-rsa"),
i(n, e.e),
i(n, e.n),
r.start(),
r.update(n.getBytes());
var o = r.digest();
if ("hex" === t.encoding) {
var c = o.toHex();
return t.delimiter ? c.match(/.{2}/g).join(t.delimiter) : c
}
if ("binary" === t.encoding)
return o.getBytes();
if (t.encoding)
throw new Error('Unknown encoding "' + t.encoding + '".');
return o
}
}
])
}
));
// debugger ;
function _0x241ce9(_0x1ca991) {
var _0xc99ebf = window.forge
, _0x7b7aaf = 'LS0tLS1CRUdJTiBQVUJMSUMgS0VZLS0tLS0NCk1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBdDdDQU5SVmh6bzVsN244dlJTVVENCjB0U1BVbmF1ZU03aXNERmZNWGV1d3FWY3dLTFRVN3pCVjRBbjRGWDF6RTNmWWpzRGtkd2pTbjVSUlRhSFJqWDkNCmhPejRGV2VvSTlVR2sxZlFDMXdrcWhlVXJRTTZhQXh0TnVTN2xBWG14U0tlMHZhSFhieGdWZjBIZzRDU1dJZCsNCjgrOHZRRXd2NDZZWDBFeUVEZVduL2gxRU1LUVJpY042VElMeEpqdWdXOHFFS3ZNRGh4QU1sL3VWU0Y4c2lOeGgNCkhXb2Nxa2pIc3piaGtmMnpvNk82aWpaRURWZmlpYkpkeTlYbHNHcXZldnhWWW12dFlxKzh3RE5kTlJ6Qk1kNmUNCkVuRWh3M1FiZzNvSzl5L3FHanFNT1U3N01yRHh0amdhNkN2SVM4ay9SUmpBbkhwSWYrelgySFg3ZHc5ZS9zRG0NCnR3SURBUUFCDQotLS0tLUVORCBQVUJMSUMgS0VZLS0tLS0NCg=='
, _0x5bd379 = _0xc99ebf['util']['decode64'](_0x7b7aaf)
, _0x5b27f8 = _0xc99ebf['pki']['publicKeyFromPem'](_0x5bd379)
, _0x11d025 = _0x5b27f8['encrypt'](_0x1ca991,'RSA-OAEP', {
'md': _0xc99ebf['md']['sha256']['create']()
});
return _0xc99ebf['util']['encode64'](_0x11d025);
}
_0x241ce9('JQeOSFmaofdU1717996399560')