www.suntrust.com
Open in
urlscan Pro
2600:9000:2250:ca00:5:842a:2dc0:93a1
Public Scan
Submitted URL: https://click.mail.mybrokerageinfo.com/?qs=e17ed6303e94f6444fdd7cf332a7212c76028c57cb3dd54017b4761191991e5056f5e863144cb8c3738110e5c0bd...
Effective URL: https://www.suntrust.com/lp/investment-account-access
Submission: On November 01 via manual from US — Scanned from DE
Effective URL: https://www.suntrust.com/lp/investment-account-access
Submission: On November 01 via manual from US — Scanned from DE
Form analysis
3 forms found in the DOMGET /search#all_results
<form id="search-box-form" method="GET" action="/search#all_results" class="sun-header-search-form" role="search">
<a href="javascript:void(0);" id="adv_search">
<span class="sun-header-search-icon" data-sun-toggle-overlay-target="sun-header-search-form"></span>
</a>
<div class="sun-header-search-field sun-hidden">
<label class="sun-header-search-label" for="sun-header-search-input">Search</label>
<input name="searchTerm" tabindex="-1" type="search" id="sun-header-search-input" class="sun-header-search-input" placeholder="Search" onfocus="this.placeholder=''" onblur="this.placeholder='Search'">
<button type="reset" class="sun-header-search-cancel-button">
<span class="sun-button-text">Clear</span>
</button>
</div>
</form>
Name: herosignon-OLB — POST https://login.onlinebanking.suntrust.com/authentication/post
<form action="https://login.onlinebanking.suntrust.com/authentication/post" class="signOnLoginForm herosignon-OLB" method="post" name="herosignon-OLB" autocomplete="off" data-appid="herosignon-OLB" data-gateway="11g" data-apptype="OLB">
<div class="suntrust-login-form-field">
<label for="userID" class="suntrust-accessible-text">User ID</label>
<input type="text" title="User ID" class="suntrust-login-input suntrust-login-user-input" placeholder="User ID" id="userID" autocomplete="off" value="">
<input type="hidden" name="username" class="suntrust-login-hidden-user-id" value="">
<input type="hidden" name="isEncrypted" class="suntrust-login-input-is-encrypted" value="true">
<input type="hidden" name="trk" class="suntrust-trk-input" value="">
<input type="hidden" name="devicePrint" class="suntrust-deviceprint-input" value="">
<input type="hidden" name="geoLocation" class="suntrust-geolocation-input" value="">
</div>
<div class="suntrust-login-form-field suntrust-remember-me-accessible">
<label for="sign-on-herosignon-OLB-password" class="suntrust-accessible-text">Password</label>
<input type="password" placeholder="Password" class="suntrust-login-input suntrust-login-password-herosignon" id="sign-on-herosignon-OLB-password" title="Password" value="" autocomplete="off">
<input type="hidden" name="password" class="hiddenPassword" value="">
<input type="hidden" name="rmUsernameSet" value="false">
<input type="hidden" class="hiddenPublicKey" value="-----BEGIN PUBLIC KEY-----
MIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEAlrOQOKQbXsrk+YW69TAq
mUJeR3CkiXj+HNHnQSFMLwuUwLUYGuTWv0ALs9cDcQ0lTwkv778bwjyLsaBDuZHy
SFJD8R284QxtP4tud4zfWJFFlk2I5FP4jMtkzfozLa06+sMG6z82kH7dYwIxrQiW
Z5i2sCoVfKejw/ZDN0rXLAaLEU6gNZXBLXTe+547Z+ZoIF1TOhV4bCMZmx8j1Ib9
rCqBRfIDkuMMxpMvAosy55afNVjJG+6DlQLRuqVihK7nxaX3rd+JQtSjIEtYK1eJ
cgqIvztR7/zmQeZvKFW2qXJ2rOkNpMJZNKmT2/ga+oAkmzUlgwrk6Ux2ecYwp2HbfwIDAQAB
-----END PUBLIC KEY-----">
<div class="suntrust-remember-me-field">
<div class="sun-checkbox-input-container" id="uniform-sign-on-herosignon-OLB-check-hero"><span><input type="checkbox" id="sign-on-herosignon-OLB-check-hero" data-suntrust-class="suntrust-checkbox" class="suntrust-login-checkbox"
name="chkRememberUser"></span></div>
<input type="hidden" name="rememberMe" class="suntrust-login-checkbox-hidden" value="false">
<label for="sign-on-herosignon-OLB-check-hero" class="suntrust-checkbox-label">Remember User ID</label>
</div>
<div class="suntrust-login-button-herosignon-container">
<input class="suntrust-login-button-herosignon" type="submit" value="Sign On">
</div>
<div>
<input type="hidden" name="successurl" value="https://www1.onlinebanking.suntrust.com/UI/authenticate">
<input type="hidden" name="type" value="P6OLBRM">
</div>
<script type="text/javascript">
/*
* jsrsasign 4.2.2 (c) 2010-2014 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
/*
yahoo-min.js
Copyright (c) 2011, Yahoo! Inc. All rights reserved.
Code licensed under the BSD License:
http://developer.yahoo.com/yui/license.html
version: 2.9.0
*/
if (typeof YAHOO == "undefined" || !YAHOO) {
var YAHOO = {};
}
YAHOO.namespace = function() {
var b = arguments,
g = null,
e, c, f;
for (e = 0; e < b.length; e = e + 1) {
f = ("" + b[e]).split(".");
g = YAHOO;
for (c = (f[0] == "YAHOO") ? 1 : 0; c < f.length; c = c + 1) {
g[f[c]] = g[f[c]] || {};
g = g[f[c]];
}
}
return g;
};
YAHOO.log = function(d, a, c) {
var b = YAHOO.widget.Logger;
if (b && b.log) {
return b.log(d, a, c);
} else {
return false;
}
};
YAHOO.register = function(a, f, e) {
var k = YAHOO.env.modules,
c, j, h, g, d;
if (!k[a]) {
k[a] = {
versions: [],
builds: []
};
}
c = k[a];
j = e.version;
h = e.build;
g = YAHOO.env.listeners;
c.name = a;
c.version = j;
c.build = h;
c.versions.push(j);
c.builds.push(h);
c.mainClass = f;
for (d = 0; d < g.length; d = d + 1) {
g[d](c);
}
if (f) {
f.VERSION = j;
f.BUILD = h;
} else {
YAHOO.log("mainClass is undefined for module " + a, "warn");
}
};
YAHOO.env = YAHOO.env || {
modules: [],
listeners: []
};
YAHOO.env.getVersion = function(a) {
return YAHOO.env.modules[a] || null;
};
YAHOO.env.parseUA = function(d) {
var e = function(i) {
var j = 0;
return parseFloat(i.replace(/\./g, function() {
return (j++ == 1) ? "" : ".";
}));
},
h = navigator,
g = {
ie: 0,
opera: 0,
gecko: 0,
webkit: 0,
chrome: 0,
mobile: null,
air: 0,
ipad: 0,
iphone: 0,
ipod: 0,
ios: null,
android: 0,
webos: 0,
caja: h && h.cajaVersion,
secure: false,
os: null
},
c = d || (navigator && navigator.userAgent),
f = window && window.location,
b = f && f.href,
a;
g.secure = b && (b.toLowerCase().indexOf("https") === 0);
if (c) {
if ((/windows|win32/i).test(c)) {
g.os = "windows";
} else {
if ((/macintosh/i).test(c)) {
g.os = "macintosh";
} else {
if ((/rhino/i).test(c)) {
g.os = "rhino";
}
}
}
if ((/KHTML/).test(c)) {
g.webkit = 1;
}
a = c.match(/AppleWebKit\/([^\s]*)/);
if (a && a[1]) {
g.webkit = e(a[1]);
if (/ Mobile\//.test(c)) {
g.mobile = "Apple";
a = c.match(/OS ([^\s]*)/);
if (a && a[1]) {
a = e(a[1].replace("_", "."));
}
g.ios = a;
g.ipad = g.ipod = g.iphone = 0;
a = c.match(/iPad|iPod|iPhone/);
if (a && a[0]) {
g[a[0].toLowerCase()] = g.ios;
}
} else {
a = c.match(/NokiaN[^\/]*|Android \d\.\d|webOS\/\d\.\d/);
if (a) {
g.mobile = a[0];
}
if (/webOS/.test(c)) {
g.mobile = "WebOS";
a = c.match(/webOS\/([^\s]*);/);
if (a && a[1]) {
g.webos = e(a[1]);
}
}
if (/ Android/.test(c)) {
g.mobile = "Android";
a = c.match(/Android ([^\s]*);/);
if (a && a[1]) {
g.android = e(a[1]);
}
}
}
a = c.match(/Chrome\/([^\s]*)/);
if (a && a[1]) {
g.chrome = e(a[1]);
} else {
a = c.match(/AdobeAIR\/([^\s]*)/);
if (a) {
g.air = a[0];
}
}
}
if (!g.webkit) {
a = c.match(/Opera[\s\/]([^\s]*)/);
if (a && a[1]) {
g.opera = e(a[1]);
a = c.match(/Version\/([^\s]*)/);
if (a && a[1]) {
g.opera = e(a[1]);
}
a = c.match(/Opera Mini[^;]*/);
if (a) {
g.mobile = a[0];
}
} else {
a = c.match(/MSIE\s([^;]*)/);
if (a && a[1]) {
g.ie = e(a[1]);
} else {
a = c.match(/Gecko\/([^\s]*)/);
if (a) {
g.gecko = 1;
a = c.match(/rv:([^\s\)]*)/);
if (a && a[1]) {
g.gecko = e(a[1]);
}
}
}
}
}
}
return g;
};
YAHOO.env.ua = YAHOO.env.parseUA();
(function() {
YAHOO.namespace("util", "widget", "example");
if ("undefined" !== typeof YAHOO_config) {
var b = YAHOO_config.listener,
a = YAHOO.env.listeners,
d = true,
c;
if (b) {
for (c = 0; c < a.length; c++) {
if (a[c] == b) {
d = false;
break;
}
}
if (d) {
a.push(b);
}
}
}
})();
YAHOO.lang = YAHOO.lang || {};
(function() {
var f = YAHOO.lang,
a = Object.prototype,
c = "[object Array]",
h = "[object Function]",
i = "[object Object]",
b = [],
g = {
"&": "&",
"<": "<",
">": ">",
'"': """,
"'": "'",
"/": "/",
"`": "`"
},
d = ["toString", "valueOf"],
e = {
isArray: function(j) {
return a.toString.apply(j) === c;
},
isBoolean: function(j) {
return typeof j === "boolean";
},
isFunction: function(j) {
return (typeof j === "function") || a.toString.apply(j) === h;
},
isNull: function(j) {
return j === null;
},
isNumber: function(j) {
return typeof j === "number" && isFinite(j);
},
isObject: function(j) {
return (j && (typeof j === "object" || f.isFunction(j))) || false;
},
isString: function(j) {
return typeof j === "string";
},
isUndefined: function(j) {
return typeof j === "undefined";
},
_IEEnumFix: (YAHOO.env.ua.ie) ? function(l, k) {
var j, n, m;
for (j = 0; j < d.length; j = j + 1) {
n = d[j];
m = k[n];
if (f.isFunction(m) && m != a[n]) {
l[n] = m;
}
}
} : function() {},
escapeHTML: function(j) {
return j.replace(/[&<>"'\/`]/g, function(k) {
return g[k];
});
},
extend: function(m, n, l) {
if (!n || !m) {
throw new Error("extend failed, please check that " + "all dependencies are included.");
}
var k = function() {},
j;
k.prototype = n.prototype;
m.prototype = new k();
m.prototype.constructor = m;
m.superclass = n.prototype;
if (n.prototype.constructor == a.constructor) {
n.prototype.constructor = n;
}
if (l) {
for (j in l) {
if (f.hasOwnProperty(l, j)) {
m.prototype[j] = l[j];
}
}
f._IEEnumFix(m.prototype, l);
}
},
augmentObject: function(n, m) {
if (!m || !n) {
throw new Error("Absorb failed, verify dependencies.");
}
var j = arguments,
l, o, k = j[2];
if (k && k !== true) {
for (l = 2; l < j.length; l = l + 1) {
n[j[l]] = m[j[l]];
}
} else {
for (o in m) {
if (k || !(o in n)) {
n[o] = m[o];
}
}
f._IEEnumFix(n, m);
}
return n;
},
augmentProto: function(m, l) {
if (!l || !m) {
throw new Error("Augment failed, verify dependencies.");
}
var j = [m.prototype, l.prototype],
k;
for (k = 2; k < arguments.length; k = k + 1) {
j.push(arguments[k]);
}
f.augmentObject.apply(this, j);
return m;
},
dump: function(j, p) {
var l, n, r = [],
t = "{...}",
k = "f(){...}",
q = ", ",
m = " => ";
if (!f.isObject(j)) {
return j + "";
} else {
if (j instanceof Date || ("nodeType" in j && "tagName" in j)) {
return j;
} else {
if (f.isFunction(j)) {
return k;
}
}
}
p = (f.isNumber(p)) ? p : 3;
if (f.isArray(j)) {
r.push("[");
for (l = 0, n = j.length; l < n; l = l + 1) {
if (f.isObject(j[l])) {
r.push((p > 0) ? f.dump(j[l], p - 1) : t);
} else {
r.push(j[l]);
}
r.push(q);
}
if (r.length > 1) {
r.pop();
}
r.push("]");
} else {
r.push("{");
for (l in j) {
if (f.hasOwnProperty(j, l)) {
r.push(l + m);
if (f.isObject(j[l])) {
r.push((p > 0) ? f.dump(j[l], p - 1) : t);
} else {
r.push(j[l]);
}
r.push(q);
}
}
if (r.length > 1) {
r.pop();
}
r.push("}");
}
return r.join("");
},
substitute: function(x, y, E, l) {
var D, C, B, G, t, u, F = [],
p, z = x.length,
A = "dump",
r = " ",
q = "{",
m = "}",
n, w;
for (;;) {
D = x.lastIndexOf(q, z);
if (D < 0) {
break;
}
C = x.indexOf(m, D);
if (D + 1 > C) {
break;
}
p = x.substring(D + 1, C);
G = p;
u = null;
B = G.indexOf(r);
if (B > -1) {
u = G.substring(B + 1);
G = G.substring(0, B);
}
t = y[G];
if (E) {
t = E(G, t, u);
}
if (f.isObject(t)) {
if (f.isArray(t)) {
t = f.dump(t, parseInt(u, 10));
} else {
u = u || "";
n = u.indexOf(A);
if (n > -1) {
u = u.substring(4);
}
w = t.toString();
if (w === i || n > -1) {
t = f.dump(t, parseInt(u, 10));
} else {
t = w;
}
}
} else {
if (!f.isString(t) && !f.isNumber(t)) {
t = "~-" + F.length + "-~";
F[F.length] = p;
}
}
x = x.substring(0, D) + t + x.substring(C + 1);
if (l === false) {
z = D - 1;
}
}
for (D = F.length - 1; D >= 0; D = D - 1) {
x = x.replace(new RegExp("~-" + D + "-~"), "{" + F[D] + "}", "g");
}
return x;
},
trim: function(j) {
try {
return j.replace(/^\s+|\s+$/g, "");
} catch (k) {
return j;
}
},
merge: function() {
var n = {},
k = arguments,
j = k.length,
m;
for (m = 0; m < j; m = m + 1) {
f.augmentObject(n, k[m], true);
}
return n;
},
later: function(t, k, u, n, p) {
t = t || 0;
k = k || {};
var l = u,
s = n,
q, j;
if (f.isString(u)) {
l = k[u];
}
if (!l) {
throw new TypeError("method undefined");
}
if (!f.isUndefined(n) && !f.isArray(s)) {
s = [n];
}
q = function() {
l.apply(k, s || b);
};
j = (p) ? setInterval(q, t) : setTimeout(q, t);
return {
interval: p,
cancel: function() {
if (this.interval) {
clearInterval(j);
} else {
clearTimeout(j);
}
}
};
},
isValue: function(j) {
return (f.isObject(j) || f.isString(j) || f.isNumber(j) || f.isBoolean(j));
}
};
f.hasOwnProperty = (a.hasOwnProperty) ? function(j, k) {
return j && j.hasOwnProperty && j.hasOwnProperty(k);
} : function(j, k) {
return !f.isUndefined(j[k]) && j.constructor.prototype[k] !== j[k];
};
e.augmentObject(f, e, true);
YAHOO.util.Lang = f;
f.augment = f.augmentProto;
YAHOO.augment = f.augmentProto;
YAHOO.extend = f.extend;
})();
YAHOO.register("yahoo", YAHOO, {
version: "2.9.0",
build: "2800"
});
/*! CryptoJS v3.1.2 core-fix.js
* code.google.com/p/crypto-js
* (c) 2009-2013 by Jeff Mott. All rights reserved.
* code.google.com/p/crypto-js/wiki/License
* THIS IS FIX of 'core.js' to fix Hmac issue.
* https://code.google.com/p/crypto-js/issues/detail?id=84
* https://crypto-js.googlecode.com/svn-history/r667/branches/3.x/src/core.js
*/
var CryptoJS = CryptoJS || (function(e, g) {
var a = {};
var b = a.lib = {};
var j = b.Base = (function() {
function n() {}
return {
extend: function(p) {
n.prototype = this;
var o = new n();
if (p) {
o.mixIn(p)
}
if (!o.hasOwnProperty("init")) {
o.init = function() {
o.$super.init.apply(this, arguments)
}
}
o.init.prototype = o;
o.$super = this;
return o
},
create: function() {
var o = this.extend();
o.init.apply(o, arguments);
return o
},
init: function() {},
mixIn: function(p) {
for (var o in p) {
if (p.hasOwnProperty(o)) {
this[o] = p[o]
}
}
if (p.hasOwnProperty("toString")) {
this.toString = p.toString
}
},
clone: function() {
return this.init.prototype.extend(this)
}
}
}());
var l = b.WordArray = j.extend({
init: function(o, n) {
o = this.words = o || [];
if (n != g) {
this.sigBytes = n
} else {
this.sigBytes = o.length * 4
}
},
toString: function(n) {
return (n || h).stringify(this)
},
concat: function(t) {
var q = this.words;
var p = t.words;
var n = this.sigBytes;
var s = t.sigBytes;
this.clamp();
if (n % 4) {
for (var r = 0; r < s; r++) {
var o = (p[r >>> 2] >>> (24 - (r % 4) * 8)) & 255;
q[(n + r) >>> 2] |= o << (24 - ((n + r) % 4) * 8)
}
} else {
for (var r = 0; r < s; r += 4) {
q[(n + r) >>> 2] = p[r >>> 2]
}
}
this.sigBytes += s;
return this
},
clamp: function() {
var o = this.words;
var n = this.sigBytes;
o[n >>> 2] &= 4294967295 << (32 - (n % 4) * 8);
o.length = e.ceil(n / 4)
},
clone: function() {
var n = j.clone.call(this);
n.words = this.words.slice(0);
return n
},
random: function(p) {
var o = [];
for (var n = 0; n < p; n += 4) {
o.push((e.random() * 4294967296) | 0)
}
return new l.init(o, p)
}
});
var m = a.enc = {};
var h = m.Hex = {
stringify: function(p) {
var r = p.words;
var o = p.sigBytes;
var q = [];
for (var n = 0; n < o; n++) {
var s = (r[n >>> 2] >>> (24 - (n % 4) * 8)) & 255;
q.push((s >>> 4).toString(16));
q.push((s & 15).toString(16))
}
return q.join("")
},
parse: function(p) {
var n = p.length;
var q = [];
for (var o = 0; o < n; o += 2) {
q[o >>> 3] |= parseInt(p.substr(o, 2), 16) << (24 - (o % 8) * 4)
}
return new l.init(q, n / 2)
}
};
var d = m.Latin1 = {
stringify: function(q) {
var r = q.words;
var p = q.sigBytes;
var n = [];
for (var o = 0; o < p; o++) {
var s = (r[o >>> 2] >>> (24 - (o % 4) * 8)) & 255;
n.push(String.fromCharCode(s))
}
return n.join("")
},
parse: function(p) {
var n = p.length;
var q = [];
for (var o = 0; o < n; o++) {
q[o >>> 2] |= (p.charCodeAt(o) & 255) << (24 - (o % 4) * 8)
}
return new l.init(q, n)
}
};
var c = m.Utf8 = {
stringify: function(n) {
try {
return decodeURIComponent(escape(d.stringify(n)))
} catch (o) {
throw new Error("Malformed UTF-8 data")
}
},
parse: function(n) {
return d.parse(unescape(encodeURIComponent(n)))
}
};
var i = b.BufferedBlockAlgorithm = j.extend({
reset: function() {
this._data = new l.init();
this._nDataBytes = 0
},
_append: function(n) {
if (typeof n == "string") {
n = c.parse(n)
}
this._data.concat(n);
this._nDataBytes += n.sigBytes
},
_process: function(w) {
var q = this._data;
var x = q.words;
var n = q.sigBytes;
var t = this.blockSize;
var v = t * 4;
var u = n / v;
if (w) {
u = e.ceil(u)
} else {
u = e.max((u | 0) - this._minBufferSize, 0)
}
var s = u * t;
var r = e.min(s * 4, n);
if (s) {
for (var p = 0; p < s; p += t) {
this._doProcessBlock(x, p)
}
var o = x.splice(0, s);
q.sigBytes -= r
}
return new l.init(o, r)
},
clone: function() {
var n = j.clone.call(this);
n._data = this._data.clone();
return n
},
_minBufferSize: 0
});
var f = b.Hasher = i.extend({
cfg: j.extend(),
init: function(n) {
this.cfg = this.cfg.extend(n);
this.reset()
},
reset: function() {
i.reset.call(this);
this._doReset()
},
update: function(n) {
this._append(n);
this._process();
return this
},
finalize: function(n) {
if (n) {
this._append(n)
}
var o = this._doFinalize();
return o
},
blockSize: 512 / 32,
_createHelper: function(n) {
return function(p, o) {
return new n.init(o).finalize(p)
}
},
_createHmacHelper: function(n) {
return function(p, o) {
return new k.HMAC.init(n, o).finalize(p)
}
}
});
var k = a.algo = {};
return a
}(Math));
/*
CryptoJS v3.1.2 x64-core-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function(g) {
var a = CryptoJS,
f = a.lib,
e = f.Base,
h = f.WordArray,
a = a.x64 = {};
a.Word = e.extend({
init: function(b, c) {
this.high = b;
this.low = c
}
});
a.WordArray = e.extend({
init: function(b, c) {
b = this.words = b || [];
this.sigBytes = c != g ? c : 8 * b.length
},
toX32: function() {
for (var b = this.words, c = b.length, a = [], d = 0; d < c; d++) {
var e = b[d];
a.push(e.high);
a.push(e.low)
}
return h.create(a, this.sigBytes)
},
clone: function() {
for (var b = e.clone.call(this), c = b.words = this.words.slice(0), a = c.length, d = 0; d < a; d++) c[d] = c[d].clone();
return b
}
})
})();
/*
CryptoJS v3.1.2 hmac-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function() {
var c = CryptoJS,
k = c.enc.Utf8;
c.algo.HMAC = c.lib.Base.extend({
init: function(a, b) {
a = this._hasher = new a.init;
"string" == typeof b && (b = k.parse(b));
var c = a.blockSize,
e = 4 * c;
b.sigBytes > e && (b = a.finalize(b));
b.clamp();
for (var f = this._oKey = b.clone(), g = this._iKey = b.clone(), h = f.words, j = g.words, d = 0; d < c; d++) h[d] ^= 1549556828, j[d] ^= 909522486;
f.sigBytes = g.sigBytes = e;
this.reset()
},
reset: function() {
var a = this._hasher;
a.reset();
a.update(this._iKey)
},
update: function(a) {
this._hasher.update(a);
return this
},
finalize: function(a) {
var b = this._hasher;
a = b.finalize(a);
b.reset();
return b.finalize(this._oKey.clone().concat(a))
}
})
})();
/*
CryptoJS v3.1.2 sha256-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function(k) {
for (var g = CryptoJS, h = g.lib, v = h.WordArray, j = h.Hasher, h = g.algo, s = [], t = [], u = function(q) {
return 4294967296 * (q - (q | 0)) | 0
}, l = 2, b = 0; 64 > b;) {
var d;
a: {
d = l;
for (var w = k.sqrt(d), r = 2; r <= w; r++)
if (!(d % r)) {
d = !1;
break a
} d = !0
}
d && (8 > b && (s[b] = u(k.pow(l, 0.5))), t[b] = u(k.pow(l, 1 / 3)), b++);
l++
}
var n = [],
h = h.SHA256 = j.extend({
_doReset: function() {
this._hash = new v.init(s.slice(0))
},
_doProcessBlock: function(q, h) {
for (var a = this._hash.words, c = a[0], d = a[1], b = a[2], k = a[3], f = a[4], g = a[5], j = a[6], l = a[7], e = 0; 64 > e; e++) {
if (16 > e) n[e] = q[h + e] | 0;
else {
var m = n[e - 15],
p = n[e - 2];
n[e] = ((m << 25 | m >>> 7) ^ (m << 14 | m >>> 18) ^ m >>> 3) + n[e - 7] + ((p << 15 | p >>> 17) ^ (p << 13 | p >>> 19) ^ p >>> 10) + n[e - 16]
}
m = l + ((f << 26 | f >>> 6) ^ (f << 21 | f >>> 11) ^ (f << 7 | f >>> 25)) + (f & g ^ ~f & j) + t[e] + n[e];
p = ((c << 30 | c >>> 2) ^ (c << 19 | c >>> 13) ^ (c << 10 | c >>> 22)) + (c & d ^ c & b ^ d & b);
l = j;
j = g;
g = f;
f = k + m | 0;
k = b;
b = d;
d = c;
c = m + p | 0
}
a[0] = a[0] + c | 0;
a[1] = a[1] + d | 0;
a[2] = a[2] + b | 0;
a[3] = a[3] + k | 0;
a[4] = a[4] + f | 0;
a[5] = a[5] + g | 0;
a[6] = a[6] + j | 0;
a[7] = a[7] + l | 0
},
_doFinalize: function() {
var d = this._data,
b = d.words,
a = 8 * this._nDataBytes,
c = 8 * d.sigBytes;
b[c >>> 5] |= 128 << 24 - c % 32;
b[(c + 64 >>> 9 << 4) + 14] = k.floor(a / 4294967296);
b[(c + 64 >>> 9 << 4) + 15] = a;
d.sigBytes = 4 * b.length;
this._process();
return this._hash
},
clone: function() {
var b = j.clone.call(this);
b._hash = this._hash.clone();
return b
}
});
g.SHA256 = j._createHelper(h);
g.HmacSHA256 = j._createHmacHelper(h)
})(Math);
/*
CryptoJS v3.1.2 sha224-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function() {
var b = CryptoJS,
d = b.lib.WordArray,
a = b.algo,
c = a.SHA256,
a = a.SHA224 = c.extend({
_doReset: function() {
this._hash = new d.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428])
},
_doFinalize: function() {
var a = c._doFinalize.call(this);
a.sigBytes -= 4;
return a
}
});
b.SHA224 = c._createHelper(a);
b.HmacSHA224 = c._createHmacHelper(a)
})();
/*
CryptoJS v3.1.2 sha512-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function() {
function a() {
return d.create.apply(d, arguments)
}
for (var n = CryptoJS, r = n.lib.Hasher, e = n.x64, d = e.Word, T = e.WordArray, e = n.algo, ea = [a(1116352408, 3609767458), a(1899447441, 602891725), a(3049323471, 3964484399), a(3921009573, 2173295548), a(961987163, 4081628472), a(
1508970993, 3053834265), a(2453635748, 2937671579), a(2870763221, 3664609560), a(3624381080, 2734883394), a(310598401, 1164996542), a(607225278, 1323610764), a(1426881987, 3590304994), a(1925078388, 4068182383), a(2162078206,
991336113), a(2614888103, 633803317),
a(3248222580, 3479774868), a(3835390401, 2666613458), a(4022224774, 944711139), a(264347078, 2341262773), a(604807628, 2007800933), a(770255983, 1495990901), a(1249150122, 1856431235), a(1555081692, 3175218132), a(1996064986,
2198950837), a(2554220882, 3999719339), a(2821834349, 766784016), a(2952996808, 2566594879), a(3210313671, 3203337956), a(3336571891, 1034457026), a(3584528711, 2466948901), a(113926993, 3758326383), a(338241895, 168717936), a(
666307205, 1188179964), a(773529912, 1546045734), a(1294757372, 1522805485), a(1396182291, 2643833823), a(1695183700, 2343527390), a(1986661051, 1014477480), a(2177026350, 1206759142), a(2456956037, 344077627), a(2730485921,
1290863460), a(2820302411, 3158454273), a(3259730800, 3505952657), a(3345764771, 106217008), a(3516065817, 3606008344), a(3600352804, 1432725776), a(4094571909, 1467031594), a(275423344, 851169720), a(430227734, 3100823752), a(
506948616, 1363258195), a(659060556, 3750685593), a(883997877, 3785050280), a(958139571, 3318307427), a(1322822218, 3812723403), a(1537002063, 2003034995), a(1747873779, 3602036899),
a(1955562222, 1575990012), a(2024104815, 1125592928), a(2227730452, 2716904306), a(2361852424, 442776044), a(2428436474, 593698344), a(2756734187, 3733110249), a(3204031479, 2999351573), a(3329325298, 3815920427), a(3391569614,
3928383900), a(3515267271, 566280711), a(3940187606, 3454069534), a(4118630271, 4000239992), a(116418474, 1914138554), a(174292421, 2731055270), a(289380356, 3203993006), a(460393269, 320620315), a(685471733, 587496836), a(
852142971, 1086792851), a(1017036298, 365543100), a(1126000580, 2618297676), a(1288033470, 3409855158), a(1501505948, 4234509866), a(1607167915, 987167468), a(1816402316, 1246189591)
], v = [], w = 0; 80 > w; w++) v[w] = a();
e = e.SHA512 = r.extend({
_doReset: function() {
this._hash = new T.init([new d.init(1779033703, 4089235720), new d.init(3144134277, 2227873595), new d.init(1013904242, 4271175723), new d.init(2773480762, 1595750129), new d.init(1359893119, 2917565137), new d.init(2600822924,
725511199), new d.init(528734635, 4215389547), new d.init(1541459225, 327033209)])
},
_doProcessBlock: function(a, d) {
for (var f = this._hash.words,
F = f[0], e = f[1], n = f[2], r = f[3], G = f[4], H = f[5], I = f[6], f = f[7], w = F.high, J = F.low, X = e.high, K = e.low, Y = n.high, L = n.low, Z = r.high, M = r.low, $ = G.high, N = G.low, aa = H.high, O = H.low, ba = I
.high, P = I.low, ca = f.high, Q = f.low, k = w, g = J, z = X, x = K, A = Y, y = L, U = Z, B = M, l = $, h = N, R = aa, C = O, S = ba, D = P, V = ca, E = Q, m = 0; 80 > m; m++) {
var s = v[m];
if (16 > m) var j = s.high = a[d + 2 * m] | 0,
b = s.low = a[d + 2 * m + 1] | 0;
else {
var j = v[m - 15],
b = j.high,
p = j.low,
j = (b >>> 1 | p << 31) ^ (b >>> 8 | p << 24) ^ b >>> 7,
p = (p >>> 1 | b << 31) ^ (p >>> 8 | b << 24) ^ (p >>> 7 | b << 25),
u = v[m - 2],
b = u.high,
c = u.low,
u = (b >>> 19 | c << 13) ^ (b << 3 | c >>> 29) ^ b >>> 6,
c = (c >>> 19 | b << 13) ^ (c << 3 | b >>> 29) ^ (c >>> 6 | b << 26),
b = v[m - 7],
W = b.high,
t = v[m - 16],
q = t.high,
t = t.low,
b = p + b.low,
j = j + W + (b >>> 0 < p >>> 0 ? 1 : 0),
b = b + c,
j = j + u + (b >>> 0 < c >>> 0 ? 1 : 0),
b = b + t,
j = j + q + (b >>> 0 < t >>> 0 ? 1 : 0);
s.high = j;
s.low = b
}
var W = l & R ^ ~l & S,
t = h & C ^ ~h & D,
s = k & z ^ k & A ^ z & A,
T = g & x ^ g & y ^ x & y,
p = (k >>> 28 | g << 4) ^ (k << 30 | g >>> 2) ^ (k << 25 | g >>> 7),
u = (g >>> 28 | k << 4) ^ (g << 30 | k >>> 2) ^ (g << 25 | k >>> 7),
c = ea[m],
fa = c.high,
da = c.low,
c = E + ((h >>> 14 | l << 18) ^ (h >>> 18 | l << 14) ^ (h << 23 | l >>> 9)),
q = V + ((l >>> 14 | h << 18) ^ (l >>> 18 | h << 14) ^ (l << 23 | h >>> 9)) + (c >>> 0 < E >>> 0 ? 1 : 0),
c = c + t,
q = q + W + (c >>> 0 < t >>> 0 ? 1 : 0),
c = c + da,
q = q + fa + (c >>> 0 < da >>> 0 ? 1 : 0),
c = c + b,
q = q + j + (c >>> 0 < b >>> 0 ? 1 : 0),
b = u + T,
s = p + s + (b >>> 0 < u >>> 0 ? 1 : 0),
V = S,
E = D,
S = R,
D = C,
R = l,
C = h,
h = B + c | 0,
l = U + q + (h >>> 0 < B >>> 0 ? 1 : 0) | 0,
U = A,
B = y,
A = z,
y = x,
z = k,
x = g,
g = c + b | 0,
k = q + s + (g >>> 0 < c >>> 0 ? 1 : 0) | 0
}
J = F.low = J + g;
F.high = w + k + (J >>> 0 < g >>> 0 ? 1 : 0);
K = e.low = K + x;
e.high = X + z + (K >>> 0 < x >>> 0 ? 1 : 0);
L = n.low = L + y;
n.high = Y + A + (L >>> 0 < y >>> 0 ? 1 : 0);
M = r.low = M + B;
r.high = Z + U + (M >>> 0 < B >>> 0 ? 1 : 0);
N = G.low = N + h;
G.high = $ + l + (N >>> 0 < h >>> 0 ? 1 : 0);
O = H.low = O + C;
H.high = aa + R + (O >>> 0 < C >>> 0 ? 1 : 0);
P = I.low = P + D;
I.high = ba + S + (P >>> 0 < D >>> 0 ? 1 : 0);
Q = f.low = Q + E;
f.high = ca + V + (Q >>> 0 < E >>> 0 ? 1 : 0)
},
_doFinalize: function() {
var a = this._data,
d = a.words,
f = 8 * this._nDataBytes,
e = 8 * a.sigBytes;
d[e >>> 5] |= 128 << 24 - e % 32;
d[(e + 128 >>> 10 << 5) + 30] = Math.floor(f / 4294967296);
d[(e + 128 >>> 10 << 5) + 31] = f;
a.sigBytes = 4 * d.length;
this._process();
return this._hash.toX32()
},
clone: function() {
var a = r.clone.call(this);
a._hash = this._hash.clone();
return a
},
blockSize: 32
});
n.SHA512 = r._createHelper(e);
n.HmacSHA512 = r._createHmacHelper(e)
})();
/*
CryptoJS v3.1.2 sha384-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function() {
var c = CryptoJS,
a = c.x64,
b = a.Word,
e = a.WordArray,
a = c.algo,
d = a.SHA512,
a = a.SHA384 = d.extend({
_doReset: function() {
this._hash = new e.init([new b.init(3418070365, 3238371032), new b.init(1654270250, 914150663), new b.init(2438529370, 812702999), new b.init(355462360, 4144912697), new b.init(1731405415, 4290775857), new b.init(2394180231,
1750603025), new b.init(3675008525, 1694076839), new b.init(1203062813, 3204075428)])
},
_doFinalize: function() {
var a = d._doFinalize.call(this);
a.sigBytes -= 16;
return a
}
});
c.SHA384 = d._createHelper(a);
c.HmacSHA384 = d._createHmacHelper(a)
})();
/*
CryptoJS v3.1.2 md5-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function(E) {
function h(a, f, g, j, p, h, k) {
a = a + (f & g | ~f & j) + p + k;
return (a << h | a >>> 32 - h) + f
}
function k(a, f, g, j, p, h, k) {
a = a + (f & j | g & ~j) + p + k;
return (a << h | a >>> 32 - h) + f
}
function l(a, f, g, j, h, k, l) {
a = a + (f ^ g ^ j) + h + l;
return (a << k | a >>> 32 - k) + f
}
function n(a, f, g, j, h, k, l) {
a = a + (g ^ (f | ~j)) + h + l;
return (a << k | a >>> 32 - k) + f
}
for (var r = CryptoJS, q = r.lib, F = q.WordArray, s = q.Hasher, q = r.algo, a = [], t = 0; 64 > t; t++) a[t] = 4294967296 * E.abs(E.sin(t + 1)) | 0;
q = q.MD5 = s.extend({
_doReset: function() {
this._hash = new F.init([1732584193, 4023233417, 2562383102, 271733878])
},
_doProcessBlock: function(m, f) {
for (var g = 0; 16 > g; g++) {
var j = f + g,
p = m[j];
m[j] = (p << 8 | p >>> 24) & 16711935 | (p << 24 | p >>> 8) & 4278255360
}
var g = this._hash.words,
j = m[f + 0],
p = m[f + 1],
q = m[f + 2],
r = m[f + 3],
s = m[f + 4],
t = m[f + 5],
u = m[f + 6],
v = m[f + 7],
w = m[f + 8],
x = m[f + 9],
y = m[f + 10],
z = m[f + 11],
A = m[f + 12],
B = m[f + 13],
C = m[f + 14],
D = m[f + 15],
b = g[0],
c = g[1],
d = g[2],
e = g[3],
b = h(b, c, d, e, j, 7, a[0]),
e = h(e, b, c, d, p, 12, a[1]),
d = h(d, e, b, c, q, 17, a[2]),
c = h(c, d, e, b, r, 22, a[3]),
b = h(b, c, d, e, s, 7, a[4]),
e = h(e, b, c, d, t, 12, a[5]),
d = h(d, e, b, c, u, 17, a[6]),
c = h(c, d, e, b, v, 22, a[7]),
b = h(b, c, d, e, w, 7, a[8]),
e = h(e, b, c, d, x, 12, a[9]),
d = h(d, e, b, c, y, 17, a[10]),
c = h(c, d, e, b, z, 22, a[11]),
b = h(b, c, d, e, A, 7, a[12]),
e = h(e, b, c, d, B, 12, a[13]),
d = h(d, e, b, c, C, 17, a[14]),
c = h(c, d, e, b, D, 22, a[15]),
b = k(b, c, d, e, p, 5, a[16]),
e = k(e, b, c, d, u, 9, a[17]),
d = k(d, e, b, c, z, 14, a[18]),
c = k(c, d, e, b, j, 20, a[19]),
b = k(b, c, d, e, t, 5, a[20]),
e = k(e, b, c, d, y, 9, a[21]),
d = k(d, e, b, c, D, 14, a[22]),
c = k(c, d, e, b, s, 20, a[23]),
b = k(b, c, d, e, x, 5, a[24]),
e = k(e, b, c, d, C, 9, a[25]),
d = k(d, e, b, c, r, 14, a[26]),
c = k(c, d, e, b, w, 20, a[27]),
b = k(b, c, d, e, B, 5, a[28]),
e = k(e, b, c, d, q, 9, a[29]),
d = k(d, e, b, c, v, 14, a[30]),
c = k(c, d, e, b, A, 20, a[31]),
b = l(b, c, d, e, t, 4, a[32]),
e = l(e, b, c, d, w, 11, a[33]),
d = l(d, e, b, c, z, 16, a[34]),
c = l(c, d, e, b, C, 23, a[35]),
b = l(b, c, d, e, p, 4, a[36]),
e = l(e, b, c, d, s, 11, a[37]),
d = l(d, e, b, c, v, 16, a[38]),
c = l(c, d, e, b, y, 23, a[39]),
b = l(b, c, d, e, B, 4, a[40]),
e = l(e, b, c, d, j, 11, a[41]),
d = l(d, e, b, c, r, 16, a[42]),
c = l(c, d, e, b, u, 23, a[43]),
b = l(b, c, d, e, x, 4, a[44]),
e = l(e, b, c, d, A, 11, a[45]),
d = l(d, e, b, c, D, 16, a[46]),
c = l(c, d, e, b, q, 23, a[47]),
b = n(b, c, d, e, j, 6, a[48]),
e = n(e, b, c, d, v, 10, a[49]),
d = n(d, e, b, c, C, 15, a[50]),
c = n(c, d, e, b, t, 21, a[51]),
b = n(b, c, d, e, A, 6, a[52]),
e = n(e, b, c, d, r, 10, a[53]),
d = n(d, e, b, c, y, 15, a[54]),
c = n(c, d, e, b, p, 21, a[55]),
b = n(b, c, d, e, w, 6, a[56]),
e = n(e, b, c, d, D, 10, a[57]),
d = n(d, e, b, c, u, 15, a[58]),
c = n(c, d, e, b, B, 21, a[59]),
b = n(b, c, d, e, s, 6, a[60]),
e = n(e, b, c, d, z, 10, a[61]),
d = n(d, e, b, c, q, 15, a[62]),
c = n(c, d, e, b, x, 21, a[63]);
g[0] = g[0] + b | 0;
g[1] = g[1] + c | 0;
g[2] = g[2] + d | 0;
g[3] = g[3] + e | 0
},
_doFinalize: function() {
var a = this._data,
f = a.words,
g = 8 * this._nDataBytes,
j = 8 * a.sigBytes;
f[j >>> 5] |= 128 << 24 - j % 32;
var h = E.floor(g / 4294967296);
f[(j + 64 >>> 9 << 4) + 15] = (h << 8 | h >>> 24) & 16711935 | (h << 24 | h >>> 8) & 4278255360;
f[(j + 64 >>> 9 << 4) + 14] = (g << 8 | g >>> 24) & 16711935 | (g << 24 | g >>> 8) & 4278255360;
a.sigBytes = 4 * (f.length + 1);
this._process();
a = this._hash;
f = a.words;
for (g = 0; 4 > g; g++) j = f[g], f[g] = (j << 8 | j >>> 24) & 16711935 | (j << 24 | j >>> 8) & 4278255360;
return a
},
clone: function() {
var a = s.clone.call(this);
a._hash = this._hash.clone();
return a
}
});
r.MD5 = s._createHelper(q);
r.HmacMD5 = s._createHmacHelper(q)
})(Math);
/*
CryptoJS v3.1.2 enc-base64-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function() {
var h = CryptoJS,
j = h.lib.WordArray;
h.enc.Base64 = {
stringify: function(b) {
var e = b.words,
f = b.sigBytes,
c = this._map;
b.clamp();
b = [];
for (var a = 0; a < f; a += 3)
for (var d = (e[a >>> 2] >>> 24 - 8 * (a % 4) & 255) << 16 | (e[a + 1 >>> 2] >>> 24 - 8 * ((a + 1) % 4) & 255) << 8 | e[a + 2 >>> 2] >>> 24 - 8 * ((a + 2) % 4) & 255, g = 0; 4 > g && a + 0.75 * g < f; g++) b.push(c.charAt(d >>>
6 * (3 - g) & 63));
if (e = c.charAt(64))
for (; b.length % 4;) b.push(e);
return b.join("")
},
parse: function(b) {
var e = b.length,
f = this._map,
c = f.charAt(64);
c && (c = b.indexOf(c), -1 != c && (e = c));
for (var c = [], a = 0, d = 0; d < e; d++)
if (d % 4) {
var g = f.indexOf(b.charAt(d - 1)) << 2 * (d % 4),
h = f.indexOf(b.charAt(d)) >>> 6 - 2 * (d % 4);
c[a >>> 2] |= (g | h) << 24 - 8 * (a % 4);
a++
} return j.create(c, a)
},
_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
}
})();
/*
CryptoJS v3.1.2 cipher-core-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
CryptoJS.lib.Cipher || function(u) {
var g = CryptoJS,
f = g.lib,
k = f.Base,
l = f.WordArray,
q = f.BufferedBlockAlgorithm,
r = g.enc.Base64,
v = g.algo.EvpKDF,
n = f.Cipher = q.extend({
cfg: k.extend(),
createEncryptor: function(a, b) {
return this.create(this._ENC_XFORM_MODE, a, b)
},
createDecryptor: function(a, b) {
return this.create(this._DEC_XFORM_MODE, a, b)
},
init: function(a, b, c) {
this.cfg = this.cfg.extend(c);
this._xformMode = a;
this._key = b;
this.reset()
},
reset: function() {
q.reset.call(this);
this._doReset()
},
process: function(a) {
this._append(a);
return this._process()
},
finalize: function(a) {
a && this._append(a);
return this._doFinalize()
},
keySize: 4,
ivSize: 4,
_ENC_XFORM_MODE: 1,
_DEC_XFORM_MODE: 2,
_createHelper: function(a) {
return {
encrypt: function(b, c, d) {
return ("string" == typeof c ? s : j).encrypt(a, b, c, d)
},
decrypt: function(b, c, d) {
return ("string" == typeof c ? s : j).decrypt(a, b, c, d)
}
}
}
});
f.StreamCipher = n.extend({
_doFinalize: function() {
return this._process(!0)
},
blockSize: 1
});
var m = g.mode = {},
t = function(a, b, c) {
var d = this._iv;
d ? this._iv = u : d = this._prevBlock;
for (var e = 0; e < c; e++) a[b + e] ^= d[e]
},
h = (f.BlockCipherMode = k.extend({
createEncryptor: function(a, b) {
return this.Encryptor.create(a, b)
},
createDecryptor: function(a, b) {
return this.Decryptor.create(a, b)
},
init: function(a, b) {
this._cipher = a;
this._iv = b
}
})).extend();
h.Encryptor = h.extend({
processBlock: function(a, b) {
var c = this._cipher,
d = c.blockSize;
t.call(this, a, b, d);
c.encryptBlock(a, b);
this._prevBlock = a.slice(b, b + d)
}
});
h.Decryptor = h.extend({
processBlock: function(a, b) {
var c = this._cipher,
d = c.blockSize,
e = a.slice(b, b + d);
c.decryptBlock(a, b);
t.call(this, a, b, d);
this._prevBlock = e
}
});
m = m.CBC = h;
h = (g.pad = {}).Pkcs7 = {
pad: function(a, b) {
for (var c = 4 * b, c = c - a.sigBytes % c, d = c << 24 | c << 16 | c << 8 | c, e = [], f = 0; f < c; f += 4) e.push(d);
c = l.create(e, c);
a.concat(c)
},
unpad: function(a) {
a.sigBytes -= a.words[a.sigBytes - 1 >>> 2] & 255
}
};
f.BlockCipher = n.extend({
cfg: n.cfg.extend({
mode: m,
padding: h
}),
reset: function() {
n.reset.call(this);
var a = this.cfg,
b = a.iv,
a = a.mode;
if (this._xformMode == this._ENC_XFORM_MODE) var c = a.createEncryptor;
else c = a.createDecryptor, this._minBufferSize = 1;
this._mode = c.call(a, this, b && b.words)
},
_doProcessBlock: function(a, b) {
this._mode.processBlock(a, b)
},
_doFinalize: function() {
var a = this.cfg.padding;
if (this._xformMode == this._ENC_XFORM_MODE) {
a.pad(this._data, this.blockSize);
var b = this._process(!0)
} else b = this._process(!0), a.unpad(b);
return b
},
blockSize: 4
});
var p = f.CipherParams = k.extend({
init: function(a) {
this.mixIn(a)
},
toString: function(a) {
return (a || this.formatter).stringify(this)
}
}),
m = (g.format = {}).OpenSSL = {
stringify: function(a) {
var b = a.ciphertext;
a = a.salt;
return (a ? l.create([1398893684, 1701076831]).concat(a).concat(b) : b).toString(r)
},
parse: function(a) {
a = r.parse(a);
var b = a.words;
if (1398893684 == b[0] && 1701076831 == b[1]) {
var c = l.create(b.slice(2, 4));
b.splice(0, 4);
a.sigBytes -= 16
}
return p.create({
ciphertext: a,
salt: c
})
}
},
j = f.SerializableCipher = k.extend({
cfg: k.extend({
format: m
}),
encrypt: function(a, b, c, d) {
d = this.cfg.extend(d);
var e = a.createEncryptor(c, d);
b = e.finalize(b);
e = e.cfg;
return p.create({
ciphertext: b,
key: c,
iv: e.iv,
algorithm: a,
mode: e.mode,
padding: e.padding,
blockSize: a.blockSize,
formatter: d.format
})
},
decrypt: function(a, b, c, d) {
d = this.cfg.extend(d);
b = this._parse(b, d.format);
return a.createDecryptor(c, d).finalize(b.ciphertext)
},
_parse: function(a, b) {
return "string" == typeof a ? b.parse(a, this) : a
}
}),
g = (g.kdf = {}).OpenSSL = {
execute: function(a, b, c, d) {
d || (d = l.random(8));
a = v.create({
keySize: b + c
}).compute(a, d);
c = l.create(a.words.slice(b), 4 * c);
a.sigBytes = 4 * b;
return p.create({
key: a,
iv: c,
salt: d
})
}
},
s = f.PasswordBasedCipher = j.extend({
cfg: j.cfg.extend({
kdf: g
}),
encrypt: function(a, b, c, d) {
d = this.cfg.extend(d);
c = d.kdf.execute(c, a.keySize, a.ivSize);
d.iv = c.iv;
a = j.encrypt.call(this, a, b, c.key, d);
a.mixIn(c);
return a
},
decrypt: function(a, b, c, d) {
d = this.cfg.extend(d);
b = this._parse(b, d.format);
c = d.kdf.execute(c, a.keySize, a.ivSize, b.salt);
d.iv = c.iv;
return j.decrypt.call(this, a, b, c.key, d)
}
})
}();
/*
CryptoJS v3.1.2 aes-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function() {
for (var q = CryptoJS, x = q.lib.BlockCipher, r = q.algo, j = [], y = [], z = [], A = [], B = [], C = [], s = [], u = [], v = [], w = [], g = [], k = 0; 256 > k; k++) g[k] = 128 > k ? k << 1 : k << 1 ^ 283;
for (var n = 0, l = 0, k = 0; 256 > k; k++) {
var f = l ^ l << 1 ^ l << 2 ^ l << 3 ^ l << 4,
f = f >>> 8 ^ f & 255 ^ 99;
j[n] = f;
y[f] = n;
var t = g[n],
D = g[t],
E = g[D],
b = 257 * g[f] ^ 16843008 * f;
z[n] = b << 24 | b >>> 8;
A[n] = b << 16 | b >>> 16;
B[n] = b << 8 | b >>> 24;
C[n] = b;
b = 16843009 * E ^ 65537 * D ^ 257 * t ^ 16843008 * n;
s[f] = b << 24 | b >>> 8;
u[f] = b << 16 | b >>> 16;
v[f] = b << 8 | b >>> 24;
w[f] = b;
n ? (n = t ^ g[g[g[E ^ t]]], l ^= g[g[l]]) : n = l = 1
}
var F = [0, 1, 2, 4, 8,
16, 32, 64, 128, 27, 54
],
r = r.AES = x.extend({
_doReset: function() {
for (var c = this._key, e = c.words, a = c.sigBytes / 4, c = 4 * ((this._nRounds = a + 6) + 1), b = this._keySchedule = [], h = 0; h < c; h++)
if (h < a) b[h] = e[h];
else {
var d = b[h - 1];
h % a ? 6 < a && 4 == h % a && (d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d & 255]) : (d = d << 8 | d >>> 24, d = j[d >>> 24] << 24 | j[d >>> 16 & 255] << 16 | j[d >>> 8 & 255] << 8 | j[d &
255], d ^= F[h / a | 0] << 24);
b[h] = b[h - a] ^ d
} e = this._invKeySchedule = [];
for (a = 0; a < c; a++) h = c - a, d = a % 4 ? b[h] : b[h - 4], e[a] = 4 > a || 4 >= h ? d : s[j[d >>> 24]] ^ u[j[d >>> 16 & 255]] ^ v[j[d >>> 8 & 255]] ^ w[j[d & 255]]
},
encryptBlock: function(c, e) {
this._doCryptBlock(c, e, this._keySchedule, z, A, B, C, j)
},
decryptBlock: function(c, e) {
var a = c[e + 1];
c[e + 1] = c[e + 3];
c[e + 3] = a;
this._doCryptBlock(c, e, this._invKeySchedule, s, u, v, w, y);
a = c[e + 1];
c[e + 1] = c[e + 3];
c[e + 3] = a
},
_doCryptBlock: function(c, e, a, b, h, d, j, m) {
for (var n = this._nRounds, f = c[e] ^ a[0], g = c[e + 1] ^ a[1], k = c[e + 2] ^ a[2], p = c[e + 3] ^ a[3], l = 4, t = 1; t < n; t++) var q = b[f >>> 24] ^ h[g >>> 16 & 255] ^ d[k >>> 8 & 255] ^ j[p & 255] ^ a[l++],
r = b[g >>> 24] ^ h[k >>> 16 & 255] ^ d[p >>> 8 & 255] ^ j[f & 255] ^ a[l++],
s = b[k >>> 24] ^ h[p >>> 16 & 255] ^ d[f >>> 8 & 255] ^ j[g & 255] ^ a[l++],
p = b[p >>> 24] ^ h[f >>> 16 & 255] ^ d[g >>> 8 & 255] ^ j[k & 255] ^ a[l++],
f = q,
g = r,
k = s;
q = (m[f >>> 24] << 24 | m[g >>> 16 & 255] << 16 | m[k >>> 8 & 255] << 8 | m[p & 255]) ^ a[l++];
r = (m[g >>> 24] << 24 | m[k >>> 16 & 255] << 16 | m[p >>> 8 & 255] << 8 | m[f & 255]) ^ a[l++];
s = (m[k >>> 24] << 24 | m[p >>> 16 & 255] << 16 | m[f >>> 8 & 255] << 8 | m[g & 255]) ^ a[l++];
p = (m[p >>> 24] << 24 | m[f >>> 16 & 255] << 16 | m[g >>> 8 & 255] << 8 | m[k & 255]) ^ a[l++];
c[e] = q;
c[e + 1] = r;
c[e + 2] = s;
c[e + 3] = p
},
keySize: 8
});
q.AES = x._createHelper(r)
})();
/*
CryptoJS v3.1.2 tripledes-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function() {
function j(b, c) {
var a = (this._lBlock >>> b ^ this._rBlock) & c;
this._rBlock ^= a;
this._lBlock ^= a << b
}
function l(b, c) {
var a = (this._rBlock >>> b ^ this._lBlock) & c;
this._lBlock ^= a;
this._rBlock ^= a << b
}
var h = CryptoJS,
e = h.lib,
n = e.WordArray,
e = e.BlockCipher,
g = h.algo,
q = [57, 49, 41, 33, 25, 17, 9, 1, 58, 50, 42, 34, 26, 18, 10, 2, 59, 51, 43, 35, 27, 19, 11, 3, 60, 52, 44, 36, 63, 55, 47, 39, 31, 23, 15, 7, 62, 54, 46, 38, 30, 22, 14, 6, 61, 53, 45, 37, 29, 21, 13, 5, 28, 20, 12, 4],
p = [14, 17, 11, 24, 1, 5, 3, 28, 15, 6, 21, 10, 23, 19, 12, 4, 26, 8, 16, 7, 27, 20, 13, 2, 41, 52, 31, 37, 47,
55, 30, 40, 51, 45, 33, 48, 44, 49, 39, 56, 34, 53, 46, 42, 50, 36, 29, 32
],
r = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],
s = [{
"0": 8421888,
268435456: 32768,
536870912: 8421378,
805306368: 2,
1073741824: 512,
1342177280: 8421890,
1610612736: 8389122,
1879048192: 8388608,
2147483648: 514,
2415919104: 8389120,
2684354560: 33280,
2952790016: 8421376,
3221225472: 32770,
3489660928: 8388610,
3758096384: 0,
4026531840: 33282,
134217728: 0,
402653184: 8421890,
671088640: 33282,
939524096: 32768,
1207959552: 8421888,
1476395008: 512,
1744830464: 8421378,
2013265920: 2,
2281701376: 8389120,
2550136832: 33280,
2818572288: 8421376,
3087007744: 8389122,
3355443200: 8388610,
3623878656: 32770,
3892314112: 514,
4160749568: 8388608,
1: 32768,
268435457: 2,
536870913: 8421888,
805306369: 8388608,
1073741825: 8421378,
1342177281: 33280,
1610612737: 512,
1879048193: 8389122,
2147483649: 8421890,
2415919105: 8421376,
2684354561: 8388610,
2952790017: 33282,
3221225473: 514,
3489660929: 8389120,
3758096385: 32770,
4026531841: 0,
134217729: 8421890,
402653185: 8421376,
671088641: 8388608,
939524097: 512,
1207959553: 32768,
1476395009: 8388610,
1744830465: 2,
2013265921: 33282,
2281701377: 32770,
2550136833: 8389122,
2818572289: 514,
3087007745: 8421888,
3355443201: 8389120,
3623878657: 0,
3892314113: 33280,
4160749569: 8421378
}, {
"0": 1074282512,
16777216: 16384,
33554432: 524288,
50331648: 1074266128,
67108864: 1073741840,
83886080: 1074282496,
100663296: 1073758208,
117440512: 16,
134217728: 540672,
150994944: 1073758224,
167772160: 1073741824,
184549376: 540688,
201326592: 524304,
218103808: 0,
234881024: 16400,
251658240: 1074266112,
8388608: 1073758208,
25165824: 540688,
41943040: 16,
58720256: 1073758224,
75497472: 1074282512,
92274688: 1073741824,
109051904: 524288,
125829120: 1074266128,
142606336: 524304,
159383552: 0,
176160768: 16384,
192937984: 1074266112,
209715200: 1073741840,
226492416: 540672,
243269632: 1074282496,
260046848: 16400,
268435456: 0,
285212672: 1074266128,
301989888: 1073758224,
318767104: 1074282496,
335544320: 1074266112,
352321536: 16,
369098752: 540688,
385875968: 16384,
402653184: 16400,
419430400: 524288,
436207616: 524304,
452984832: 1073741840,
469762048: 540672,
486539264: 1073758208,
503316480: 1073741824,
520093696: 1074282512,
276824064: 540688,
293601280: 524288,
310378496: 1074266112,
327155712: 16384,
343932928: 1073758208,
360710144: 1074282512,
377487360: 16,
394264576: 1073741824,
411041792: 1074282496,
427819008: 1073741840,
444596224: 1073758224,
461373440: 524304,
478150656: 0,
494927872: 16400,
511705088: 1074266128,
528482304: 540672
}, {
"0": 260,
1048576: 0,
2097152: 67109120,
3145728: 65796,
4194304: 65540,
5242880: 67108868,
6291456: 67174660,
7340032: 67174400,
8388608: 67108864,
9437184: 67174656,
10485760: 65792,
11534336: 67174404,
12582912: 67109124,
13631488: 65536,
14680064: 4,
15728640: 256,
524288: 67174656,
1572864: 67174404,
2621440: 0,
3670016: 67109120,
4718592: 67108868,
5767168: 65536,
6815744: 65540,
7864320: 260,
8912896: 4,
9961472: 256,
11010048: 67174400,
12058624: 65796,
13107200: 65792,
14155776: 67109124,
15204352: 67174660,
16252928: 67108864,
16777216: 67174656,
17825792: 65540,
18874368: 65536,
19922944: 67109120,
20971520: 256,
22020096: 67174660,
23068672: 67108868,
24117248: 0,
25165824: 67109124,
26214400: 67108864,
27262976: 4,
28311552: 65792,
29360128: 67174400,
30408704: 260,
31457280: 65796,
32505856: 67174404,
17301504: 67108864,
18350080: 260,
19398656: 67174656,
20447232: 0,
21495808: 65540,
22544384: 67109120,
23592960: 256,
24641536: 67174404,
25690112: 65536,
26738688: 67174660,
27787264: 65796,
28835840: 67108868,
29884416: 67109124,
30932992: 67174400,
31981568: 4,
33030144: 65792
}, {
"0": 2151682048,
65536: 2147487808,
131072: 4198464,
196608: 2151677952,
262144: 0,
327680: 4198400,
393216: 2147483712,
458752: 4194368,
524288: 2147483648,
589824: 4194304,
655360: 64,
720896: 2147487744,
786432: 2151678016,
851968: 4160,
917504: 4096,
983040: 2151682112,
32768: 2147487808,
98304: 64,
163840: 2151678016,
229376: 2147487744,
294912: 4198400,
360448: 2151682112,
425984: 0,
491520: 2151677952,
557056: 4096,
622592: 2151682048,
688128: 4194304,
753664: 4160,
819200: 2147483648,
884736: 4194368,
950272: 4198464,
1015808: 2147483712,
1048576: 4194368,
1114112: 4198400,
1179648: 2147483712,
1245184: 0,
1310720: 4160,
1376256: 2151678016,
1441792: 2151682048,
1507328: 2147487808,
1572864: 2151682112,
1638400: 2147483648,
1703936: 2151677952,
1769472: 4198464,
1835008: 2147487744,
1900544: 4194304,
1966080: 64,
2031616: 4096,
1081344: 2151677952,
1146880: 2151682112,
1212416: 0,
1277952: 4198400,
1343488: 4194368,
1409024: 2147483648,
1474560: 2147487808,
1540096: 64,
1605632: 2147483712,
1671168: 4096,
1736704: 2147487744,
1802240: 2151678016,
1867776: 4160,
1933312: 2151682048,
1998848: 4194304,
2064384: 4198464
}, {
"0": 128,
4096: 17039360,
8192: 262144,
12288: 536870912,
16384: 537133184,
20480: 16777344,
24576: 553648256,
28672: 262272,
32768: 16777216,
36864: 537133056,
40960: 536871040,
45056: 553910400,
49152: 553910272,
53248: 0,
57344: 17039488,
61440: 553648128,
2048: 17039488,
6144: 553648256,
10240: 128,
14336: 17039360,
18432: 262144,
22528: 537133184,
26624: 553910272,
30720: 536870912,
34816: 537133056,
38912: 0,
43008: 553910400,
47104: 16777344,
51200: 536871040,
55296: 553648128,
59392: 16777216,
63488: 262272,
65536: 262144,
69632: 128,
73728: 536870912,
77824: 553648256,
81920: 16777344,
86016: 553910272,
90112: 537133184,
94208: 16777216,
98304: 553910400,
102400: 553648128,
106496: 17039360,
110592: 537133056,
114688: 262272,
118784: 536871040,
122880: 0,
126976: 17039488,
67584: 553648256,
71680: 16777216,
75776: 17039360,
79872: 537133184,
83968: 536870912,
88064: 17039488,
92160: 128,
96256: 553910272,
100352: 262272,
104448: 553910400,
108544: 0,
112640: 553648128,
116736: 16777344,
120832: 262144,
124928: 537133056,
129024: 536871040
}, {
"0": 268435464,
256: 8192,
512: 270532608,
768: 270540808,
1024: 268443648,
1280: 2097152,
1536: 2097160,
1792: 268435456,
2048: 0,
2304: 268443656,
2560: 2105344,
2816: 8,
3072: 270532616,
3328: 2105352,
3584: 8200,
3840: 270540800,
128: 270532608,
384: 270540808,
640: 8,
896: 2097152,
1152: 2105352,
1408: 268435464,
1664: 268443648,
1920: 8200,
2176: 2097160,
2432: 8192,
2688: 268443656,
2944: 270532616,
3200: 0,
3456: 270540800,
3712: 2105344,
3968: 268435456,
4096: 268443648,
4352: 270532616,
4608: 270540808,
4864: 8200,
5120: 2097152,
5376: 268435456,
5632: 268435464,
5888: 2105344,
6144: 2105352,
6400: 0,
6656: 8,
6912: 270532608,
7168: 8192,
7424: 268443656,
7680: 270540800,
7936: 2097160,
4224: 8,
4480: 2105344,
4736: 2097152,
4992: 268435464,
5248: 268443648,
5504: 8200,
5760: 270540808,
6016: 270532608,
6272: 270540800,
6528: 270532616,
6784: 8192,
7040: 2105352,
7296: 2097160,
7552: 0,
7808: 268435456,
8064: 268443656
}, {
"0": 1048576,
16: 33555457,
32: 1024,
48: 1049601,
64: 34604033,
80: 0,
96: 1,
112: 34603009,
128: 33555456,
144: 1048577,
160: 33554433,
176: 34604032,
192: 34603008,
208: 1025,
224: 1049600,
240: 33554432,
8: 34603009,
24: 0,
40: 33555457,
56: 34604032,
72: 1048576,
88: 33554433,
104: 33554432,
120: 1025,
136: 1049601,
152: 33555456,
168: 34603008,
184: 1048577,
200: 1024,
216: 34604033,
232: 1,
248: 1049600,
256: 33554432,
272: 1048576,
288: 33555457,
304: 34603009,
320: 1048577,
336: 33555456,
352: 34604032,
368: 1049601,
384: 1025,
400: 34604033,
416: 1049600,
432: 1,
448: 0,
464: 34603008,
480: 33554433,
496: 1024,
264: 1049600,
280: 33555457,
296: 34603009,
312: 1,
328: 33554432,
344: 1048576,
360: 1025,
376: 34604032,
392: 33554433,
408: 34603008,
424: 0,
440: 34604033,
456: 1049601,
472: 1024,
488: 33555456,
504: 1048577
}, {
"0": 134219808,
1: 131072,
2: 134217728,
3: 32,
4: 131104,
5: 134350880,
6: 134350848,
7: 2048,
8: 134348800,
9: 134219776,
10: 133120,
11: 134348832,
12: 2080,
13: 0,
14: 134217760,
15: 133152,
2147483648: 2048,
2147483649: 134350880,
2147483650: 134219808,
2147483651: 134217728,
2147483652: 134348800,
2147483653: 133120,
2147483654: 133152,
2147483655: 32,
2147483656: 134217760,
2147483657: 2080,
2147483658: 131104,
2147483659: 134350848,
2147483660: 0,
2147483661: 134348832,
2147483662: 134219776,
2147483663: 131072,
16: 133152,
17: 134350848,
18: 32,
19: 2048,
20: 134219776,
21: 134217760,
22: 134348832,
23: 131072,
24: 0,
25: 131104,
26: 134348800,
27: 134219808,
28: 134350880,
29: 133120,
30: 2080,
31: 134217728,
2147483664: 131072,
2147483665: 2048,
2147483666: 134348832,
2147483667: 133152,
2147483668: 32,
2147483669: 134348800,
2147483670: 134217728,
2147483671: 134219808,
2147483672: 134350880,
2147483673: 134217760,
2147483674: 134219776,
2147483675: 0,
2147483676: 133120,
2147483677: 2080,
2147483678: 131104,
2147483679: 134350848
}],
t = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679],
m = g.DES = e.extend({
_doReset: function() {
for (var b = this._key.words, c = [], a = 0; 56 > a; a++) {
var f = q[a] - 1;
c[a] = b[f >>> 5] >>> 31 - f % 32 & 1
}
b = this._subKeys = [];
for (f = 0; 16 > f; f++) {
for (var d = b[f] = [], e = r[f], a = 0; 24 > a; a++) d[a / 6 | 0] |= c[(p[a] - 1 + e) % 28] << 31 - a % 6, d[4 + (a / 6 | 0)] |= c[28 + (p[a + 24] - 1 + e) % 28] << 31 - a % 6;
d[0] = d[0] << 1 | d[0] >>> 31;
for (a = 1; 7 > a; a++) d[a] >>>= 4 * (a - 1) + 3;
d[7] = d[7] << 5 | d[7] >>> 27
}
c = this._invSubKeys = [];
for (a = 0; 16 > a; a++) c[a] = b[15 - a]
},
encryptBlock: function(b, c) {
this._doCryptBlock(b, c, this._subKeys)
},
decryptBlock: function(b, c) {
this._doCryptBlock(b, c, this._invSubKeys)
},
_doCryptBlock: function(b, c, a) {
this._lBlock = b[c];
this._rBlock = b[c + 1];
j.call(this, 4, 252645135);
j.call(this, 16, 65535);
l.call(this, 2, 858993459);
l.call(this, 8, 16711935);
j.call(this, 1, 1431655765);
for (var f = 0; 16 > f; f++) {
for (var d = a[f], e = this._lBlock, h = this._rBlock, g = 0, k = 0; 8 > k; k++) g |= s[k][((h ^ d[k]) & t[k]) >>> 0];
this._lBlock = h;
this._rBlock = e ^ g
}
a = this._lBlock;
this._lBlock = this._rBlock;
this._rBlock = a;
j.call(this, 1, 1431655765);
l.call(this, 8, 16711935);
l.call(this, 2, 858993459);
j.call(this, 16, 65535);
j.call(this, 4, 252645135);
b[c] = this._lBlock;
b[c + 1] = this._rBlock
},
keySize: 2,
ivSize: 2,
blockSize: 2
});
h.DES = e._createHelper(m);
g = g.TripleDES = e.extend({
_doReset: function() {
var b = this._key.words;
this._des1 = m.createEncryptor(n.create(b.slice(0, 2)));
this._des2 = m.createEncryptor(n.create(b.slice(2, 4)));
this._des3 = m.createEncryptor(n.create(b.slice(4, 6)))
},
encryptBlock: function(b, c) {
this._des1.encryptBlock(b, c);
this._des2.decryptBlock(b, c);
this._des3.encryptBlock(b, c)
},
decryptBlock: function(b, c) {
this._des3.decryptBlock(b, c);
this._des2.encryptBlock(b, c);
this._des1.decryptBlock(b, c)
},
keySize: 6,
ivSize: 2,
blockSize: 2
});
h.TripleDES = e._createHelper(g)
})();
/*
CryptoJS v3.1.2 sha1-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function() {
var k = CryptoJS,
b = k.lib,
m = b.WordArray,
l = b.Hasher,
d = [],
b = k.algo.SHA1 = l.extend({
_doReset: function() {
this._hash = new m.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
},
_doProcessBlock: function(n, p) {
for (var a = this._hash.words, e = a[0], f = a[1], h = a[2], j = a[3], b = a[4], c = 0; 80 > c; c++) {
if (16 > c) d[c] = n[p + c] | 0;
else {
var g = d[c - 3] ^ d[c - 8] ^ d[c - 14] ^ d[c - 16];
d[c] = g << 1 | g >>> 31
}
g = (e << 5 | e >>> 27) + b + d[c];
g = 20 > c ? g + ((f & h | ~f & j) + 1518500249) : 40 > c ? g + ((f ^ h ^ j) + 1859775393) : 60 > c ? g + ((f & h | f & j | h & j) - 1894007588) : g + ((f ^ h ^ j) - 899497514);
b = j;
j = h;
h = f << 30 | f >>> 2;
f = e;
e = g
}
a[0] = a[0] + e | 0;
a[1] = a[1] + f | 0;
a[2] = a[2] + h | 0;
a[3] = a[3] + j | 0;
a[4] = a[4] + b | 0
},
_doFinalize: function() {
var b = this._data,
d = b.words,
a = 8 * this._nDataBytes,
e = 8 * b.sigBytes;
d[e >>> 5] |= 128 << 24 - e % 32;
d[(e + 64 >>> 9 << 4) + 14] = Math.floor(a / 4294967296);
d[(e + 64 >>> 9 << 4) + 15] = a;
b.sigBytes = 4 * d.length;
this._process();
return this._hash
},
clone: function() {
var b = l.clone.call(this);
b._hash = this._hash.clone();
return b
}
});
k.SHA1 = l._createHelper(b);
k.HmacSHA1 = l._createHmacHelper(b)
})();
/*
CryptoJS v3.1.2 ripemd160-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
/*
(c) 2012 by Cedric Mesnil. All rights reserved.
Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:
- Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.
- Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.
THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT HOLDER OR CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
*/
(function() {
var q = CryptoJS,
d = q.lib,
n = d.WordArray,
p = d.Hasher,
d = q.algo,
x = n.create([0, 1, 2, 3, 4, 5, 6, 7, 8, 9, 10, 11, 12, 13, 14, 15, 7, 4, 13, 1, 10, 6, 15, 3, 12, 0, 9, 5, 2, 14, 11, 8, 3, 10, 14, 4, 9, 15, 8, 1, 2, 7, 0, 6, 13, 11, 5, 12, 1, 9, 11, 10, 0, 8, 12, 4, 13, 3, 7, 15, 14, 5, 6, 2, 4, 0, 5,
9, 7, 12, 2, 10, 14, 1, 3, 8, 11, 6, 15, 13
]),
y = n.create([5, 14, 7, 0, 9, 2, 11, 4, 13, 6, 15, 8, 1, 10, 3, 12, 6, 11, 3, 7, 0, 13, 5, 10, 14, 15, 8, 12, 4, 9, 1, 2, 15, 5, 1, 3, 7, 14, 6, 9, 11, 8, 12, 2, 10, 0, 4, 13, 8, 6, 4, 1, 3, 11, 15, 0, 5, 12, 2, 13, 9, 7, 10, 14, 12, 15,
10, 4, 1, 5, 8, 7, 6, 2, 13, 14, 0, 3, 9, 11
]),
z = n.create([11, 14, 15, 12,
5, 8, 7, 9, 11, 13, 14, 15, 6, 7, 9, 8, 7, 6, 8, 13, 11, 9, 7, 15, 7, 12, 15, 9, 11, 7, 13, 12, 11, 13, 6, 7, 14, 9, 13, 15, 14, 8, 13, 6, 5, 12, 7, 5, 11, 12, 14, 15, 14, 15, 9, 8, 9, 14, 5, 6, 8, 6, 5, 12, 9, 15, 5, 11, 6, 8, 13,
12, 5, 12, 13, 14, 11, 8, 5, 6
]),
A = n.create([8, 9, 9, 11, 13, 15, 15, 5, 7, 7, 8, 11, 14, 14, 12, 6, 9, 13, 15, 7, 12, 8, 9, 11, 7, 7, 12, 7, 6, 15, 13, 11, 9, 7, 15, 11, 8, 6, 6, 14, 12, 13, 5, 14, 13, 13, 7, 5, 15, 5, 8, 11, 14, 14, 6, 14, 6, 9, 12, 9, 12, 5, 15, 8,
8, 5, 12, 9, 12, 5, 14, 6, 8, 13, 6, 5, 15, 13, 11, 11
]),
B = n.create([0, 1518500249, 1859775393, 2400959708, 2840853838]),
C = n.create([1352829926, 1548603684, 1836072691,
2053994217, 0
]),
d = d.RIPEMD160 = p.extend({
_doReset: function() {
this._hash = n.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
},
_doProcessBlock: function(e, v) {
for (var b = 0; 16 > b; b++) {
var c = v + b,
f = e[c];
e[c] = (f << 8 | f >>> 24) & 16711935 | (f << 24 | f >>> 8) & 4278255360
}
var c = this._hash.words,
f = B.words,
d = C.words,
n = x.words,
q = y.words,
p = z.words,
w = A.words,
t, g, h, j, r, u, k, l, m, s;
u = t = c[0];
k = g = c[1];
l = h = c[2];
m = j = c[3];
s = r = c[4];
for (var a, b = 0; 80 > b; b += 1) a = t + e[v + n[b]] | 0, a = 16 > b ? a + ((g ^ h ^ j) + f[0]) : 32 > b ? a + ((g & h | ~g & j) + f[1]) : 48 > b ? a + (((g | ~h) ^ j) + f[2]) : 64 > b ? a + ((g & j | h & ~j) + f[3]) : a + ((g ^
(h | ~j)) + f[4]), a |= 0, a = a << p[b] | a >>> 32 - p[b], a = a + r | 0, t = r, r = j, j = h << 10 | h >>> 22, h = g, g = a, a = u + e[v + q[b]] | 0, a = 16 > b ? a + ((k ^ (l | ~m)) + d[0]) : 32 > b ? a + ((k & m | l & ~
m) + d[1]) : 48 > b ? a + (((k | ~l) ^ m) + d[2]) : 64 > b ? a + ((k & l | ~k & m) + d[3]) : a + ((k ^ l ^ m) + d[4]), a |= 0, a = a << w[b] | a >>> 32 - w[b], a = a + s | 0, u = s, s = m, m = l << 10 | l >>> 22, l = k, k = a;
a = c[1] + h + m | 0;
c[1] = c[2] + j + s | 0;
c[2] = c[3] + r + u | 0;
c[3] = c[4] + t + k | 0;
c[4] = c[0] + g + l | 0;
c[0] = a
},
_doFinalize: function() {
var e = this._data,
d = e.words,
b = 8 * this._nDataBytes,
c = 8 * e.sigBytes;
d[c >>> 5] |= 128 << 24 - c % 32;
d[(c + 64 >>> 9 << 4) + 14] = (b << 8 | b >>> 24) & 16711935 | (b << 24 | b >>> 8) & 4278255360;
e.sigBytes = 4 * (d.length + 1);
this._process();
e = this._hash;
d = e.words;
for (b = 0; 5 > b; b++) c = d[b], d[b] = (c << 8 | c >>> 24) & 16711935 | (c << 24 | c >>> 8) & 4278255360;
return e
},
clone: function() {
var d = p.clone.call(this);
d._hash = this._hash.clone();
return d
}
});
q.RIPEMD160 = p._createHelper(d);
q.HmacRIPEMD160 = p._createHmacHelper(d)
})(Math);
/*
CryptoJS v3.1.2 pbkdf2-min.js
code.google.com/p/crypto-js
(c) 2009-2013 by Jeff Mott. All rights reserved.
code.google.com/p/crypto-js/wiki/License
*/
(function() {
var b = CryptoJS,
a = b.lib,
d = a.Base,
m = a.WordArray,
a = b.algo,
q = a.HMAC,
l = a.PBKDF2 = d.extend({
cfg: d.extend({
keySize: 4,
hasher: a.SHA1,
iterations: 1
}),
init: function(a) {
this.cfg = this.cfg.extend(a)
},
compute: function(a, b) {
for (var c = this.cfg, f = q.create(c.hasher, a), g = m.create(), d = m.create([1]), l = g.words, r = d.words, n = c.keySize, c = c.iterations; l.length < n;) {
var h = f.update(b).finalize(d);
f.reset();
for (var j = h.words, s = j.length, k = h, p = 1; p < c; p++) {
k = f.finalize(k);
f.reset();
for (var t = k.words, e = 0; e < s; e++) j[e] ^= t[e]
}
g.concat(h);
r[0]++
}
g.sigBytes = 4 * n;
return g
}
});
b.PBKDF2 = function(a, b, c) {
return l.create(c).compute(a, b)
}
})();
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
*/
var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
var b64pad = "=";
function hex2b64(d) {
var b;
var e;
var a = "";
for (b = 0; b + 3 <= d.length; b += 3) {
e = parseInt(d.substring(b, b + 3), 16);
a += b64map.charAt(e >> 6) + b64map.charAt(e & 63)
}
if (b + 1 == d.length) {
e = parseInt(d.substring(b, b + 1), 16);
a += b64map.charAt(e << 2)
} else {
if (b + 2 == d.length) {
e = parseInt(d.substring(b, b + 2), 16);
a += b64map.charAt(e >> 2) + b64map.charAt((e & 3) << 4)
}
}
if (b64pad) {
while ((a.length & 3) > 0) {
a += b64pad
}
}
return a
}
function b64tohex(f) {
var d = "";
var e;
var b = 0;
var c;
var a;
for (e = 0; e < f.length; ++e) {
if (f.charAt(e) == b64pad) {
break
}
a = b64map.indexOf(f.charAt(e));
if (a < 0) {
continue
}
if (b == 0) {
d += int2char(a >> 2);
c = a & 3;
b = 1
} else {
if (b == 1) {
d += int2char((c << 2) | (a >> 4));
c = a & 15;
b = 2
} else {
if (b == 2) {
d += int2char(c);
d += int2char(a >> 2);
c = a & 3;
b = 3
} else {
d += int2char((c << 2) | (a >> 4));
d += int2char(a & 15);
b = 0
}
}
}
}
if (b == 1) {
d += int2char(c << 2)
}
return d
}
function b64toBA(e) {
var d = b64tohex(e);
var c;
var b = new Array();
for (c = 0; 2 * c < d.length; ++c) {
b[c] = parseInt(d.substring(2 * c, 2 * c + 2), 16)
}
return b
};
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
*/
var dbits;
var canary = 244837814094590;
var j_lm = ((canary & 16777215) == 15715070);
function BigInteger(e, d, f) {
if (e != null) {
if ("number" == typeof e) {
this.fromNumber(e, d, f)
} else {
if (d == null && "string" != typeof e) {
this.fromString(e, 256)
} else {
this.fromString(e, d)
}
}
}
}
function nbi() {
return new BigInteger(null)
}
function am1(f, a, b, e, h, g) {
while (--g >= 0) {
var d = a * this[f++] + b[e] + h;
h = Math.floor(d / 67108864);
b[e++] = d & 67108863
}
return h
}
function am2(f, q, r, e, o, a) {
var k = q & 32767,
p = q >> 15;
while (--a >= 0) {
var d = this[f] & 32767;
var g = this[f++] >> 15;
var b = p * d + g * k;
d = k * d + ((b & 32767) << 15) + r[e] + (o & 1073741823);
o = (d >>> 30) + (b >>> 15) + p * g + (o >>> 30);
r[e++] = d & 1073741823
}
return o
}
function am3(f, q, r, e, o, a) {
var k = q & 16383,
p = q >> 14;
while (--a >= 0) {
var d = this[f] & 16383;
var g = this[f++] >> 14;
var b = p * d + g * k;
d = k * d + ((b & 16383) << 14) + r[e] + o;
o = (d >> 28) + (b >> 14) + p * g;
r[e++] = d & 268435455
}
return o
}
if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) {
BigInteger.prototype.am = am2;
dbits = 30
} else {
if (j_lm && (navigator.appName != "Netscape")) {
BigInteger.prototype.am = am1;
dbits = 26
} else {
BigInteger.prototype.am = am3;
dbits = 28
}
}
BigInteger.prototype.DB = dbits;
BigInteger.prototype.DM = ((1 << dbits) - 1);
BigInteger.prototype.DV = (1 << dbits);
var BI_FP = 52;
BigInteger.prototype.FV = Math.pow(2, BI_FP);
BigInteger.prototype.F1 = BI_FP - dbits;
BigInteger.prototype.F2 = 2 * dbits - BI_FP;
var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz";
var BI_RC = new Array();
var rr, vv;
rr = "0".charCodeAt(0);
for (vv = 0; vv <= 9; ++vv) {
BI_RC[rr++] = vv
}
rr = "a".charCodeAt(0);
for (vv = 10; vv < 36; ++vv) {
BI_RC[rr++] = vv
}
rr = "A".charCodeAt(0);
for (vv = 10; vv < 36; ++vv) {
BI_RC[rr++] = vv
}
function int2char(a) {
return BI_RM.charAt(a)
}
function intAt(b, a) {
var d = BI_RC[b.charCodeAt(a)];
return (d == null) ? -1 : d
}
function bnpCopyTo(b) {
for (var a = this.t - 1; a >= 0; --a) {
b[a] = this[a]
}
b.t = this.t;
b.s = this.s
}
function bnpFromInt(a) {
this.t = 1;
this.s = (a < 0) ? -1 : 0;
if (a > 0) {
this[0] = a
} else {
if (a < -1) {
this[0] = a + this.DV
} else {
this.t = 0
}
}
}
function nbv(a) {
var b = nbi();
b.fromInt(a);
return b
}
function bnpFromString(h, c) {
var e;
if (c == 16) {
e = 4
} else {
if (c == 8) {
e = 3
} else {
if (c == 256) {
e = 8
} else {
if (c == 2) {
e = 1
} else {
if (c == 32) {
e = 5
} else {
if (c == 4) {
e = 2
} else {
this.fromRadix(h, c);
return
}
}
}
}
}
}
this.t = 0;
this.s = 0;
var g = h.length,
d = false,
f = 0;
while (--g >= 0) {
var a = (e == 8) ? h[g] & 255 : intAt(h, g);
if (a < 0) {
if (h.charAt(g) == "-") {
d = true
}
continue
}
d = false;
if (f == 0) {
this[this.t++] = a
} else {
if (f + e > this.DB) {
this[this.t - 1] |= (a & ((1 << (this.DB - f)) - 1)) << f;
this[this.t++] = (a >> (this.DB - f))
} else {
this[this.t - 1] |= a << f
}
}
f += e;
if (f >= this.DB) {
f -= this.DB
}
}
if (e == 8 && (h[0] & 128) != 0) {
this.s = -1;
if (f > 0) {
this[this.t - 1] |= ((1 << (this.DB - f)) - 1) << f
}
}
this.clamp();
if (d) {
BigInteger.ZERO.subTo(this, this)
}
}
function bnpClamp() {
var a = this.s & this.DM;
while (this.t > 0 && this[this.t - 1] == a) {
--this.t
}
}
function bnToString(c) {
if (this.s < 0) {
return "-" + this.negate().toString(c)
}
var e;
if (c == 16) {
e = 4
} else {
if (c == 8) {
e = 3
} else {
if (c == 2) {
e = 1
} else {
if (c == 32) {
e = 5
} else {
if (c == 4) {
e = 2
} else {
return this.toRadix(c)
}
}
}
}
}
var g = (1 << e) - 1,
l, a = false,
h = "",
f = this.t;
var j = this.DB - (f * this.DB) % e;
if (f-- > 0) {
if (j < this.DB && (l = this[f] >> j) > 0) {
a = true;
h = int2char(l)
}
while (f >= 0) {
if (j < e) {
l = (this[f] & ((1 << j) - 1)) << (e - j);
l |= this[--f] >> (j += this.DB - e)
} else {
l = (this[f] >> (j -= e)) & g;
if (j <= 0) {
j += this.DB;
--f
}
}
if (l > 0) {
a = true
}
if (a) {
h += int2char(l)
}
}
}
return a ? h : "0"
}
function bnNegate() {
var a = nbi();
BigInteger.ZERO.subTo(this, a);
return a
}
function bnAbs() {
return (this.s < 0) ? this.negate() : this
}
function bnCompareTo(b) {
var d = this.s - b.s;
if (d != 0) {
return d
}
var c = this.t;
d = c - b.t;
if (d != 0) {
return (this.s < 0) ? -d : d
}
while (--c >= 0) {
if ((d = this[c] - b[c]) != 0) {
return d
}
}
return 0
}
function nbits(a) {
var c = 1,
b;
if ((b = a >>> 16) != 0) {
a = b;
c += 16
}
if ((b = a >> 8) != 0) {
a = b;
c += 8
}
if ((b = a >> 4) != 0) {
a = b;
c += 4
}
if ((b = a >> 2) != 0) {
a = b;
c += 2
}
if ((b = a >> 1) != 0) {
a = b;
c += 1
}
return c
}
function bnBitLength() {
if (this.t <= 0) {
return 0
}
return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM))
}
function bnpDLShiftTo(c, b) {
var a;
for (a = this.t - 1; a >= 0; --a) {
b[a + c] = this[a]
}
for (a = c - 1; a >= 0; --a) {
b[a] = 0
}
b.t = this.t + c;
b.s = this.s
}
function bnpDRShiftTo(c, b) {
for (var a = c; a < this.t; ++a) {
b[a - c] = this[a]
}
b.t = Math.max(this.t - c, 0);
b.s = this.s
}
function bnpLShiftTo(j, e) {
var b = j % this.DB;
var a = this.DB - b;
var g = (1 << a) - 1;
var f = Math.floor(j / this.DB),
h = (this.s << b) & this.DM,
d;
for (d = this.t - 1; d >= 0; --d) {
e[d + f + 1] = (this[d] >> a) | h;
h = (this[d] & g) << b
}
for (d = f - 1; d >= 0; --d) {
e[d] = 0
}
e[f] = h;
e.t = this.t + f + 1;
e.s = this.s;
e.clamp()
}
function bnpRShiftTo(g, d) {
d.s = this.s;
var e = Math.floor(g / this.DB);
if (e >= this.t) {
d.t = 0;
return
}
var b = g % this.DB;
var a = this.DB - b;
var f = (1 << b) - 1;
d[0] = this[e] >> b;
for (var c = e + 1; c < this.t; ++c) {
d[c - e - 1] |= (this[c] & f) << a;
d[c - e] = this[c] >> b
}
if (b > 0) {
d[this.t - e - 1] |= (this.s & f) << a
}
d.t = this.t - e;
d.clamp()
}
function bnpSubTo(d, f) {
var e = 0,
g = 0,
b = Math.min(d.t, this.t);
while (e < b) {
g += this[e] - d[e];
f[e++] = g & this.DM;
g >>= this.DB
}
if (d.t < this.t) {
g -= d.s;
while (e < this.t) {
g += this[e];
f[e++] = g & this.DM;
g >>= this.DB
}
g += this.s
} else {
g += this.s;
while (e < d.t) {
g -= d[e];
f[e++] = g & this.DM;
g >>= this.DB
}
g -= d.s
}
f.s = (g < 0) ? -1 : 0;
if (g < -1) {
f[e++] = this.DV + g
} else {
if (g > 0) {
f[e++] = g
}
}
f.t = e;
f.clamp()
}
function bnpMultiplyTo(c, e) {
var b = this.abs(),
f = c.abs();
var d = b.t;
e.t = d + f.t;
while (--d >= 0) {
e[d] = 0
}
for (d = 0; d < f.t; ++d) {
e[d + b.t] = b.am(0, f[d], e, d, 0, b.t)
}
e.s = 0;
e.clamp();
if (this.s != c.s) {
BigInteger.ZERO.subTo(e, e)
}
}
function bnpSquareTo(d) {
var a = this.abs();
var b = d.t = 2 * a.t;
while (--b >= 0) {
d[b] = 0
}
for (b = 0; b < a.t - 1; ++b) {
var e = a.am(b, a[b], d, 2 * b, 0, 1);
if ((d[b + a.t] += a.am(b + 1, 2 * a[b], d, 2 * b + 1, e, a.t - b - 1)) >= a.DV) {
d[b + a.t] -= a.DV;
d[b + a.t + 1] = 1
}
}
if (d.t > 0) {
d[d.t - 1] += a.am(b, a[b], d, 2 * b, 0, 1)
}
d.s = 0;
d.clamp()
}
function bnpDivRemTo(n, h, g) {
var w = n.abs();
if (w.t <= 0) {
return
}
var k = this.abs();
if (k.t < w.t) {
if (h != null) {
h.fromInt(0)
}
if (g != null) {
this.copyTo(g)
}
return
}
if (g == null) {
g = nbi()
}
var d = nbi(),
a = this.s,
l = n.s;
var v = this.DB - nbits(w[w.t - 1]);
if (v > 0) {
w.lShiftTo(v, d);
k.lShiftTo(v, g)
} else {
w.copyTo(d);
k.copyTo(g)
}
var p = d.t;
var b = d[p - 1];
if (b == 0) {
return
}
var o = b * (1 << this.F1) + ((p > 1) ? d[p - 2] >> this.F2 : 0);
var A = this.FV / o,
z = (1 << this.F1) / o,
x = 1 << this.F2;
var u = g.t,
s = u - p,
f = (h == null) ? nbi() : h;
d.dlShiftTo(s, f);
if (g.compareTo(f) >= 0) {
g[g.t++] = 1;
g.subTo(f, g)
}
BigInteger.ONE.dlShiftTo(p, f);
f.subTo(d, d);
while (d.t < p) {
d[d.t++] = 0
}
while (--s >= 0) {
var c = (g[--u] == b) ? this.DM : Math.floor(g[u] * A + (g[u - 1] + x) * z);
if ((g[u] += d.am(0, c, g, s, 0, p)) < c) {
d.dlShiftTo(s, f);
g.subTo(f, g);
while (g[u] < --c) {
g.subTo(f, g)
}
}
}
if (h != null) {
g.drShiftTo(p, h);
if (a != l) {
BigInteger.ZERO.subTo(h, h)
}
}
g.t = p;
g.clamp();
if (v > 0) {
g.rShiftTo(v, g)
}
if (a < 0) {
BigInteger.ZERO.subTo(g, g)
}
}
function bnMod(b) {
var c = nbi();
this.abs().divRemTo(b, null, c);
if (this.s < 0 && c.compareTo(BigInteger.ZERO) > 0) {
b.subTo(c, c)
}
return c
}
function Classic(a) {
this.m = a
}
function cConvert(a) {
if (a.s < 0 || a.compareTo(this.m) >= 0) {
return a.mod(this.m)
} else {
return a
}
}
function cRevert(a) {
return a
}
function cReduce(a) {
a.divRemTo(this.m, null, a)
}
function cMulTo(a, c, b) {
a.multiplyTo(c, b);
this.reduce(b)
}
function cSqrTo(a, b) {
a.squareTo(b);
this.reduce(b)
}
Classic.prototype.convert = cConvert;
Classic.prototype.revert = cRevert;
Classic.prototype.reduce = cReduce;
Classic.prototype.mulTo = cMulTo;
Classic.prototype.sqrTo = cSqrTo;
function bnpInvDigit() {
if (this.t < 1) {
return 0
}
var a = this[0];
if ((a & 1) == 0) {
return 0
}
var b = a & 3;
b = (b * (2 - (a & 15) * b)) & 15;
b = (b * (2 - (a & 255) * b)) & 255;
b = (b * (2 - (((a & 65535) * b) & 65535))) & 65535;
b = (b * (2 - a * b % this.DV)) % this.DV;
return (b > 0) ? this.DV - b : -b
}
function Montgomery(a) {
this.m = a;
this.mp = a.invDigit();
this.mpl = this.mp & 32767;
this.mph = this.mp >> 15;
this.um = (1 << (a.DB - 15)) - 1;
this.mt2 = 2 * a.t
}
function montConvert(a) {
var b = nbi();
a.abs().dlShiftTo(this.m.t, b);
b.divRemTo(this.m, null, b);
if (a.s < 0 && b.compareTo(BigInteger.ZERO) > 0) {
this.m.subTo(b, b)
}
return b
}
function montRevert(a) {
var b = nbi();
a.copyTo(b);
this.reduce(b);
return b
}
function montReduce(a) {
while (a.t <= this.mt2) {
a[a.t++] = 0
}
for (var c = 0; c < this.m.t; ++c) {
var b = a[c] & 32767;
var d = (b * this.mpl + (((b * this.mph + (a[c] >> 15) * this.mpl) & this.um) << 15)) & a.DM;
b = c + this.m.t;
a[b] += this.m.am(0, d, a, c, 0, this.m.t);
while (a[b] >= a.DV) {
a[b] -= a.DV;
a[++b]++
}
}
a.clamp();
a.drShiftTo(this.m.t, a);
if (a.compareTo(this.m) >= 0) {
a.subTo(this.m, a)
}
}
function montSqrTo(a, b) {
a.squareTo(b);
this.reduce(b)
}
function montMulTo(a, c, b) {
a.multiplyTo(c, b);
this.reduce(b)
}
Montgomery.prototype.convert = montConvert;
Montgomery.prototype.revert = montRevert;
Montgomery.prototype.reduce = montReduce;
Montgomery.prototype.mulTo = montMulTo;
Montgomery.prototype.sqrTo = montSqrTo;
function bnpIsEven() {
return ((this.t > 0) ? (this[0] & 1) : this.s) == 0
}
function bnpExp(h, j) {
if (h > 4294967295 || h < 1) {
return BigInteger.ONE
}
var f = nbi(),
a = nbi(),
d = j.convert(this),
c = nbits(h) - 1;
d.copyTo(f);
while (--c >= 0) {
j.sqrTo(f, a);
if ((h & (1 << c)) > 0) {
j.mulTo(a, d, f)
} else {
var b = f;
f = a;
a = b
}
}
return j.revert(f)
}
function bnModPowInt(b, a) {
var c;
if (b < 256 || a.isEven()) {
c = new Classic(a)
} else {
c = new Montgomery(a)
}
return this.exp(b, c)
}
BigInteger.prototype.copyTo = bnpCopyTo;
BigInteger.prototype.fromInt = bnpFromInt;
BigInteger.prototype.fromString = bnpFromString;
BigInteger.prototype.clamp = bnpClamp;
BigInteger.prototype.dlShiftTo = bnpDLShiftTo;
BigInteger.prototype.drShiftTo = bnpDRShiftTo;
BigInteger.prototype.lShiftTo = bnpLShiftTo;
BigInteger.prototype.rShiftTo = bnpRShiftTo;
BigInteger.prototype.subTo = bnpSubTo;
BigInteger.prototype.multiplyTo = bnpMultiplyTo;
BigInteger.prototype.squareTo = bnpSquareTo;
BigInteger.prototype.divRemTo = bnpDivRemTo;
BigInteger.prototype.invDigit = bnpInvDigit;
BigInteger.prototype.isEven = bnpIsEven;
BigInteger.prototype.exp = bnpExp;
BigInteger.prototype.toString = bnToString;
BigInteger.prototype.negate = bnNegate;
BigInteger.prototype.abs = bnAbs;
BigInteger.prototype.compareTo = bnCompareTo;
BigInteger.prototype.bitLength = bnBitLength;
BigInteger.prototype.mod = bnMod;
BigInteger.prototype.modPowInt = bnModPowInt;
BigInteger.ZERO = nbv(0);
BigInteger.ONE = nbv(1);
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
*/
function bnClone() {
var a = nbi();
this.copyTo(a);
return a
}
function bnIntValue() {
if (this.s < 0) {
if (this.t == 1) {
return this[0] - this.DV
} else {
if (this.t == 0) {
return -1
}
}
} else {
if (this.t == 1) {
return this[0]
} else {
if (this.t == 0) {
return 0
}
}
}
return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]
}
function bnByteValue() {
return (this.t == 0) ? this.s : (this[0] << 24) >> 24
}
function bnShortValue() {
return (this.t == 0) ? this.s : (this[0] << 16) >> 16
}
function bnpChunkSize(a) {
return Math.floor(Math.LN2 * this.DB / Math.log(a))
}
function bnSigNum() {
if (this.s < 0) {
return -1
} else {
if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {
return 0
} else {
return 1
}
}
}
function bnpToRadix(c) {
if (c == null) {
c = 10
}
if (this.signum() == 0 || c < 2 || c > 36) {
return "0"
}
var f = this.chunkSize(c);
var e = Math.pow(c, f);
var i = nbv(e),
j = nbi(),
h = nbi(),
g = "";
this.divRemTo(i, j, h);
while (j.signum() > 0) {
g = (e + h.intValue()).toString(c).substr(1) + g;
j.divRemTo(i, j, h)
}
return h.intValue().toString(c) + g
}
function bnpFromRadix(m, h) {
this.fromInt(0);
if (h == null) {
h = 10
}
var f = this.chunkSize(h);
var g = Math.pow(h, f),
e = false,
a = 0,
l = 0;
for (var c = 0; c < m.length; ++c) {
var k = intAt(m, c);
if (k < 0) {
if (m.charAt(c) == "-" && this.signum() == 0) {
e = true
}
continue
}
l = h * l + k;
if (++a >= f) {
this.dMultiply(g);
this.dAddOffset(l, 0);
a = 0;
l = 0
}
}
if (a > 0) {
this.dMultiply(Math.pow(h, a));
this.dAddOffset(l, 0)
}
if (e) {
BigInteger.ZERO.subTo(this, this)
}
}
function bnpFromNumber(f, e, h) {
if ("number" == typeof e) {
if (f < 2) {
this.fromInt(1)
} else {
this.fromNumber(f, h);
if (!this.testBit(f - 1)) {
this.bitwiseTo(BigInteger.ONE.shiftLeft(f - 1), op_or, this)
}
if (this.isEven()) {
this.dAddOffset(1, 0)
}
while (!this.isProbablePrime(e)) {
this.dAddOffset(2, 0);
if (this.bitLength() > f) {
this.subTo(BigInteger.ONE.shiftLeft(f - 1), this)
}
}
}
} else {
var d = new Array(),
g = f & 7;
d.length = (f >> 3) + 1;
e.nextBytes(d);
if (g > 0) {
d[0] &= ((1 << g) - 1)
} else {
d[0] = 0
}
this.fromString(d, 256)
}
}
function bnToByteArray() {
var b = this.t,
c = new Array();
c[0] = this.s;
var e = this.DB - (b * this.DB) % 8,
f, a = 0;
if (b-- > 0) {
if (e < this.DB && (f = this[b] >> e) != (this.s & this.DM) >> e) {
c[a++] = f | (this.s << (this.DB - e))
}
while (b >= 0) {
if (e < 8) {
f = (this[b] & ((1 << e) - 1)) << (8 - e);
f |= this[--b] >> (e += this.DB - 8)
} else {
f = (this[b] >> (e -= 8)) & 255;
if (e <= 0) {
e += this.DB;
--b
}
}
if ((f & 128) != 0) {
f |= -256
}
if (a == 0 && (this.s & 128) != (f & 128)) {
++a
}
if (a > 0 || f != this.s) {
c[a++] = f
}
}
}
return c
}
function bnEquals(b) {
return (this.compareTo(b) == 0)
}
function bnMin(b) {
return (this.compareTo(b) < 0) ? this : b
}
function bnMax(b) {
return (this.compareTo(b) > 0) ? this : b
}
function bnpBitwiseTo(c, h, e) {
var d, g, b = Math.min(c.t, this.t);
for (d = 0; d < b; ++d) {
e[d] = h(this[d], c[d])
}
if (c.t < this.t) {
g = c.s & this.DM;
for (d = b; d < this.t; ++d) {
e[d] = h(this[d], g)
}
e.t = this.t
} else {
g = this.s & this.DM;
for (d = b; d < c.t; ++d) {
e[d] = h(g, c[d])
}
e.t = c.t
}
e.s = h(this.s, c.s);
e.clamp()
}
function op_and(a, b) {
return a & b
}
function bnAnd(b) {
var c = nbi();
this.bitwiseTo(b, op_and, c);
return c
}
function op_or(a, b) {
return a | b
}
function bnOr(b) {
var c = nbi();
this.bitwiseTo(b, op_or, c);
return c
}
function op_xor(a, b) {
return a ^ b
}
function bnXor(b) {
var c = nbi();
this.bitwiseTo(b, op_xor, c);
return c
}
function op_andnot(a, b) {
return a & ~b
}
function bnAndNot(b) {
var c = nbi();
this.bitwiseTo(b, op_andnot, c);
return c
}
function bnNot() {
var b = nbi();
for (var a = 0; a < this.t; ++a) {
b[a] = this.DM & ~this[a]
}
b.t = this.t;
b.s = ~this.s;
return b
}
function bnShiftLeft(b) {
var a = nbi();
if (b < 0) {
this.rShiftTo(-b, a)
} else {
this.lShiftTo(b, a)
}
return a
}
function bnShiftRight(b) {
var a = nbi();
if (b < 0) {
this.lShiftTo(-b, a)
} else {
this.rShiftTo(b, a)
}
return a
}
function lbit(a) {
if (a == 0) {
return -1
}
var b = 0;
if ((a & 65535) == 0) {
a >>= 16;
b += 16
}
if ((a & 255) == 0) {
a >>= 8;
b += 8
}
if ((a & 15) == 0) {
a >>= 4;
b += 4
}
if ((a & 3) == 0) {
a >>= 2;
b += 2
}
if ((a & 1) == 0) {
++b
}
return b
}
function bnGetLowestSetBit() {
for (var a = 0; a < this.t; ++a) {
if (this[a] != 0) {
return a * this.DB + lbit(this[a])
}
}
if (this.s < 0) {
return this.t * this.DB
}
return -1
}
function cbit(a) {
var b = 0;
while (a != 0) {
a &= a - 1;
++b
}
return b
}
function bnBitCount() {
var c = 0,
a = this.s & this.DM;
for (var b = 0; b < this.t; ++b) {
c += cbit(this[b] ^ a)
}
return c
}
function bnTestBit(b) {
var a = Math.floor(b / this.DB);
if (a >= this.t) {
return (this.s != 0)
}
return ((this[a] & (1 << (b % this.DB))) != 0)
}
function bnpChangeBit(c, b) {
var a = BigInteger.ONE.shiftLeft(c);
this.bitwiseTo(a, b, a);
return a
}
function bnSetBit(a) {
return this.changeBit(a, op_or)
}
function bnClearBit(a) {
return this.changeBit(a, op_andnot)
}
function bnFlipBit(a) {
return this.changeBit(a, op_xor)
}
function bnpAddTo(d, f) {
var e = 0,
g = 0,
b = Math.min(d.t, this.t);
while (e < b) {
g += this[e] + d[e];
f[e++] = g & this.DM;
g >>= this.DB
}
if (d.t < this.t) {
g += d.s;
while (e < this.t) {
g += this[e];
f[e++] = g & this.DM;
g >>= this.DB
}
g += this.s
} else {
g += this.s;
while (e < d.t) {
g += d[e];
f[e++] = g & this.DM;
g >>= this.DB
}
g += d.s
}
f.s = (g < 0) ? -1 : 0;
if (g > 0) {
f[e++] = g
} else {
if (g < -1) {
f[e++] = this.DV + g
}
}
f.t = e;
f.clamp()
}
function bnAdd(b) {
var c = nbi();
this.addTo(b, c);
return c
}
function bnSubtract(b) {
var c = nbi();
this.subTo(b, c);
return c
}
function bnMultiply(b) {
var c = nbi();
this.multiplyTo(b, c);
return c
}
function bnSquare() {
var a = nbi();
this.squareTo(a);
return a
}
function bnDivide(b) {
var c = nbi();
this.divRemTo(b, c, null);
return c
}
function bnRemainder(b) {
var c = nbi();
this.divRemTo(b, null, c);
return c
}
function bnDivideAndRemainder(b) {
var d = nbi(),
c = nbi();
this.divRemTo(b, d, c);
return new Array(d, c)
}
function bnpDMultiply(a) {
this[this.t] = this.am(0, a - 1, this, 0, 0, this.t);
++this.t;
this.clamp()
}
function bnpDAddOffset(b, a) {
if (b == 0) {
return
}
while (this.t <= a) {
this[this.t++] = 0
}
this[a] += b;
while (this[a] >= this.DV) {
this[a] -= this.DV;
if (++a >= this.t) {
this[this.t++] = 0
}++this[a]
}
}
function NullExp() {}
function nNop(a) {
return a
}
function nMulTo(a, c, b) {
a.multiplyTo(c, b)
}
function nSqrTo(a, b) {
a.squareTo(b)
}
NullExp.prototype.convert = nNop;
NullExp.prototype.revert = nNop;
NullExp.prototype.mulTo = nMulTo;
NullExp.prototype.sqrTo = nSqrTo;
function bnPow(a) {
return this.exp(a, new NullExp())
}
function bnpMultiplyLowerTo(b, f, e) {
var d = Math.min(this.t + b.t, f);
e.s = 0;
e.t = d;
while (d > 0) {
e[--d] = 0
}
var c;
for (c = e.t - this.t; d < c; ++d) {
e[d + this.t] = this.am(0, b[d], e, d, 0, this.t)
}
for (c = Math.min(b.t, f); d < c; ++d) {
this.am(0, b[d], e, d, 0, f - d)
}
e.clamp()
}
function bnpMultiplyUpperTo(b, e, d) {
--e;
var c = d.t = this.t + b.t - e;
d.s = 0;
while (--c >= 0) {
d[c] = 0
}
for (c = Math.max(e - this.t, 0); c < b.t; ++c) {
d[this.t + c - e] = this.am(e - c, b[c], d, 0, 0, this.t + c - e)
}
d.clamp();
d.drShiftTo(1, d)
}
function Barrett(a) {
this.r2 = nbi();
this.q3 = nbi();
BigInteger.ONE.dlShiftTo(2 * a.t, this.r2);
this.mu = this.r2.divide(a);
this.m = a
}
function barrettConvert(a) {
if (a.s < 0 || a.t > 2 * this.m.t) {
return a.mod(this.m)
} else {
if (a.compareTo(this.m) < 0) {
return a
} else {
var b = nbi();
a.copyTo(b);
this.reduce(b);
return b
}
}
}
function barrettRevert(a) {
return a
}
function barrettReduce(a) {
a.drShiftTo(this.m.t - 1, this.r2);
if (a.t > this.m.t + 1) {
a.t = this.m.t + 1;
a.clamp()
}
this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);
this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);
while (a.compareTo(this.r2) < 0) {
a.dAddOffset(1, this.m.t + 1)
}
a.subTo(this.r2, a);
while (a.compareTo(this.m) >= 0) {
a.subTo(this.m, a)
}
}
function barrettSqrTo(a, b) {
a.squareTo(b);
this.reduce(b)
}
function barrettMulTo(a, c, b) {
a.multiplyTo(c, b);
this.reduce(b)
}
Barrett.prototype.convert = barrettConvert;
Barrett.prototype.revert = barrettRevert;
Barrett.prototype.reduce = barrettReduce;
Barrett.prototype.mulTo = barrettMulTo;
Barrett.prototype.sqrTo = barrettSqrTo;
function bnModPow(q, f) {
var o = q.bitLength(),
h, b = nbv(1),
v;
if (o <= 0) {
return b
} else {
if (o < 18) {
h = 1
} else {
if (o < 48) {
h = 3
} else {
if (o < 144) {
h = 4
} else {
if (o < 768) {
h = 5
} else {
h = 6
}
}
}
}
}
if (o < 8) {
v = new Classic(f)
} else {
if (f.isEven()) {
v = new Barrett(f)
} else {
v = new Montgomery(f)
}
}
var p = new Array(),
d = 3,
s = h - 1,
a = (1 << h) - 1;
p[1] = v.convert(this);
if (h > 1) {
var A = nbi();
v.sqrTo(p[1], A);
while (d <= a) {
p[d] = nbi();
v.mulTo(A, p[d - 2], p[d]);
d += 2
}
}
var l = q.t - 1,
x, u = true,
c = nbi(),
y;
o = nbits(q[l]) - 1;
while (l >= 0) {
if (o >= s) {
x = (q[l] >> (o - s)) & a
} else {
x = (q[l] & ((1 << (o + 1)) - 1)) << (s - o);
if (l > 0) {
x |= q[l - 1] >> (this.DB + o - s)
}
}
d = h;
while ((x & 1) == 0) {
x >>= 1;
--d
}
if ((o -= d) < 0) {
o += this.DB;
--l
}
if (u) {
p[x].copyTo(b);
u = false
} else {
while (d > 1) {
v.sqrTo(b, c);
v.sqrTo(c, b);
d -= 2
}
if (d > 0) {
v.sqrTo(b, c)
} else {
y = b;
b = c;
c = y
}
v.mulTo(c, p[x], b)
}
while (l >= 0 && (q[l] & (1 << o)) == 0) {
v.sqrTo(b, c);
y = b;
b = c;
c = y;
if (--o < 0) {
o = this.DB - 1;
--l
}
}
}
return v.revert(b)
}
function bnGCD(c) {
var b = (this.s < 0) ? this.negate() : this.clone();
var h = (c.s < 0) ? c.negate() : c.clone();
if (b.compareTo(h) < 0) {
var e = b;
b = h;
h = e
}
var d = b.getLowestSetBit(),
f = h.getLowestSetBit();
if (f < 0) {
return b
}
if (d < f) {
f = d
}
if (f > 0) {
b.rShiftTo(f, b);
h.rShiftTo(f, h)
}
while (b.signum() > 0) {
if ((d = b.getLowestSetBit()) > 0) {
b.rShiftTo(d, b)
}
if ((d = h.getLowestSetBit()) > 0) {
h.rShiftTo(d, h)
}
if (b.compareTo(h) >= 0) {
b.subTo(h, b);
b.rShiftTo(1, b)
} else {
h.subTo(b, h);
h.rShiftTo(1, h)
}
}
if (f > 0) {
h.lShiftTo(f, h)
}
return h
}
function bnpModInt(e) {
if (e <= 0) {
return 0
}
var c = this.DV % e,
b = (this.s < 0) ? e - 1 : 0;
if (this.t > 0) {
if (c == 0) {
b = this[0] % e
} else {
for (var a = this.t - 1; a >= 0; --a) {
b = (c * b + this[a]) % e
}
}
}
return b
}
function bnModInverse(f) {
var j = f.isEven();
if ((this.isEven() && j) || f.signum() == 0) {
return BigInteger.ZERO
}
var i = f.clone(),
h = this.clone();
var g = nbv(1),
e = nbv(0),
l = nbv(0),
k = nbv(1);
while (i.signum() != 0) {
while (i.isEven()) {
i.rShiftTo(1, i);
if (j) {
if (!g.isEven() || !e.isEven()) {
g.addTo(this, g);
e.subTo(f, e)
}
g.rShiftTo(1, g)
} else {
if (!e.isEven()) {
e.subTo(f, e)
}
}
e.rShiftTo(1, e)
}
while (h.isEven()) {
h.rShiftTo(1, h);
if (j) {
if (!l.isEven() || !k.isEven()) {
l.addTo(this, l);
k.subTo(f, k)
}
l.rShiftTo(1, l)
} else {
if (!k.isEven()) {
k.subTo(f, k)
}
}
k.rShiftTo(1, k)
}
if (i.compareTo(h) >= 0) {
i.subTo(h, i);
if (j) {
g.subTo(l, g)
}
e.subTo(k, e)
} else {
h.subTo(i, h);
if (j) {
l.subTo(g, l)
}
k.subTo(e, k)
}
}
if (h.compareTo(BigInteger.ONE) != 0) {
return BigInteger.ZERO
}
if (k.compareTo(f) >= 0) {
return k.subtract(f)
}
if (k.signum() < 0) {
k.addTo(f, k)
} else {
return k
}
if (k.signum() < 0) {
return k.add(f)
} else {
return k
}
}
var lowprimes = [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, 521, 523,
541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853,
857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997
];
var lplim = (1 << 26) / lowprimes[lowprimes.length - 1];
function bnIsProbablePrime(e) {
var d, b = this.abs();
if (b.t == 1 && b[0] <= lowprimes[lowprimes.length - 1]) {
for (d = 0; d < lowprimes.length; ++d) {
if (b[0] == lowprimes[d]) {
return true
}
}
return false
}
if (b.isEven()) {
return false
}
d = 1;
while (d < lowprimes.length) {
var a = lowprimes[d],
c = d + 1;
while (c < lowprimes.length && a < lplim) {
a *= lowprimes[c++]
}
a = b.modInt(a);
while (d < c) {
if (a % lowprimes[d++] == 0) {
return false
}
}
}
return b.millerRabin(e)
}
function bnpMillerRabin(f) {
var g = this.subtract(BigInteger.ONE);
var c = g.getLowestSetBit();
if (c <= 0) {
return false
}
var h = g.shiftRight(c);
f = (f + 1) >> 1;
if (f > lowprimes.length) {
f = lowprimes.length
}
var b = nbi();
for (var e = 0; e < f; ++e) {
b.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);
var l = b.modPow(h, this);
if (l.compareTo(BigInteger.ONE) != 0 && l.compareTo(g) != 0) {
var d = 1;
while (d++ < c && l.compareTo(g) != 0) {
l = l.modPowInt(2, this);
if (l.compareTo(BigInteger.ONE) == 0) {
return false
}
}
if (l.compareTo(g) != 0) {
return false
}
}
}
return true
}
BigInteger.prototype.chunkSize = bnpChunkSize;
BigInteger.prototype.toRadix = bnpToRadix;
BigInteger.prototype.fromRadix = bnpFromRadix;
BigInteger.prototype.fromNumber = bnpFromNumber;
BigInteger.prototype.bitwiseTo = bnpBitwiseTo;
BigInteger.prototype.changeBit = bnpChangeBit;
BigInteger.prototype.addTo = bnpAddTo;
BigInteger.prototype.dMultiply = bnpDMultiply;
BigInteger.prototype.dAddOffset = bnpDAddOffset;
BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;
BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;
BigInteger.prototype.modInt = bnpModInt;
BigInteger.prototype.millerRabin = bnpMillerRabin;
BigInteger.prototype.clone = bnClone;
BigInteger.prototype.intValue = bnIntValue;
BigInteger.prototype.byteValue = bnByteValue;
BigInteger.prototype.shortValue = bnShortValue;
BigInteger.prototype.signum = bnSigNum;
BigInteger.prototype.toByteArray = bnToByteArray;
BigInteger.prototype.equals = bnEquals;
BigInteger.prototype.min = bnMin;
BigInteger.prototype.max = bnMax;
BigInteger.prototype.and = bnAnd;
BigInteger.prototype.or = bnOr;
BigInteger.prototype.xor = bnXor;
BigInteger.prototype.andNot = bnAndNot;
BigInteger.prototype.not = bnNot;
BigInteger.prototype.shiftLeft = bnShiftLeft;
BigInteger.prototype.shiftRight = bnShiftRight;
BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;
BigInteger.prototype.bitCount = bnBitCount;
BigInteger.prototype.testBit = bnTestBit;
BigInteger.prototype.setBit = bnSetBit;
BigInteger.prototype.clearBit = bnClearBit;
BigInteger.prototype.flipBit = bnFlipBit;
BigInteger.prototype.add = bnAdd;
BigInteger.prototype.subtract = bnSubtract;
BigInteger.prototype.multiply = bnMultiply;
BigInteger.prototype.divide = bnDivide;
BigInteger.prototype.remainder = bnRemainder;
BigInteger.prototype.divideAndRemainder = bnDivideAndRemainder;
BigInteger.prototype.modPow = bnModPow;
BigInteger.prototype.modInverse = bnModInverse;
BigInteger.prototype.pow = bnPow;
BigInteger.prototype.gcd = bnGCD;
BigInteger.prototype.isProbablePrime = bnIsProbablePrime;
BigInteger.prototype.square = bnSquare;
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
*/
function Arcfour() {
this.i = 0;
this.j = 0;
this.S = new Array()
}
function ARC4init(d) {
var c, a, b;
for (c = 0; c < 256; ++c) {
this.S[c] = c
}
a = 0;
for (c = 0; c < 256; ++c) {
a = (a + this.S[c] + d[c % d.length]) & 255;
b = this.S[c];
this.S[c] = this.S[a];
this.S[a] = b
}
this.i = 0;
this.j = 0
}
function ARC4next() {
var a;
this.i = (this.i + 1) & 255;
this.j = (this.j + this.S[this.i]) & 255;
a = this.S[this.i];
this.S[this.i] = this.S[this.j];
this.S[this.j] = a;
return this.S[(a + this.S[this.i]) & 255]
}
Arcfour.prototype.init = ARC4init;
Arcfour.prototype.next = ARC4next;
function prng_newstate() {
return new Arcfour()
}
var rng_psize = 256;
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
*/
var rng_state;
var rng_pool;
var rng_pptr;
function rng_seed_int(a) {
rng_pool[rng_pptr++] ^= a & 255;
rng_pool[rng_pptr++] ^= (a >> 8) & 255;
rng_pool[rng_pptr++] ^= (a >> 16) & 255;
rng_pool[rng_pptr++] ^= (a >> 24) & 255;
if (rng_pptr >= rng_psize) {
rng_pptr -= rng_psize
}
}
function rng_seed_time() {
rng_seed_int(new Date().getTime())
}
if (rng_pool == null) {
rng_pool = new Array();
rng_pptr = 0;
var t;
if (navigator.appName == "Netscape" && navigator.appVersion < "5" && window.crypto) {
var z = window.crypto.random(32);
for (t = 0; t < z.length; ++t) {
rng_pool[rng_pptr++] = z.charCodeAt(t) & 255
}
}
while (rng_pptr < rng_psize) {
t = Math.floor(65536 * Math.random());
rng_pool[rng_pptr++] = t >>> 8;
rng_pool[rng_pptr++] = t & 255
}
rng_pptr = 0;
rng_seed_time()
}
function rng_get_byte() {
if (rng_state == null) {
rng_seed_time();
rng_state = prng_newstate();
rng_state.init(rng_pool);
for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {
rng_pool[rng_pptr] = 0
}
rng_pptr = 0
}
return rng_state.next()
}
function rng_get_bytes(b) {
var a;
for (a = 0; a < b.length; ++a) {
b[a] = rng_get_byte()
}
}
function SecureRandom() {}
SecureRandom.prototype.nextBytes = rng_get_bytes;
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
*/
function parseBigInt(b, a) {
return new BigInteger(b, a)
}
function linebrk(c, d) {
var a = "";
var b = 0;
while (b + d < c.length) {
a += c.substring(b, b + d) + "\n";
b += d
}
return a + c.substring(b, c.length)
}
function byte2Hex(a) {
if (a < 16) {
return "0" + a.toString(16)
} else {
return a.toString(16)
}
}
function pkcs1pad2(e, h) {
if (h < e.length + 11) {
alert("Message too long for RSA");
return null
}
var g = new Array();
var d = e.length - 1;
while (d >= 0 && h > 0) {
var f = e.charCodeAt(d--);
if (f < 128) {
g[--h] = f
} else {
if ((f > 127) && (f < 2048)) {
g[--h] = (f & 63) | 128;
g[--h] = (f >> 6) | 192
} else {
g[--h] = (f & 63) | 128;
g[--h] = ((f >> 6) & 63) | 128;
g[--h] = (f >> 12) | 224
}
}
}
g[--h] = 0;
var b = new SecureRandom();
var a = new Array();
while (h > 2) {
a[0] = 0;
while (a[0] == 0) {
b.nextBytes(a)
}
g[--h] = a[0]
}
g[--h] = 2;
g[--h] = 0;
return new BigInteger(g)
}
function oaep_mgf1_arr(c, a, e) {
var b = "",
d = 0;
while (b.length < a) {
b += e(String.fromCharCode.apply(String, c.concat([(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255])));
d += 1
}
return b
}
var SHA1_SIZE = 20;
function oaep_pad(l, a, c) {
if (l.length + 2 * SHA1_SIZE + 2 > a) {
throw "Message too long for RSA"
}
var h = "",
d;
for (d = 0; d < a - l.length - 2 * SHA1_SIZE - 2; d += 1) {
h += "\x00"
}
var e = rstr_sha1("") + h + "\x01" + l;
var f = new Array(SHA1_SIZE);
new SecureRandom().nextBytes(f);
var g = oaep_mgf1_arr(f, e.length, c || rstr_sha1);
var k = [];
for (d = 0; d < e.length; d += 1) {
k[d] = e.charCodeAt(d) ^ g.charCodeAt(d)
}
var j = oaep_mgf1_arr(k, f.length, rstr_sha1);
var b = [0];
for (d = 0; d < f.length; d += 1) {
b[d + 1] = f[d] ^ j.charCodeAt(d)
}
return new BigInteger(b.concat(k))
}
function RSAKey() {
this.n = null;
this.e = 0;
this.d = null;
this.p = null;
this.q = null;
this.dmp1 = null;
this.dmq1 = null;
this.coeff = null
}
function RSASetPublic(b, a) {
this.isPublic = true;
if (typeof b !== "string") {
this.n = b;
this.e = a
} else {
if (b != null && a != null && b.length > 0 && a.length > 0) {
this.n = parseBigInt(b, 16);
this.e = parseInt(a, 16)
} else {
alert("Invalid RSA public key")
}
}
}
function RSADoPublic(a) {
return a.modPowInt(this.e, this.n)
}
function RSAEncrypt(d) {
var a = pkcs1pad2(d, (this.n.bitLength() + 7) >> 3);
if (a == null) {
return null
}
var e = this.doPublic(a);
if (e == null) {
return null
}
var b = e.toString(16);
if ((b.length & 1) == 0) {
return b
} else {
return "0" + b
}
}
function RSAEncryptOAEP(e, d) {
var a = oaep_pad(e, (this.n.bitLength() + 7) >> 3, d);
if (a == null) {
return null
}
var f = this.doPublic(a);
if (f == null) {
return null
}
var b = f.toString(16);
if ((b.length & 1) == 0) {
return b
} else {
return "0" + b
}
}
RSAKey.prototype.doPublic = RSADoPublic;
RSAKey.prototype.setPublic = RSASetPublic;
RSAKey.prototype.encrypt = RSAEncrypt;
RSAKey.prototype.encryptOAEP = RSAEncryptOAEP;
RSAKey.prototype.type = "RSA";
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
*/
function pkcs1unpad2(g, j) {
var a = g.toByteArray();
var f = 0;
while (f < a.length && a[f] == 0) {
++f
}
if (a.length - f != j - 1 || a[f] != 2) {
return null
}++f;
while (a[f] != 0) {
if (++f >= a.length) {
return null
}
}
var e = "";
while (++f < a.length) {
var h = a[f] & 255;
if (h < 128) {
e += String.fromCharCode(h)
} else {
if ((h > 191) && (h < 224)) {
e += String.fromCharCode(((h & 31) << 6) | (a[f + 1] & 63));
++f
} else {
e += String.fromCharCode(((h & 15) << 12) | ((a[f + 1] & 63) << 6) | (a[f + 2] & 63));
f += 2
}
}
}
return e
}
function oaep_mgf1_str(c, a, e) {
var b = "",
d = 0;
while (b.length < a) {
b += e(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255]));
d += 1
}
return b
}
var SHA1_SIZE = 20;
function oaep_unpad(l, b, e) {
l = l.toByteArray();
var f;
for (f = 0; f < l.length; f += 1) {
l[f] &= 255
}
while (l.length < b) {
l.unshift(0)
}
l = String.fromCharCode.apply(String, l);
if (l.length < 2 * SHA1_SIZE + 2) {
throw "Cipher too short"
}
var c = l.substr(1, SHA1_SIZE);
var o = l.substr(SHA1_SIZE + 1);
var m = oaep_mgf1_str(o, SHA1_SIZE, e || rstr_sha1);
var h = [],
f;
for (f = 0; f < c.length; f += 1) {
h[f] = c.charCodeAt(f) ^ m.charCodeAt(f)
}
var j = oaep_mgf1_str(String.fromCharCode.apply(String, h), l.length - SHA1_SIZE, rstr_sha1);
var g = [];
for (f = 0; f < o.length; f += 1) {
g[f] = o.charCodeAt(f) ^ j.charCodeAt(f)
}
g = String.fromCharCode.apply(String, g);
if (g.substr(0, SHA1_SIZE) !== rstr_sha1("")) {
throw "Hash mismatch"
}
g = g.substr(SHA1_SIZE);
var a = g.indexOf("\x01");
var k = (a != -1) ? g.substr(0, a).lastIndexOf("\x00") : -1;
if (k + 1 != a) {
throw "Malformed data"
}
return g.substr(a + 1)
}
function RSASetPrivate(c, a, b) {
this.isPrivate = true;
if (typeof c !== "string") {
this.n = c;
this.e = a;
this.d = b
} else {
if (c != null && a != null && c.length > 0 && a.length > 0) {
this.n = parseBigInt(c, 16);
this.e = parseInt(a, 16);
this.d = parseBigInt(b, 16)
} else {
alert("Invalid RSA private key")
}
}
}
function RSASetPrivateEx(g, d, e, c, b, a, h, f) {
this.isPrivate = true;
if (g == null) {
throw "RSASetPrivateEx N == null"
}
if (d == null) {
throw "RSASetPrivateEx E == null"
}
if (g.length == 0) {
throw "RSASetPrivateEx N.length == 0"
}
if (d.length == 0) {
throw "RSASetPrivateEx E.length == 0"
}
if (g != null && d != null && g.length > 0 && d.length > 0) {
this.n = parseBigInt(g, 16);
this.e = parseInt(d, 16);
this.d = parseBigInt(e, 16);
this.p = parseBigInt(c, 16);
this.q = parseBigInt(b, 16);
this.dmp1 = parseBigInt(a, 16);
this.dmq1 = parseBigInt(h, 16);
this.coeff = parseBigInt(f, 16)
} else {
alert("Invalid RSA private key in RSASetPrivateEx")
}
}
function RSAGenerate(b, i) {
var a = new SecureRandom();
var f = b >> 1;
this.e = parseInt(i, 16);
var c = new BigInteger(i, 16);
for (;;) {
for (;;) {
this.p = new BigInteger(b - f, 1, a);
if (this.p.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {
break
}
}
for (;;) {
this.q = new BigInteger(f, 1, a);
if (this.q.subtract(BigInteger.ONE).gcd(c).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {
break
}
}
if (this.p.compareTo(this.q) <= 0) {
var h = this.p;
this.p = this.q;
this.q = h
}
var g = this.p.subtract(BigInteger.ONE);
var d = this.q.subtract(BigInteger.ONE);
var e = g.multiply(d);
if (e.gcd(c).compareTo(BigInteger.ONE) == 0) {
this.n = this.p.multiply(this.q);
this.d = c.modInverse(e);
this.dmp1 = this.d.mod(g);
this.dmq1 = this.d.mod(d);
this.coeff = this.q.modInverse(this.p);
break
}
}
}
function RSADoPrivate(a) {
if (this.p == null || this.q == null) {
return a.modPow(this.d, this.n)
}
var c = a.mod(this.p).modPow(this.dmp1, this.p);
var b = a.mod(this.q).modPow(this.dmq1, this.q);
while (c.compareTo(b) < 0) {
c = c.add(this.p)
}
return c.subtract(b).multiply(this.coeff).mod(this.p).multiply(this.q).add(b)
}
function RSADecrypt(b) {
var d = parseBigInt(b, 16);
var a = this.doPrivate(d);
if (a == null) {
return null
}
return pkcs1unpad2(a, (this.n.bitLength() + 7) >> 3)
}
function RSADecryptOAEP(d, b) {
var e = parseBigInt(d, 16);
var a = this.doPrivate(e);
if (a == null) {
return null
}
return oaep_unpad(a, (this.n.bitLength() + 7) >> 3, b)
}
RSAKey.prototype.doPrivate = RSADoPrivate;
RSAKey.prototype.setPrivate = RSASetPrivate;
RSAKey.prototype.setPrivateEx = RSASetPrivateEx;
RSAKey.prototype.generate = RSAGenerate;
RSAKey.prototype.decrypt = RSADecrypt;
RSAKey.prototype.decryptOAEP = RSADecryptOAEP;
/*! (c) Tom Wu | http://www-cs-students.stanford.edu/~tjw/jsbn/
*/
function ECFieldElementFp(b, a) {
this.x = a;
this.q = b
}
function feFpEquals(a) {
if (a == this) {
return true
}
return (this.q.equals(a.q) && this.x.equals(a.x))
}
function feFpToBigInteger() {
return this.x
}
function feFpNegate() {
return new ECFieldElementFp(this.q, this.x.negate().mod(this.q))
}
function feFpAdd(a) {
return new ECFieldElementFp(this.q, this.x.add(a.toBigInteger()).mod(this.q))
}
function feFpSubtract(a) {
return new ECFieldElementFp(this.q, this.x.subtract(a.toBigInteger()).mod(this.q))
}
function feFpMultiply(a) {
return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger()).mod(this.q))
}
function feFpSquare() {
return new ECFieldElementFp(this.q, this.x.square().mod(this.q))
}
function feFpDivide(a) {
return new ECFieldElementFp(this.q, this.x.multiply(a.toBigInteger().modInverse(this.q)).mod(this.q))
}
ECFieldElementFp.prototype.equals = feFpEquals;
ECFieldElementFp.prototype.toBigInteger = feFpToBigInteger;
ECFieldElementFp.prototype.negate = feFpNegate;
ECFieldElementFp.prototype.add = feFpAdd;
ECFieldElementFp.prototype.subtract = feFpSubtract;
ECFieldElementFp.prototype.multiply = feFpMultiply;
ECFieldElementFp.prototype.square = feFpSquare;
ECFieldElementFp.prototype.divide = feFpDivide;
function ECPointFp(c, a, d, b) {
this.curve = c;
this.x = a;
this.y = d;
if (b == null) {
this.z = BigInteger.ONE
} else {
this.z = b
}
this.zinv = null
}
function pointFpGetX() {
if (this.zinv == null) {
this.zinv = this.z.modInverse(this.curve.q)
}
return this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))
}
function pointFpGetY() {
if (this.zinv == null) {
this.zinv = this.z.modInverse(this.curve.q)
}
return this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))
}
function pointFpEquals(a) {
if (a == this) {
return true
}
if (this.isInfinity()) {
return a.isInfinity()
}
if (a.isInfinity()) {
return this.isInfinity()
}
var c, b;
c = a.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(a.z)).mod(this.curve.q);
if (!c.equals(BigInteger.ZERO)) {
return false
}
b = a.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(a.z)).mod(this.curve.q);
return b.equals(BigInteger.ZERO)
}
function pointFpIsInfinity() {
if ((this.x == null) && (this.y == null)) {
return true
}
return this.z.equals(BigInteger.ZERO) && !this.y.toBigInteger().equals(BigInteger.ZERO)
}
function pointFpNegate() {
return new ECPointFp(this.curve, this.x, this.y.negate(), this.z)
}
function pointFpAdd(l) {
if (this.isInfinity()) {
return l
}
if (l.isInfinity()) {
return this
}
var p = l.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(l.z)).mod(this.curve.q);
var o = l.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(l.z)).mod(this.curve.q);
if (BigInteger.ZERO.equals(o)) {
if (BigInteger.ZERO.equals(p)) {
return this.twice()
}
return this.curve.getInfinity()
}
var j = new BigInteger("3");
var e = this.x.toBigInteger();
var n = this.y.toBigInteger();
var c = l.x.toBigInteger();
var k = l.y.toBigInteger();
var m = o.square();
var i = m.multiply(o);
var d = e.multiply(m);
var g = p.square().multiply(this.z);
var a = g.subtract(d.shiftLeft(1)).multiply(l.z).subtract(i).multiply(o).mod(this.curve.q);
var h = d.multiply(j).multiply(p).subtract(n.multiply(i)).subtract(g.multiply(p)).multiply(l.z).add(p.multiply(i)).mod(this.curve.q);
var f = i.multiply(this.z).multiply(l.z).mod(this.curve.q);
return new ECPointFp(this.curve, this.curve.fromBigInteger(a), this.curve.fromBigInteger(h), f)
}
function pointFpTwice() {
if (this.isInfinity()) {
return this
}
if (this.y.toBigInteger().signum() == 0) {
return this.curve.getInfinity()
}
var g = new BigInteger("3");
var c = this.x.toBigInteger();
var h = this.y.toBigInteger();
var e = h.multiply(this.z);
var j = e.multiply(h).mod(this.curve.q);
var i = this.curve.a.toBigInteger();
var k = c.square().multiply(g);
if (!BigInteger.ZERO.equals(i)) {
k = k.add(this.z.square().multiply(i))
}
k = k.mod(this.curve.q);
var b = k.square().subtract(c.shiftLeft(3).multiply(j)).shiftLeft(1).multiply(e).mod(this.curve.q);
var f = k.multiply(g).multiply(c).subtract(j.shiftLeft(1)).shiftLeft(2).multiply(j).subtract(k.square().multiply(k)).mod(this.curve.q);
var d = e.square().multiply(e).shiftLeft(3).mod(this.curve.q);
return new ECPointFp(this.curve, this.curve.fromBigInteger(b), this.curve.fromBigInteger(f), d)
}
function pointFpMultiply(b) {
if (this.isInfinity()) {
return this
}
if (b.signum() == 0) {
return this.curve.getInfinity()
}
var g = b;
var f = g.multiply(new BigInteger("3"));
var l = this.negate();
var d = this;
var c;
for (c = f.bitLength() - 2; c > 0; --c) {
d = d.twice();
var a = f.testBit(c);
var j = g.testBit(c);
if (a != j) {
d = d.add(a ? this : l)
}
}
return d
}
function pointFpMultiplyTwo(c, a, b) {
var d;
if (c.bitLength() > b.bitLength()) {
d = c.bitLength() - 1
} else {
d = b.bitLength() - 1
}
var f = this.curve.getInfinity();
var e = this.add(a);
while (d >= 0) {
f = f.twice();
if (c.testBit(d)) {
if (b.testBit(d)) {
f = f.add(e)
} else {
f = f.add(this)
}
} else {
if (b.testBit(d)) {
f = f.add(a)
}
}--d
}
return f
}
ECPointFp.prototype.getX = pointFpGetX;
ECPointFp.prototype.getY = pointFpGetY;
ECPointFp.prototype.equals = pointFpEquals;
ECPointFp.prototype.isInfinity = pointFpIsInfinity;
ECPointFp.prototype.negate = pointFpNegate;
ECPointFp.prototype.add = pointFpAdd;
ECPointFp.prototype.twice = pointFpTwice;
ECPointFp.prototype.multiply = pointFpMultiply;
ECPointFp.prototype.multiplyTwo = pointFpMultiplyTwo;
function ECCurveFp(e, d, c) {
this.q = e;
this.a = this.fromBigInteger(d);
this.b = this.fromBigInteger(c);
this.infinity = new ECPointFp(this, null, null)
}
function curveFpGetQ() {
return this.q
}
function curveFpGetA() {
return this.a
}
function curveFpGetB() {
return this.b
}
function curveFpEquals(a) {
if (a == this) {
return true
}
return (this.q.equals(a.q) && this.a.equals(a.a) && this.b.equals(a.b))
}
function curveFpGetInfinity() {
return this.infinity
}
function curveFpFromBigInteger(a) {
return new ECFieldElementFp(this.q, a)
}
function curveFpDecodePointHex(d) {
switch (parseInt(d.substr(0, 2), 16)) {
case 0:
return this.infinity;
case 2:
case 3:
return null;
case 4:
case 6:
case 7:
var a = (d.length - 2) / 2;
var c = d.substr(2, a);
var b = d.substr(a + 2, a);
return new ECPointFp(this, this.fromBigInteger(new BigInteger(c, 16)), this.fromBigInteger(new BigInteger(b, 16)));
default:
return null
}
}
ECCurveFp.prototype.getQ = curveFpGetQ;
ECCurveFp.prototype.getA = curveFpGetA;
ECCurveFp.prototype.getB = curveFpGetB;
ECCurveFp.prototype.equals = curveFpEquals;
ECCurveFp.prototype.getInfinity = curveFpGetInfinity;
ECCurveFp.prototype.fromBigInteger = curveFpFromBigInteger;
ECCurveFp.prototype.decodePointHex = curveFpDecodePointHex;
/*! (c) Stefan Thomas | https://github.com/bitcoinjs/bitcoinjs-lib
*/
ECFieldElementFp.prototype.getByteLength = function() {
return Math.floor((this.toBigInteger().bitLength() + 7) / 8)
};
ECPointFp.prototype.getEncoded = function(c) {
var d = function(h, f) {
var g = h.toByteArrayUnsigned();
if (f < g.length) {
g = g.slice(g.length - f)
} else {
while (f > g.length) {
g.unshift(0)
}
}
return g
};
var a = this.getX().toBigInteger();
var e = this.getY().toBigInteger();
var b = d(a, 32);
if (c) {
if (e.isEven()) {
b.unshift(2)
} else {
b.unshift(3)
}
} else {
b.unshift(4);
b = b.concat(d(e, 32))
}
return b
};
ECPointFp.decodeFrom = function(g, c) {
var f = c[0];
var e = c.length - 1;
var d = c.slice(1, 1 + e / 2);
var b = c.slice(1 + e / 2, 1 + e);
d.unshift(0);
b.unshift(0);
var a = new BigInteger(d);
var h = new BigInteger(b);
return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h))
};
ECPointFp.decodeFromHex = function(g, c) {
var f = c.substr(0, 2);
var e = c.length - 2;
var d = c.substr(2, e / 2);
var b = c.substr(2 + e / 2, e / 2);
var a = new BigInteger(d, 16);
var h = new BigInteger(b, 16);
return new ECPointFp(g, g.fromBigInteger(a), g.fromBigInteger(h))
};
ECPointFp.prototype.add2D = function(c) {
if (this.isInfinity()) {
return c
}
if (c.isInfinity()) {
return this
}
if (this.x.equals(c.x)) {
if (this.y.equals(c.y)) {
return this.twice()
}
return this.curve.getInfinity()
}
var g = c.x.subtract(this.x);
var e = c.y.subtract(this.y);
var a = e.divide(g);
var d = a.square().subtract(this.x).subtract(c.x);
var f = a.multiply(this.x.subtract(d)).subtract(this.y);
return new ECPointFp(this.curve, d, f)
};
ECPointFp.prototype.twice2D = function() {
if (this.isInfinity()) {
return this
}
if (this.y.toBigInteger().signum() == 0) {
return this.curve.getInfinity()
}
var b = this.curve.fromBigInteger(BigInteger.valueOf(2));
var e = this.curve.fromBigInteger(BigInteger.valueOf(3));
var a = this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(b));
var c = a.square().subtract(this.x.multiply(b));
var d = a.multiply(this.x.subtract(c)).subtract(this.y);
return new ECPointFp(this.curve, c, d)
};
ECPointFp.prototype.multiply2D = function(b) {
if (this.isInfinity()) {
return this
}
if (b.signum() == 0) {
return this.curve.getInfinity()
}
var g = b;
var f = g.multiply(new BigInteger("3"));
var l = this.negate();
var d = this;
var c;
for (c = f.bitLength() - 2; c > 0; --c) {
d = d.twice();
var a = f.testBit(c);
var j = g.testBit(c);
if (a != j) {
d = d.add2D(a ? this : l)
}
}
return d
};
ECPointFp.prototype.isOnCurve = function() {
var d = this.getX().toBigInteger();
var i = this.getY().toBigInteger();
var f = this.curve.getA().toBigInteger();
var c = this.curve.getB().toBigInteger();
var h = this.curve.getQ();
var e = i.multiply(i).mod(h);
var g = d.multiply(d).multiply(d).add(f.multiply(d)).add(c).mod(h);
return e.equals(g)
};
ECPointFp.prototype.toString = function() {
return "(" + this.getX().toBigInteger().toString() + "," + this.getY().toBigInteger().toString() + ")"
};
ECPointFp.prototype.validate = function() {
var c = this.curve.getQ();
if (this.isInfinity()) {
throw new Error("Point is at infinity.")
}
var a = this.getX().toBigInteger();
var b = this.getY().toBigInteger();
if (a.compareTo(BigInteger.ONE) < 0 || a.compareTo(c.subtract(BigInteger.ONE)) > 0) {
throw new Error("x coordinate out of bounds")
}
if (b.compareTo(BigInteger.ONE) < 0 || b.compareTo(c.subtract(BigInteger.ONE)) > 0) {
throw new Error("y coordinate out of bounds")
}
if (!this.isOnCurve()) {
throw new Error("Point is not on the curve.")
}
if (this.multiply(c).isInfinity()) {
throw new Error("Point is not a scalar multiple of G.")
}
return true
};
/*! asn1-1.0.6.js (c) 2013 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
if (typeof KJUR == "undefined" || !KJUR) {
KJUR = {}
}
if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
KJUR.asn1 = {}
}
KJUR.asn1.ASN1Util = new function() {
this.integerToByteHex = function(a) {
var b = a.toString(16);
if ((b.length % 2) == 1) {
b = "0" + b
}
return b
};
this.bigIntToMinTwosComplementsHex = function(j) {
var f = j.toString(16);
if (f.substr(0, 1) != "-") {
if (f.length % 2 == 1) {
f = "0" + f
} else {
if (!f.match(/^[0-7]/)) {
f = "00" + f
}
}
} else {
var a = f.substr(1);
var e = a.length;
if (e % 2 == 1) {
e += 1
} else {
if (!f.match(/^[0-7]/)) {
e += 2
}
}
var g = "";
for (var d = 0; d < e; d++) {
g += "f"
}
var c = new BigInteger(g, 16);
var b = c.xor(j).add(BigInteger.ONE);
f = b.toString(16).replace(/^-/, "")
}
return f
};
this.getPEMStringFromHex = function(a, b) {
var c = KJUR.asn1;
var f = CryptoJS.enc.Hex.parse(a);
var d = CryptoJS.enc.Base64.stringify(f);
var e = d.replace(/(.{64})/g, "$1\r\n");
e = e.replace(/\r\n$/, "");
return "-----BEGIN " + b + "-----\r\n" + e + "\r\n-----END " + b + "-----\r\n"
};
this.newObject = function(b) {
var g = KJUR.asn1;
var k = Object.keys(b);
if (k.length != 1) {
throw "key of param shall be only one."
}
var j = k[0];
if (":bool:int:bitstr:octstr:null:oid:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":" + j + ":") == -1) {
throw "undefined key: " + j
}
if (j == "bool") {
return new g.DERBoolean(b[j])
}
if (j == "int") {
return new g.DERInteger(b[j])
}
if (j == "bitstr") {
return new g.DERBitString(b[j])
}
if (j == "octstr") {
return new g.DEROctetString(b[j])
}
if (j == "null") {
return new g.DERNull(b[j])
}
if (j == "oid") {
return new g.DERObjectIdentifier(b[j])
}
if (j == "utf8str") {
return new g.DERUTF8String(b[j])
}
if (j == "numstr") {
return new g.DERNumericString(b[j])
}
if (j == "prnstr") {
return new g.DERPrintableString(b[j])
}
if (j == "telstr") {
return new g.DERTeletexString(b[j])
}
if (j == "ia5str") {
return new g.DERIA5String(b[j])
}
if (j == "utctime") {
return new g.DERUTCTime(b[j])
}
if (j == "gentime") {
return new g.DERGeneralizedTime(b[j])
}
if (j == "seq") {
var m = b[j];
var h = [];
for (var e = 0; e < m.length; e++) {
var l = g.ASN1Util.newObject(m[e]);
h.push(l)
}
return new g.DERSequence({
array: h
})
}
if (j == "set") {
var m = b[j];
var h = [];
for (var e = 0; e < m.length; e++) {
var l = g.ASN1Util.newObject(m[e]);
h.push(l)
}
return new g.DERSet({
array: h
})
}
if (j == "tag") {
var c = b[j];
if (Object.prototype.toString.call(c) === "[object Array]" && c.length == 3) {
var d = g.ASN1Util.newObject(c[2]);
return new g.DERTaggedObject({
tag: c[0],
explicit: c[1],
obj: d
})
} else {
var f = {};
if (c.explicit !== undefined) {
f.explicit = c.explicit
}
if (c.tag !== undefined) {
f.tag = c.tag
}
if (c.obj === undefined) {
throw "obj shall be specified for 'tag'."
}
f.obj = g.ASN1Util.newObject(c.obj);
return new g.DERTaggedObject(f)
}
}
};
this.jsonToASN1HEX = function(b) {
var a = this.newObject(b);
return a.getEncodedHex()
}
};
KJUR.asn1.ASN1Object = function() {
var c = true;
var b = null;
var d = "00";
var e = "00";
var a = "";
this.getLengthHexFromValue = function() {
if (typeof this.hV == "undefined" || this.hV == null) {
throw "this.hV is null or undefined."
}
if (this.hV.length % 2 == 1) {
throw "value hex must be even length: n=" + a.length + ",v=" + this.hV
}
var i = this.hV.length / 2;
var h = i.toString(16);
if (h.length % 2 == 1) {
h = "0" + h
}
if (i < 128) {
return h
} else {
var g = h.length / 2;
if (g > 15) {
throw "ASN.1 length too long to represent by 8x: n = " + i.toString(16)
}
var f = 128 + g;
return f.toString(16) + h
}
};
this.getEncodedHex = function() {
if (this.hTLV == null || this.isModified) {
this.hV = this.getFreshValueHex();
this.hL = this.getLengthHexFromValue();
this.hTLV = this.hT + this.hL + this.hV;
this.isModified = false
}
return this.hTLV
};
this.getValueHex = function() {
this.getEncodedHex();
return this.hV
};
this.getFreshValueHex = function() {
return ""
}
};
KJUR.asn1.DERAbstractString = function(c) {
KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
var b = null;
var a = null;
this.getString = function() {
return this.s
};
this.setString = function(d) {
this.hTLV = null;
this.isModified = true;
this.s = d;
this.hV = stohex(this.s)
};
this.setStringHex = function(d) {
this.hTLV = null;
this.isModified = true;
this.s = null;
this.hV = d
};
this.getFreshValueHex = function() {
return this.hV
};
if (typeof c != "undefined") {
if (typeof c == "string") {
this.setString(c)
} else {
if (typeof c.str != "undefined") {
this.setString(c.str)
} else {
if (typeof c.hex != "undefined") {
this.setStringHex(c.hex)
}
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);
KJUR.asn1.DERAbstractTime = function(c) {
KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);
var b = null;
var a = null;
this.localDateToUTC = function(f) {
utc = f.getTime() + (f.getTimezoneOffset() * 60000);
var e = new Date(utc);
return e
};
this.formatDate = function(m, o, e) {
var g = this.zeroPadding;
var n = this.localDateToUTC(m);
var p = String(n.getFullYear());
if (o == "utc") {
p = p.substr(2, 2)
}
var l = g(String(n.getMonth() + 1), 2);
var q = g(String(n.getDate()), 2);
var h = g(String(n.getHours()), 2);
var i = g(String(n.getMinutes()), 2);
var j = g(String(n.getSeconds()), 2);
var r = p + l + q + h + i + j;
if (e === true) {
var f = n.getMilliseconds();
if (f != 0) {
var k = g(String(f), 3);
k = k.replace(/[0]+$/, "");
r = r + "." + k
}
}
return r + "Z"
};
this.zeroPadding = function(e, d) {
if (e.length >= d) {
return e
}
return new Array(d - e.length + 1).join("0") + e
};
this.getString = function() {
return this.s
};
this.setString = function(d) {
this.hTLV = null;
this.isModified = true;
this.s = d;
this.hV = stohex(d)
};
this.setByDateValue = function(h, j, e, d, f, g) {
var i = new Date(Date.UTC(h, j - 1, e, d, f, g, 0));
this.setByDate(i)
};
this.getFreshValueHex = function() {
return this.hV
}
};
YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);
KJUR.asn1.DERAbstractStructured = function(b) {
KJUR.asn1.DERAbstractString.superclass.constructor.call(this);
var a = null;
this.setByASN1ObjectArray = function(c) {
this.hTLV = null;
this.isModified = true;
this.asn1Array = c
};
this.appendASN1Object = function(c) {
this.hTLV = null;
this.isModified = true;
this.asn1Array.push(c)
};
this.asn1Array = new Array();
if (typeof b != "undefined") {
if (typeof b.array != "undefined") {
this.asn1Array = b.array
}
}
};
YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);
KJUR.asn1.DERBoolean = function() {
KJUR.asn1.DERBoolean.superclass.constructor.call(this);
this.hT = "01";
this.hTLV = "0101ff"
};
YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);
KJUR.asn1.DERInteger = function(a) {
KJUR.asn1.DERInteger.superclass.constructor.call(this);
this.hT = "02";
this.setByBigInteger = function(b) {
this.hTLV = null;
this.isModified = true;
this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(b)
};
this.setByInteger = function(c) {
var b = new BigInteger(String(c), 10);
this.setByBigInteger(b)
};
this.setValueHex = function(b) {
this.hV = b
};
this.getFreshValueHex = function() {
return this.hV
};
if (typeof a != "undefined") {
if (typeof a.bigint != "undefined") {
this.setByBigInteger(a.bigint)
} else {
if (typeof a["int"] != "undefined") {
this.setByInteger(a["int"])
} else {
if (typeof a == "number") {
this.setByInteger(a)
} else {
if (typeof a.hex != "undefined") {
this.setValueHex(a.hex)
}
}
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);
KJUR.asn1.DERBitString = function(a) {
KJUR.asn1.DERBitString.superclass.constructor.call(this);
this.hT = "03";
this.setHexValueIncludingUnusedBits = function(b) {
this.hTLV = null;
this.isModified = true;
this.hV = b
};
this.setUnusedBitsAndHexValue = function(b, d) {
if (b < 0 || 7 < b) {
throw "unused bits shall be from 0 to 7: u = " + b
}
var c = "0" + b;
this.hTLV = null;
this.isModified = true;
this.hV = c + d
};
this.setByBinaryString = function(e) {
e = e.replace(/0+$/, "");
var f = 8 - e.length % 8;
if (f == 8) {
f = 0
}
for (var g = 0; g <= f; g++) {
e += "0"
}
var j = "";
for (var g = 0; g < e.length - 1; g += 8) {
var d = e.substr(g, 8);
var c = parseInt(d, 2).toString(16);
if (c.length == 1) {
c = "0" + c
}
j += c
}
this.hTLV = null;
this.isModified = true;
this.hV = "0" + f + j
};
this.setByBooleanArray = function(d) {
var c = "";
for (var b = 0; b < d.length; b++) {
if (d[b] == true) {
c += "1"
} else {
c += "0"
}
}
this.setByBinaryString(c)
};
this.newFalseArray = function(d) {
var b = new Array(d);
for (var c = 0; c < d; c++) {
b[c] = false
}
return b
};
this.getFreshValueHex = function() {
return this.hV
};
if (typeof a != "undefined") {
if (typeof a == "string" && a.toLowerCase().match(/^[0-9a-f]+$/)) {
this.setHexValueIncludingUnusedBits(a)
} else {
if (typeof a.hex != "undefined") {
this.setHexValueIncludingUnusedBits(a.hex)
} else {
if (typeof a.bin != "undefined") {
this.setByBinaryString(a.bin)
} else {
if (typeof a.array != "undefined") {
this.setByBooleanArray(a.array)
}
}
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);
KJUR.asn1.DEROctetString = function(a) {
KJUR.asn1.DEROctetString.superclass.constructor.call(this, a);
this.hT = "04"
};
YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);
KJUR.asn1.DERNull = function() {
KJUR.asn1.DERNull.superclass.constructor.call(this);
this.hT = "05";
this.hTLV = "0500"
};
YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);
KJUR.asn1.DERObjectIdentifier = function(c) {
var b = function(d) {
var e = d.toString(16);
if (e.length == 1) {
e = "0" + e
}
return e
};
var a = function(k) {
var j = "";
var e = new BigInteger(k, 10);
var d = e.toString(2);
var f = 7 - d.length % 7;
if (f == 7) {
f = 0
}
var m = "";
for (var g = 0; g < f; g++) {
m += "0"
}
d = m + d;
for (var g = 0; g < d.length - 1; g += 7) {
var l = d.substr(g, 7);
if (g != d.length - 7) {
l = "1" + l
}
j += b(parseInt(l, 2))
}
return j
};
KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);
this.hT = "06";
this.setValueHex = function(d) {
this.hTLV = null;
this.isModified = true;
this.s = null;
this.hV = d
};
this.setValueOidString = function(f) {
if (!f.match(/^[0-9.]+$/)) {
throw "malformed oid string: " + f
}
var g = "";
var d = f.split(".");
var j = parseInt(d[0]) * 40 + parseInt(d[1]);
g += b(j);
d.splice(0, 2);
for (var e = 0; e < d.length; e++) {
g += a(d[e])
}
this.hTLV = null;
this.isModified = true;
this.s = null;
this.hV = g
};
this.setValueName = function(e) {
if (typeof KJUR.asn1.x509.OID.name2oidList[e] != "undefined") {
var d = KJUR.asn1.x509.OID.name2oidList[e];
this.setValueOidString(d)
} else {
throw "DERObjectIdentifier oidName undefined: " + e
}
};
this.getFreshValueHex = function() {
return this.hV
};
if (typeof c != "undefined") {
if (typeof c == "string" && c.match(/^[0-2].[0-9.]+$/)) {
this.setValueOidString(c)
} else {
if (KJUR.asn1.x509.OID.name2oidList[c] !== undefined) {
this.setValueOidString(KJUR.asn1.x509.OID.name2oidList[c])
} else {
if (typeof c.oid != "undefined") {
this.setValueOidString(c.oid)
} else {
if (typeof c.hex != "undefined") {
this.setValueHex(c.hex)
} else {
if (typeof c.name != "undefined") {
this.setValueName(c.name)
}
}
}
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);
KJUR.asn1.DERUTF8String = function(a) {
KJUR.asn1.DERUTF8String.superclass.constructor.call(this, a);
this.hT = "0c"
};
YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);
KJUR.asn1.DERNumericString = function(a) {
KJUR.asn1.DERNumericString.superclass.constructor.call(this, a);
this.hT = "12"
};
YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);
KJUR.asn1.DERPrintableString = function(a) {
KJUR.asn1.DERPrintableString.superclass.constructor.call(this, a);
this.hT = "13"
};
YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);
KJUR.asn1.DERTeletexString = function(a) {
KJUR.asn1.DERTeletexString.superclass.constructor.call(this, a);
this.hT = "14"
};
YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);
KJUR.asn1.DERIA5String = function(a) {
KJUR.asn1.DERIA5String.superclass.constructor.call(this, a);
this.hT = "16"
};
YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);
KJUR.asn1.DERUTCTime = function(a) {
KJUR.asn1.DERUTCTime.superclass.constructor.call(this, a);
this.hT = "17";
this.setByDate = function(b) {
this.hTLV = null;
this.isModified = true;
this.date = b;
this.s = this.formatDate(this.date, "utc");
this.hV = stohex(this.s)
};
this.getFreshValueHex = function() {
if (typeof this.date == "undefined" && typeof this.s == "undefined") {
this.date = new Date();
this.s = this.formatDate(this.date, "utc");
this.hV = stohex(this.s)
}
return this.hV
};
if (typeof a != "undefined") {
if (typeof a.str != "undefined") {
this.setString(a.str)
} else {
if (typeof a == "string" && a.match(/^[0-9]{12}Z$/)) {
this.setString(a)
} else {
if (typeof a.hex != "undefined") {
this.setStringHex(a.hex)
} else {
if (typeof a.date != "undefined") {
this.setByDate(a.date)
}
}
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);
KJUR.asn1.DERGeneralizedTime = function(a) {
KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, a);
this.hT = "18";
this.withMillis = false;
this.setByDate = function(b) {
this.hTLV = null;
this.isModified = true;
this.date = b;
this.s = this.formatDate(this.date, "gen", this.withMillis);
this.hV = stohex(this.s)
};
this.getFreshValueHex = function() {
if (typeof this.date == "undefined" && typeof this.s == "undefined") {
this.date = new Date();
this.s = this.formatDate(this.date, "gen", this.withMillis);
this.hV = stohex(this.s)
}
return this.hV
};
if (typeof a != "undefined") {
if (typeof a.str != "undefined") {
this.setString(a.str)
} else {
if (typeof a == "string" && a.match(/^[0-9]{14}Z$/)) {
this.setString(a)
} else {
if (typeof a.hex != "undefined") {
this.setStringHex(a.hex)
} else {
if (typeof a.date != "undefined") {
this.setByDate(a.date)
} else {
if (a.millis === true) {
this.withMillis = true
}
}
}
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);
KJUR.asn1.DERSequence = function(a) {
KJUR.asn1.DERSequence.superclass.constructor.call(this, a);
this.hT = "30";
this.getFreshValueHex = function() {
var c = "";
for (var b = 0; b < this.asn1Array.length; b++) {
var d = this.asn1Array[b];
c += d.getEncodedHex()
}
this.hV = c;
return this.hV
}
};
YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);
KJUR.asn1.DERSet = function(a) {
KJUR.asn1.DERSet.superclass.constructor.call(this, a);
this.hT = "31";
this.sortFlag = true;
this.getFreshValueHex = function() {
var b = new Array();
for (var c = 0; c < this.asn1Array.length; c++) {
var d = this.asn1Array[c];
b.push(d.getEncodedHex())
}
if (this.sortFlag == true) {
b.sort()
}
this.hV = b.join("");
return this.hV
};
if (typeof a != "undefined") {
if (typeof a.sortflag != "undefined" && a.sortflag == false) {
this.sortFlag = false
}
}
};
YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);
KJUR.asn1.DERTaggedObject = function(a) {
KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);
this.hT = "a0";
this.hV = "";
this.isExplicit = true;
this.asn1Object = null;
this.setASN1Object = function(b, c, d) {
this.hT = c;
this.isExplicit = b;
this.asn1Object = d;
if (this.isExplicit) {
this.hV = this.asn1Object.getEncodedHex();
this.hTLV = null;
this.isModified = true
} else {
this.hV = null;
this.hTLV = d.getEncodedHex();
this.hTLV = this.hTLV.replace(/^../, c);
this.isModified = false
}
};
this.getFreshValueHex = function() {
return this.hV
};
if (typeof a != "undefined") {
if (typeof a.tag != "undefined") {
this.hT = a.tag
}
if (typeof a.explicit != "undefined") {
this.isExplicit = a.explicit
}
if (typeof a.obj != "undefined") {
this.asn1Object = a.obj;
this.setASN1Object(this.isExplicit, this.hT, this.asn1Object)
}
}
};
YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);
/*! asn1hex-1.1.5.js (c) 2012-2014 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
var ASN1HEX = new function() {
this.getByteLengthOfL_AtObj = function(b, c) {
if (b.substring(c + 2, c + 3) != "8") {
return 1
}
var a = parseInt(b.substring(c + 3, c + 4));
if (a == 0) {
return -1
}
if (0 < a && a < 10) {
return a + 1
}
return -2
};
this.getHexOfL_AtObj = function(b, c) {
var a = this.getByteLengthOfL_AtObj(b, c);
if (a < 1) {
return ""
}
return b.substring(c + 2, c + 2 + a * 2)
};
this.getIntOfL_AtObj = function(c, d) {
var b = this.getHexOfL_AtObj(c, d);
if (b == "") {
return -1
}
var a;
if (parseInt(b.substring(0, 1)) < 8) {
a = new BigInteger(b, 16)
} else {
a = new BigInteger(b.substring(2), 16)
}
return a.intValue()
};
this.getStartPosOfV_AtObj = function(b, c) {
var a = this.getByteLengthOfL_AtObj(b, c);
if (a < 0) {
return a
}
return c + (a + 1) * 2
};
this.getHexOfV_AtObj = function(c, d) {
var b = this.getStartPosOfV_AtObj(c, d);
var a = this.getIntOfL_AtObj(c, d);
return c.substring(b, b + a * 2)
};
this.getHexOfTLV_AtObj = function(c, e) {
var b = c.substr(e, 2);
var d = this.getHexOfL_AtObj(c, e);
var a = this.getHexOfV_AtObj(c, e);
return b + d + a
};
this.getPosOfNextSibling_AtObj = function(c, d) {
var b = this.getStartPosOfV_AtObj(c, d);
var a = this.getIntOfL_AtObj(c, d);
return b + a * 2
};
this.getPosArrayOfChildren_AtObj = function(f, j) {
var c = new Array();
var i = this.getStartPosOfV_AtObj(f, j);
c.push(i);
var b = this.getIntOfL_AtObj(f, j);
var g = i;
var d = 0;
while (1) {
var e = this.getPosOfNextSibling_AtObj(f, g);
if (e == null || (e - i >= (b * 2))) {
break
}
if (d >= 200) {
break
}
c.push(e);
g = e;
d++
}
return c
};
this.getNthChildIndex_AtObj = function(d, b, e) {
var c = this.getPosArrayOfChildren_AtObj(d, b);
return c[e]
};
this.getDecendantIndexByNthList = function(e, d, c) {
if (c.length == 0) {
return d
}
var f = c.shift();
var b = this.getPosArrayOfChildren_AtObj(e, d);
return this.getDecendantIndexByNthList(e, b[f], c)
};
this.getDecendantHexTLVByNthList = function(d, c, b) {
var a = this.getDecendantIndexByNthList(d, c, b);
return this.getHexOfTLV_AtObj(d, a)
};
this.getDecendantHexVByNthList = function(d, c, b) {
var a = this.getDecendantIndexByNthList(d, c, b);
return this.getHexOfV_AtObj(d, a)
}
};
ASN1HEX.getVbyList = function(d, c, b, e) {
var a = this.getDecendantIndexByNthList(d, c, b);
if (a === undefined) {
throw "can't find nthList object"
}
if (e !== undefined) {
if (d.substr(a, 2) != e) {
throw "checking tag doesn't match: " + d.substr(a, 2) + "!=" + e
}
}
return this.getHexOfV_AtObj(d, a)
};
ASN1HEX.hextooidstr = function(e) {
var h = function(b, a) {
if (b.length >= a) {
return b
}
return new Array(a - b.length + 1).join("0") + b
};
var l = [];
var o = e.substr(0, 2);
var f = parseInt(o, 16);
l[0] = new String(Math.floor(f / 40));
l[1] = new String(f % 40);
var m = e.substr(2);
var k = [];
for (var g = 0; g < m.length / 2; g++) {
k.push(parseInt(m.substr(g * 2, 2), 16))
}
var j = [];
var d = "";
for (var g = 0; g < k.length; g++) {
if (k[g] & 128) {
d = d + h((k[g] & 127).toString(2), 7)
} else {
d = d + h((k[g] & 127).toString(2), 7);
j.push(new String(parseInt(d, 2)));
d = ""
}
}
var n = l.join(".");
if (j.length > 0) {
n = n + "." + j.join(".")
}
return n
};
/*! asn1x509-1.0.9.js (c) 2013-2014 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
if (typeof KJUR == "undefined" || !KJUR) {
KJUR = {}
}
if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
KJUR.asn1 = {}
}
if (typeof KJUR.asn1.x509 == "undefined" || !KJUR.asn1.x509) {
KJUR.asn1.x509 = {}
}
KJUR.asn1.x509.Certificate = function(g) {
KJUR.asn1.x509.Certificate.superclass.constructor.call(this);
var b = null;
var d = null;
var f = null;
var c = null;
var a = null;
var e = null;
this.setRsaPrvKeyByPEMandPass = function(i, k) {
var h = PKCS5PKEY.getDecryptedKeyHex(i, k);
var j = new RSAKey();
j.readPrivateKeyFromASN1HexString(h);
this.prvKey = j
};
this.sign = function() {
this.asn1SignatureAlg = this.asn1TBSCert.asn1SignatureAlg;
sig = new KJUR.crypto.Signature({
alg: "SHA1withRSA"
});
sig.init(this.prvKey);
sig.updateHex(this.asn1TBSCert.getEncodedHex());
this.hexSig = sig.sign();
this.asn1Sig = new KJUR.asn1.DERBitString({
hex: "00" + this.hexSig
});
var h = new KJUR.asn1.DERSequence({
array: [this.asn1TBSCert, this.asn1SignatureAlg, this.asn1Sig]
});
this.hTLV = h.getEncodedHex();
this.isModified = false
};
this.setSignatureHex = function(h) {
this.asn1SignatureAlg = this.asn1TBSCert.asn1SignatureAlg;
this.hexSig = h;
this.asn1Sig = new KJUR.asn1.DERBitString({
hex: "00" + this.hexSig
});
var i = new KJUR.asn1.DERSequence({
array: [this.asn1TBSCert, this.asn1SignatureAlg, this.asn1Sig]
});
this.hTLV = i.getEncodedHex();
this.isModified = false
};
this.getEncodedHex = function() {
if (this.isModified == false && this.hTLV != null) {
return this.hTLV
}
throw "not signed yet"
};
this.getPEMString = function() {
var j = this.getEncodedHex();
var h = CryptoJS.enc.Hex.parse(j);
var i = CryptoJS.enc.Base64.stringify(h);
var k = i.replace(/(.{64})/g, "$1\r\n");
return "-----BEGIN CERTIFICATE-----\r\n" + k + "\r\n-----END CERTIFICATE-----\r\n"
};
if (typeof g != "undefined") {
if (typeof g.tbscertobj != "undefined") {
this.asn1TBSCert = g.tbscertobj
}
if (typeof g.prvkeyobj != "undefined") {
this.prvKey = g.prvkeyobj
} else {
if (typeof g.rsaprvkey != "undefined") {
this.prvKey = g.rsaprvkey
} else {
if ((typeof g.rsaprvpem != "undefined") && (typeof g.rsaprvpas != "undefined")) {
this.setRsaPrvKeyByPEMandPass(g.rsaprvpem, g.rsaprvpas)
}
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.Certificate, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.TBSCertificate = function(a) {
KJUR.asn1.x509.TBSCertificate.superclass.constructor.call(this);
this._initialize = function() {
this.asn1Array = new Array();
this.asn1Version = new KJUR.asn1.DERTaggedObject({
obj: new KJUR.asn1.DERInteger({
"int": 2
})
});
this.asn1SerialNumber = null;
this.asn1SignatureAlg = null;
this.asn1Issuer = null;
this.asn1NotBefore = null;
this.asn1NotAfter = null;
this.asn1Subject = null;
this.asn1SubjPKey = null;
this.extensionsArray = new Array()
};
this.setSerialNumberByParam = function(b) {
this.asn1SerialNumber = new KJUR.asn1.DERInteger(b)
};
this.setSignatureAlgByParam = function(b) {
this.asn1SignatureAlg = new KJUR.asn1.x509.AlgorithmIdentifier(b)
};
this.setIssuerByParam = function(b) {
this.asn1Issuer = new KJUR.asn1.x509.X500Name(b)
};
this.setNotBeforeByParam = function(b) {
this.asn1NotBefore = new KJUR.asn1.x509.Time(b)
};
this.setNotAfterByParam = function(b) {
this.asn1NotAfter = new KJUR.asn1.x509.Time(b)
};
this.setSubjectByParam = function(b) {
this.asn1Subject = new KJUR.asn1.x509.X500Name(b)
};
this.setSubjectPublicKeyByParam = function(b) {
this.asn1SubjPKey = new KJUR.asn1.x509.SubjectPublicKeyInfo(b)
};
this.setSubjectPublicKeyByGetKey = function(c) {
var b = KEYUTIL.getKey(c);
this.asn1SubjPKey = new KJUR.asn1.x509.SubjectPublicKeyInfo(b)
};
this.appendExtension = function(b) {
this.extensionsArray.push(b)
};
this.appendExtensionByName = function(d, b) {
if (d.toLowerCase() == "basicconstraints") {
var c = new KJUR.asn1.x509.BasicConstraints(b);
this.appendExtension(c)
} else {
if (d.toLowerCase() == "keyusage") {
var c = new KJUR.asn1.x509.KeyUsage(b);
this.appendExtension(c)
} else {
if (d.toLowerCase() == "crldistributionpoints") {
var c = new KJUR.asn1.x509.CRLDistributionPoints(b);
this.appendExtension(c)
} else {
if (d.toLowerCase() == "extkeyusage") {
var c = new KJUR.asn1.x509.ExtKeyUsage(b);
this.appendExtension(c)
} else {
if (d.toLowerCase() == "authoritykeyidentifier") {
var c = new KJUR.asn1.x509.AuthorityKeyIdentifier(b);
this.appendExtension(c)
} else {
throw "unsupported extension name: " + d
}
}
}
}
}
};
this.getEncodedHex = function() {
if (this.asn1NotBefore == null || this.asn1NotAfter == null) {
throw "notBefore and/or notAfter not set"
}
var c = new KJUR.asn1.DERSequence({
array: [this.asn1NotBefore, this.asn1NotAfter]
});
this.asn1Array = new Array();
this.asn1Array.push(this.asn1Version);
this.asn1Array.push(this.asn1SerialNumber);
this.asn1Array.push(this.asn1SignatureAlg);
this.asn1Array.push(this.asn1Issuer);
this.asn1Array.push(c);
this.asn1Array.push(this.asn1Subject);
this.asn1Array.push(this.asn1SubjPKey);
if (this.extensionsArray.length > 0) {
var d = new KJUR.asn1.DERSequence({
array: this.extensionsArray
});
var b = new KJUR.asn1.DERTaggedObject({
explicit: true,
tag: "a3",
obj: d
});
this.asn1Array.push(b)
}
var e = new KJUR.asn1.DERSequence({
array: this.asn1Array
});
this.hTLV = e.getEncodedHex();
this.isModified = false;
return this.hTLV
};
this._initialize()
};
YAHOO.lang.extend(KJUR.asn1.x509.TBSCertificate, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.Extension = function(b) {
KJUR.asn1.x509.Extension.superclass.constructor.call(this);
var a = null;
this.getEncodedHex = function() {
var f = new KJUR.asn1.DERObjectIdentifier({
oid: this.oid
});
var e = new KJUR.asn1.DEROctetString({
hex: this.getExtnValueHex()
});
var d = new Array();
d.push(f);
if (this.critical) {
d.push(new KJUR.asn1.DERBoolean())
}
d.push(e);
var c = new KJUR.asn1.DERSequence({
array: d
});
return c.getEncodedHex()
};
this.critical = false;
if (typeof b != "undefined") {
if (typeof b.critical != "undefined") {
this.critical = b.critical
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.Extension, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.KeyUsage = function(a) {
KJUR.asn1.x509.KeyUsage.superclass.constructor.call(this, a);
this.getExtnValueHex = function() {
return this.asn1ExtnValue.getEncodedHex()
};
this.oid = "2.5.29.15";
if (typeof a != "undefined") {
if (typeof a.bin != "undefined") {
this.asn1ExtnValue = new KJUR.asn1.DERBitString(a)
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.KeyUsage, KJUR.asn1.x509.Extension);
KJUR.asn1.x509.BasicConstraints = function(c) {
KJUR.asn1.x509.BasicConstraints.superclass.constructor.call(this, c);
var a = false;
var b = -1;
this.getExtnValueHex = function() {
var e = new Array();
if (this.cA) {
e.push(new KJUR.asn1.DERBoolean())
}
if (this.pathLen > -1) {
e.push(new KJUR.asn1.DERInteger({
"int": this.pathLen
}))
}
var d = new KJUR.asn1.DERSequence({
array: e
});
this.asn1ExtnValue = d;
return this.asn1ExtnValue.getEncodedHex()
};
this.oid = "2.5.29.19";
this.cA = false;
this.pathLen = -1;
if (typeof c != "undefined") {
if (typeof c.cA != "undefined") {
this.cA = c.cA
}
if (typeof c.pathLen != "undefined") {
this.pathLen = c.pathLen
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.BasicConstraints, KJUR.asn1.x509.Extension);
KJUR.asn1.x509.CRLDistributionPoints = function(a) {
KJUR.asn1.x509.CRLDistributionPoints.superclass.constructor.call(this, a);
this.getExtnValueHex = function() {
return this.asn1ExtnValue.getEncodedHex()
};
this.setByDPArray = function(b) {
this.asn1ExtnValue = new KJUR.asn1.DERSequence({
array: b
})
};
this.setByOneURI = function(e) {
var b = new KJUR.asn1.x509.GeneralNames([{
uri: e
}]);
var d = new KJUR.asn1.x509.DistributionPointName(b);
var c = new KJUR.asn1.x509.DistributionPoint({
dpobj: d
});
this.setByDPArray([c])
};
this.oid = "2.5.29.31";
if (typeof a != "undefined") {
if (typeof a.array != "undefined") {
this.setByDPArray(a.array)
} else {
if (typeof a.uri != "undefined") {
this.setByOneURI(a.uri)
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.CRLDistributionPoints, KJUR.asn1.x509.Extension);
KJUR.asn1.x509.ExtKeyUsage = function(a) {
KJUR.asn1.x509.ExtKeyUsage.superclass.constructor.call(this, a);
this.setPurposeArray = function(b) {
this.asn1ExtnValue = new KJUR.asn1.DERSequence();
for (var c = 0; c < b.length; c++) {
var d = new KJUR.asn1.DERObjectIdentifier(b[c]);
this.asn1ExtnValue.appendASN1Object(d)
}
};
this.getExtnValueHex = function() {
return this.asn1ExtnValue.getEncodedHex()
};
this.oid = "2.5.29.37";
if (typeof a != "undefined") {
if (typeof a.array != "undefined") {
this.setPurposeArray(a.array)
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.ExtKeyUsage, KJUR.asn1.x509.Extension);
KJUR.asn1.x509.AuthorityKeyIdentifier = function(a) {
KJUR.asn1.x509.AuthorityKeyIdentifier.superclass.constructor.call(this, a);
this.asn1KID = null;
this.asn1CertIssuer = null;
this.asn1CertSN = null;
this.getExtnValueHex = function() {
var c = new Array();
if (this.asn1KID) {
c.push(new KJUR.asn1.DERTaggedObject({
explicit: false,
tag: "80",
obj: this.asn1KID
}))
}
if (this.asn1CertIssuer) {
c.push(new KJUR.asn1.DERTaggedObject({
explicit: false,
tag: "a1",
obj: this.asn1CertIssuer
}))
}
if (this.asn1CertSN) {
c.push(new KJUR.asn1.DERTaggedObject({
explicit: false,
tag: "82",
obj: this.asn1CertSN
}))
}
var b = new KJUR.asn1.DERSequence({
array: c
});
this.asn1ExtnValue = b;
return this.asn1ExtnValue.getEncodedHex()
};
this.setKIDByParam = function(b) {
this.asn1KID = new KJUR.asn1.DEROctetString(b)
};
this.setCertIssuerByParam = function(b) {
this.asn1CertIssuer = new KJUR.asn1.x509.X500Name(b)
};
this.setCertSNByParam = function(b) {
this.asn1CertSN = new KJUR.asn1.DERInteger(b)
};
this.oid = "2.5.29.35";
if (typeof a != "undefined") {
if (typeof a.kid != "undefined") {
this.setKIDByParam(a.kid)
}
if (typeof a.issuer != "undefined") {
this.setCertIssuerByParam(a.issuer)
}
if (typeof a.sn != "undefined") {
this.setCertSNByParam(a.sn)
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.AuthorityKeyIdentifier, KJUR.asn1.x509.Extension);
KJUR.asn1.x509.CRL = function(f) {
KJUR.asn1.x509.CRL.superclass.constructor.call(this);
var a = null;
var c = null;
var e = null;
var b = null;
var d = null;
this.setRsaPrvKeyByPEMandPass = function(h, j) {
var g = PKCS5PKEY.getDecryptedKeyHex(h, j);
var i = new RSAKey();
i.readPrivateKeyFromASN1HexString(g);
this.rsaPrvKey = i
};
this.sign = function() {
this.asn1SignatureAlg = this.asn1TBSCertList.asn1SignatureAlg;
sig = new KJUR.crypto.Signature({
alg: "SHA1withRSA",
prov: "cryptojs/jsrsa"
});
sig.initSign(this.rsaPrvKey);
sig.updateHex(this.asn1TBSCertList.getEncodedHex());
this.hexSig = sig.sign();
this.asn1Sig = new KJUR.asn1.DERBitString({
hex: "00" + this.hexSig
});
var g = new KJUR.asn1.DERSequence({
array: [this.asn1TBSCertList, this.asn1SignatureAlg, this.asn1Sig]
});
this.hTLV = g.getEncodedHex();
this.isModified = false
};
this.getEncodedHex = function() {
if (this.isModified == false && this.hTLV != null) {
return this.hTLV
}
throw "not signed yet"
};
this.getPEMString = function() {
var i = this.getEncodedHex();
var g = CryptoJS.enc.Hex.parse(i);
var h = CryptoJS.enc.Base64.stringify(g);
var j = h.replace(/(.{64})/g, "$1\r\n");
return "-----BEGIN X509 CRL-----\r\n" + j + "\r\n-----END X509 CRL-----\r\n"
};
if (typeof f != "undefined") {
if (typeof f.tbsobj != "undefined") {
this.asn1TBSCertList = f.tbsobj
}
if (typeof f.rsaprvkey != "undefined") {
this.rsaPrvKey = f.rsaprvkey
}
if ((typeof f.rsaprvpem != "undefined") && (typeof f.rsaprvpas != "undefined")) {
this.setRsaPrvKeyByPEMandPass(f.rsaprvpem, f.rsaprvpas)
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.CRL, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.TBSCertList = function(b) {
KJUR.asn1.x509.TBSCertList.superclass.constructor.call(this);
var a = null;
this.setSignatureAlgByParam = function(c) {
this.asn1SignatureAlg = new KJUR.asn1.x509.AlgorithmIdentifier(c)
};
this.setIssuerByParam = function(c) {
this.asn1Issuer = new KJUR.asn1.x509.X500Name(c)
};
this.setThisUpdateByParam = function(c) {
this.asn1ThisUpdate = new KJUR.asn1.x509.Time(c)
};
this.setNextUpdateByParam = function(c) {
this.asn1NextUpdate = new KJUR.asn1.x509.Time(c)
};
this.addRevokedCert = function(c, d) {
var f = {};
if (c != undefined && c != null) {
f.sn = c
}
if (d != undefined && d != null) {
f.time = d
}
var e = new KJUR.asn1.x509.CRLEntry(f);
this.aRevokedCert.push(e)
};
this.getEncodedHex = function() {
this.asn1Array = new Array();
if (this.asn1Version != null) {
this.asn1Array.push(this.asn1Version)
}
this.asn1Array.push(this.asn1SignatureAlg);
this.asn1Array.push(this.asn1Issuer);
this.asn1Array.push(this.asn1ThisUpdate);
if (this.asn1NextUpdate != null) {
this.asn1Array.push(this.asn1NextUpdate)
}
if (this.aRevokedCert.length > 0) {
var c = new KJUR.asn1.DERSequence({
array: this.aRevokedCert
});
this.asn1Array.push(c)
}
var d = new KJUR.asn1.DERSequence({
array: this.asn1Array
});
this.hTLV = d.getEncodedHex();
this.isModified = false;
return this.hTLV
};
this._initialize = function() {
this.asn1Version = null;
this.asn1SignatureAlg = null;
this.asn1Issuer = null;
this.asn1ThisUpdate = null;
this.asn1NextUpdate = null;
this.aRevokedCert = new Array()
};
this._initialize()
};
YAHOO.lang.extend(KJUR.asn1.x509.TBSCertList, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.CRLEntry = function(c) {
KJUR.asn1.x509.CRLEntry.superclass.constructor.call(this);
var b = null;
var a = null;
this.setCertSerial = function(d) {
this.sn = new KJUR.asn1.DERInteger(d)
};
this.setRevocationDate = function(d) {
this.time = new KJUR.asn1.x509.Time(d)
};
this.getEncodedHex = function() {
var d = new KJUR.asn1.DERSequence({
array: [this.sn, this.time]
});
this.TLV = d.getEncodedHex();
return this.TLV
};
if (typeof c != "undefined") {
if (typeof c.time != "undefined") {
this.setRevocationDate(c.time)
}
if (typeof c.sn != "undefined") {
this.setCertSerial(c.sn)
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.CRLEntry, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.X500Name = function(b) {
KJUR.asn1.x509.X500Name.superclass.constructor.call(this);
this.asn1Array = new Array();
this.setByString = function(c) {
var d = c.split("/");
d.shift();
for (var e = 0; e < d.length; e++) {
this.asn1Array.push(new KJUR.asn1.x509.RDN({
str: d[e]
}))
}
};
this.getEncodedHex = function() {
if (typeof this.hTLV == "string") {
return this.hTLV
}
var c = new KJUR.asn1.DERSequence({
array: this.asn1Array
});
this.hTLV = c.getEncodedHex();
return this.hTLV
};
if (typeof b != "undefined") {
if (typeof b.str != "undefined") {
this.setByString(b.str)
}
if (typeof b.certissuer != "undefined") {
var a = new X509();
a.hex = X509.pemToHex(b.certissuer);
this.hTLV = a.getIssuerHex()
}
if (typeof b.certsubject != "undefined") {
var a = new X509();
a.hex = X509.pemToHex(b.certsubject);
this.hTLV = a.getSubjectHex()
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.X500Name, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.RDN = function(a) {
KJUR.asn1.x509.RDN.superclass.constructor.call(this);
this.asn1Array = new Array();
this.addByString = function(b) {
this.asn1Array.push(new KJUR.asn1.x509.AttributeTypeAndValue({
str: b
}))
};
this.getEncodedHex = function() {
var b = new KJUR.asn1.DERSet({
array: this.asn1Array
});
this.TLV = b.getEncodedHex();
return this.TLV
};
if (typeof a != "undefined") {
if (typeof a.str != "undefined") {
this.addByString(a.str)
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.RDN, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.AttributeTypeAndValue = function(b) {
KJUR.asn1.x509.AttributeTypeAndValue.superclass.constructor.call(this);
var d = null;
var c = null;
var a = "utf8";
this.setByString = function(e) {
if (e.match(/^([^=]+)=(.+)$/)) {
this.setByAttrTypeAndValueStr(RegExp.$1, RegExp.$2)
} else {
throw "malformed attrTypeAndValueStr: " + e
}
};
this.setByAttrTypeAndValueStr = function(g, f) {
this.typeObj = KJUR.asn1.x509.OID.atype2obj(g);
var e = a;
if (g == "C") {
e = "prn"
}
this.valueObj = this.getValueObj(e, f)
};
this.getValueObj = function(f, e) {
if (f == "utf8") {
return new KJUR.asn1.DERUTF8String({
str: e
})
}
if (f == "prn") {
return new KJUR.asn1.DERPrintableString({
str: e
})
}
if (f == "tel") {
return new KJUR.asn1.DERTeletexString({
str: e
})
}
if (f == "ia5") {
return new KJUR.asn1.DERIA5String({
str: e
})
}
throw "unsupported directory string type: type=" + f + " value=" + e
};
this.getEncodedHex = function() {
var e = new KJUR.asn1.DERSequence({
array: [this.typeObj, this.valueObj]
});
this.TLV = e.getEncodedHex();
return this.TLV
};
if (typeof b != "undefined") {
if (typeof b.str != "undefined") {
this.setByString(b.str)
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.AttributeTypeAndValue, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.SubjectPublicKeyInfo = function(d) {
KJUR.asn1.x509.SubjectPublicKeyInfo.superclass.constructor.call(this);
var b = null;
var c = null;
var a = null;
this.setRSAKey = function(e) {
if (!RSAKey.prototype.isPrototypeOf(e)) {
throw "argument is not RSAKey instance"
}
this.rsaKey = e;
var g = new KJUR.asn1.DERInteger({
bigint: e.n
});
var f = new KJUR.asn1.DERInteger({
"int": e.e
});
var i = new KJUR.asn1.DERSequence({
array: [g, f]
});
var h = i.getEncodedHex();
this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({
name: "rsaEncryption"
});
this.asn1SubjPKey = new KJUR.asn1.DERBitString({
hex: "00" + h
})
};
this.setRSAPEM = function(g) {
if (g.match(/-----BEGIN PUBLIC KEY-----/)) {
var n = g;
n = n.replace(/^-----[^-]+-----/, "");
n = n.replace(/-----[^-]+-----\s*$/, "");
var m = n.replace(/\s+/g, "");
var f = CryptoJS.enc.Base64.parse(m);
var i = CryptoJS.enc.Hex.stringify(f);
var k = _rsapem_getHexValueArrayOfChildrenFromHex(i);
var h = k[1];
var l = h.substr(2);
var e = _rsapem_getHexValueArrayOfChildrenFromHex(l);
var j = new RSAKey();
j.setPublic(e[0], e[1]);
this.setRSAKey(j)
} else {
throw "key not supported"
}
};
this.getASN1Object = function() {
if (this.asn1AlgId == null || this.asn1SubjPKey == null) {
throw "algId and/or subjPubKey not set"
}
var e = new KJUR.asn1.DERSequence({
array: [this.asn1AlgId, this.asn1SubjPKey]
});
return e
};
this.getEncodedHex = function() {
var e = this.getASN1Object();
this.hTLV = e.getEncodedHex();
return this.hTLV
};
this._setRSAKey = function(e) {
var g = KJUR.asn1.ASN1Util.newObject({
seq: [{
"int": {
bigint: e.n
}
}, {
"int": {
"int": e.e
}
}]
});
var f = g.getEncodedHex();
this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({
name: "rsaEncryption"
});
this.asn1SubjPKey = new KJUR.asn1.DERBitString({
hex: "00" + f
})
};
this._setEC = function(e) {
var f = new KJUR.asn1.DERObjectIdentifier({
name: e.curveName
});
this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({
name: "ecPublicKey",
asn1params: f
});
this.asn1SubjPKey = new KJUR.asn1.DERBitString({
hex: "00" + e.pubKeyHex
})
};
this._setDSA = function(e) {
var f = new KJUR.asn1.ASN1Util.newObject({
seq: [{
"int": {
bigint: e.p
}
}, {
"int": {
bigint: e.q
}
}, {
"int": {
bigint: e.g
}
}]
});
this.asn1AlgId = new KJUR.asn1.x509.AlgorithmIdentifier({
name: "dsa",
asn1params: f
});
var g = new KJUR.asn1.DERInteger({
bigint: e.y
});
this.asn1SubjPKey = new KJUR.asn1.DERBitString({
hex: "00" + g.getEncodedHex()
})
};
if (typeof d != "undefined") {
if (typeof RSAKey != "undefined" && d instanceof RSAKey) {
this._setRSAKey(d)
} else {
if (typeof KJUR.crypto.ECDSA != "undefined" && d instanceof KJUR.crypto.ECDSA) {
this._setEC(d)
} else {
if (typeof KJUR.crypto.DSA != "undefined" && d instanceof KJUR.crypto.DSA) {
this._setDSA(d)
} else {
if (typeof d.rsakey != "undefined") {
this.setRSAKey(d.rsakey)
} else {
if (typeof d.rsapem != "undefined") {
this.setRSAPEM(d.rsapem)
}
}
}
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.SubjectPublicKeyInfo, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.Time = function(c) {
KJUR.asn1.x509.Time.superclass.constructor.call(this);
var b = null;
var a = null;
this.setTimeParams = function(d) {
this.timeParams = d
};
this.getEncodedHex = function() {
var d = null;
if (this.timeParams != null) {
if (this.type == "utc") {
d = new KJUR.asn1.DERUTCTime(this.timeParams)
} else {
d = new KJUR.asn1.DERGeneralizedTime(this.timeParams)
}
} else {
if (this.type == "utc") {
d = new KJUR.asn1.DERUTCTime()
} else {
d = new KJUR.asn1.DERGeneralizedTime()
}
}
this.TLV = d.getEncodedHex();
return this.TLV
};
this.type = "utc";
if (typeof c != "undefined") {
if (typeof c.type != "undefined") {
this.type = c.type
} else {
if (typeof c.str != "undefined") {
if (c.str.match(/^[0-9]{12}Z$/)) {
this.type = "utc"
}
if (c.str.match(/^[0-9]{14}Z$/)) {
this.type = "gen"
}
}
}
this.timeParams = c
}
};
YAHOO.lang.extend(KJUR.asn1.x509.Time, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.AlgorithmIdentifier = function(e) {
KJUR.asn1.x509.AlgorithmIdentifier.superclass.constructor.call(this);
var a = null;
var d = null;
var b = null;
var c = false;
this.getEncodedHex = function() {
if (this.nameAlg == null && this.asn1Alg == null) {
throw "algorithm not specified"
}
if (this.nameAlg != null && this.asn1Alg == null) {
this.asn1Alg = KJUR.asn1.x509.OID.name2obj(this.nameAlg)
}
var f = [this.asn1Alg];
if (!this.paramEmpty) {
f.push(this.asn1Params)
}
var g = new KJUR.asn1.DERSequence({
array: f
});
this.hTLV = g.getEncodedHex();
return this.hTLV
};
if (typeof e != "undefined") {
if (typeof e.name != "undefined") {
this.nameAlg = e.name
}
if (typeof e.asn1params != "undefined") {
this.asn1Params = e.asn1params
}
if (typeof e.paramempty != "undefined") {
this.paramEmpty = e.paramempty
}
}
if (this.asn1Params == null) {
this.asn1Params = new KJUR.asn1.DERNull()
}
};
YAHOO.lang.extend(KJUR.asn1.x509.AlgorithmIdentifier, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.GeneralName = function(d) {
KJUR.asn1.x509.GeneralName.superclass.constructor.call(this);
var c = null;
var b = null;
var a = {
rfc822: "81",
dns: "82",
uri: "86"
};
this.setByParam = function(g) {
var f = null;
var e = null;
if (typeof g.rfc822 != "undefined") {
this.type = "rfc822";
e = new KJUR.asn1.DERIA5String({
str: g[this.type]
})
}
if (typeof g.dns != "undefined") {
this.type = "dns";
e = new KJUR.asn1.DERIA5String({
str: g[this.type]
})
}
if (typeof g.uri != "undefined") {
this.type = "uri";
e = new KJUR.asn1.DERIA5String({
str: g[this.type]
})
}
if (this.type == null) {
throw "unsupported type in params=" + g
}
this.asn1Obj = new KJUR.asn1.DERTaggedObject({
explicit: false,
tag: a[this.type],
obj: e
})
};
this.getEncodedHex = function() {
return this.asn1Obj.getEncodedHex()
};
if (typeof d != "undefined") {
this.setByParam(d)
}
};
YAHOO.lang.extend(KJUR.asn1.x509.GeneralName, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.GeneralNames = function(b) {
KJUR.asn1.x509.GeneralNames.superclass.constructor.call(this);
var a = null;
this.setByParamArray = function(e) {
for (var c = 0; c < e.length; c++) {
var d = new KJUR.asn1.x509.GeneralName(e[c]);
this.asn1Array.push(d)
}
};
this.getEncodedHex = function() {
var c = new KJUR.asn1.DERSequence({
array: this.asn1Array
});
return c.getEncodedHex()
};
this.asn1Array = new Array();
if (typeof b != "undefined") {
this.setByParamArray(b)
}
};
YAHOO.lang.extend(KJUR.asn1.x509.GeneralNames, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.DistributionPointName = function(b) {
KJUR.asn1.x509.DistributionPointName.superclass.constructor.call(this);
var e = null;
var c = null;
var a = null;
var d = null;
this.getEncodedHex = function() {
if (this.type != "full") {
throw "currently type shall be 'full': " + this.type
}
this.asn1Obj = new KJUR.asn1.DERTaggedObject({
explicit: false,
tag: this.tag,
obj: this.asn1V
});
this.hTLV = this.asn1Obj.getEncodedHex();
return this.hTLV
};
if (typeof b != "undefined") {
if (KJUR.asn1.x509.GeneralNames.prototype.isPrototypeOf(b)) {
this.type = "full";
this.tag = "a0";
this.asn1V = b
} else {
throw "This class supports GeneralNames only as argument"
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.DistributionPointName, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.DistributionPoint = function(b) {
KJUR.asn1.x509.DistributionPoint.superclass.constructor.call(this);
var a = null;
this.getEncodedHex = function() {
var c = new KJUR.asn1.DERSequence();
if (this.asn1DP != null) {
var d = new KJUR.asn1.DERTaggedObject({
explicit: true,
tag: "a0",
obj: this.asn1DP
});
c.appendASN1Object(d)
}
this.hTLV = c.getEncodedHex();
return this.hTLV
};
if (typeof b != "undefined") {
if (typeof b.dpobj != "undefined") {
this.asn1DP = b.dpobj
}
}
};
YAHOO.lang.extend(KJUR.asn1.x509.DistributionPoint, KJUR.asn1.ASN1Object);
KJUR.asn1.x509.OID = new function(a) {
this.atype2oidList = {
C: "2.5.4.6",
O: "2.5.4.10",
OU: "2.5.4.11",
ST: "2.5.4.8",
L: "2.5.4.7",
CN: "2.5.4.3",
DN: "2.5.4.49",
DC: "0.9.2342.19200300.100.1.25"
};
this.name2oidList = {
sha1: "1.3.14.3.2.26",
sha256: "2.16.840.1.101.3.4.2.1",
sha384: "2.16.840.1.101.3.4.2.2",
sha512: "2.16.840.1.101.3.4.2.3",
sha224: "2.16.840.1.101.3.4.2.4",
md5: "1.2.840.113549.2.5",
md2: "1.3.14.7.2.2.1",
ripemd160: "1.3.36.3.2.1",
MD2withRSA: "1.2.840.113549.1.1.2",
MD4withRSA: "1.2.840.113549.1.1.3",
MD5withRSA: "1.2.840.113549.1.1.4",
SHA1withRSA: "1.2.840.113549.1.1.5",
SHA224withRSA: "1.2.840.113549.1.1.14",
SHA256withRSA: "1.2.840.113549.1.1.11",
SHA384withRSA: "1.2.840.113549.1.1.12",
SHA512withRSA: "1.2.840.113549.1.1.13",
SHA1withECDSA: "1.2.840.10045.4.1",
SHA224withECDSA: "1.2.840.10045.4.3.1",
SHA256withECDSA: "1.2.840.10045.4.3.2",
SHA384withECDSA: "1.2.840.10045.4.3.3",
SHA512withECDSA: "1.2.840.10045.4.3.4",
dsa: "1.2.840.10040.4.1",
SHA1withDSA: "1.2.840.10040.4.3",
SHA224withDSA: "2.16.840.1.101.3.4.3.1",
SHA256withDSA: "2.16.840.1.101.3.4.3.2",
rsaEncryption: "1.2.840.113549.1.1.1",
subjectKeyIdentifier: "2.5.29.14",
countryName: "2.5.4.6",
organization: "2.5.4.10",
organizationalUnit: "2.5.4.11",
stateOrProvinceName: "2.5.4.8",
locality: "2.5.4.7",
commonName: "2.5.4.3",
keyUsage: "2.5.29.15",
basicConstraints: "2.5.29.19",
cRLDistributionPoints: "2.5.29.31",
certificatePolicies: "2.5.29.32",
authorityKeyIdentifier: "2.5.29.35",
extKeyUsage: "2.5.29.37",
anyExtendedKeyUsage: "2.5.29.37.0",
serverAuth: "1.3.6.1.5.5.7.3.1",
clientAuth: "1.3.6.1.5.5.7.3.2",
codeSigning: "1.3.6.1.5.5.7.3.3",
emailProtection: "1.3.6.1.5.5.7.3.4",
timeStamping: "1.3.6.1.5.5.7.3.8",
ocspSigning: "1.3.6.1.5.5.7.3.9",
ecPublicKey: "1.2.840.10045.2.1",
secp256r1: "1.2.840.10045.3.1.7",
secp256k1: "1.3.132.0.10",
secp384r1: "1.3.132.0.34",
pkcs5PBES2: "1.2.840.113549.1.5.13",
pkcs5PBKDF2: "1.2.840.113549.1.5.12",
"des-EDE3-CBC": "1.2.840.113549.3.7",
data: "1.2.840.113549.1.7.1",
"signed-data": "1.2.840.113549.1.7.2",
"enveloped-data": "1.2.840.113549.1.7.3",
"digested-data": "1.2.840.113549.1.7.5",
"encrypted-data": "1.2.840.113549.1.7.6",
"authenticated-data": "1.2.840.113549.1.9.16.1.2",
tstinfo: "1.2.840.113549.1.9.16.1.4"
};
this.objCache = {};
this.name2obj = function(b) {
if (typeof this.objCache[b] != "undefined") {
return this.objCache[b]
}
if (typeof this.name2oidList[b] == "undefined") {
throw "Name of ObjectIdentifier not defined: " + b
}
var c = this.name2oidList[b];
var d = new KJUR.asn1.DERObjectIdentifier({
oid: c
});
this.objCache[b] = d;
return d
};
this.atype2obj = function(b) {
if (typeof this.objCache[b] != "undefined") {
return this.objCache[b]
}
if (typeof this.atype2oidList[b] == "undefined") {
throw "AttributeType name undefined: " + b
}
var c = this.atype2oidList[b];
var d = new KJUR.asn1.DERObjectIdentifier({
oid: c
});
this.objCache[b] = d;
return d
}
};
KJUR.asn1.x509.OID.oid2name = function(b) {
var c = KJUR.asn1.x509.OID.name2oidList;
for (var a in c) {
if (c[a] == b) {
return a
}
}
return ""
};
KJUR.asn1.x509.X509Util = new function() {
this.getPKCS8PubKeyPEMfromRSAKey = function(i) {
var h = null;
var f = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(i.n);
var j = KJUR.asn1.ASN1Util.integerToByteHex(i.e);
var a = new KJUR.asn1.DERInteger({
hex: f
});
var g = new KJUR.asn1.DERInteger({
hex: j
});
var l = new KJUR.asn1.DERSequence({
array: [a, g]
});
var c = l.getEncodedHex();
var d = new KJUR.asn1.x509.AlgorithmIdentifier({
name: "rsaEncryption"
});
var b = new KJUR.asn1.DERBitString({
hex: "00" + c
});
var k = new KJUR.asn1.DERSequence({
array: [d, b]
});
var e = k.getEncodedHex();
var h = KJUR.asn1.ASN1Util.getPEMStringFromHex(e, "PUBLIC KEY");
return h
}
};
KJUR.asn1.x509.X509Util.newCertPEM = function(f) {
var c = KJUR.asn1.x509;
var e = new c.TBSCertificate();
if (f.serial !== undefined) {
e.setSerialNumberByParam(f.serial)
} else {
throw "serial number undefined."
}
if (typeof f.sigalg.name == "string") {
e.setSignatureAlgByParam(f.sigalg)
} else {
throw "unproper signature algorithm name"
}
if (f.issuer !== undefined) {
e.setIssuerByParam(f.issuer)
} else {
throw "issuer name undefined."
}
if (f.notbefore !== undefined) {
e.setNotBeforeByParam(f.notbefore)
} else {
throw "notbefore undefined."
}
if (f.notafter !== undefined) {
e.setNotAfterByParam(f.notafter)
} else {
throw "notafter undefined."
}
if (f.subject !== undefined) {
e.setSubjectByParam(f.subject)
} else {
throw "subject name undefined."
}
if (f.sbjpubkey !== undefined) {
e.setSubjectPublicKeyByGetKey(f.sbjpubkey)
} else {
throw "subject public key undefined."
}
if (f.ext !== undefined && f.ext.length !== undefined) {
for (var b = 0; b < f.ext.length; b++) {
for (key in f.ext[b]) {
e.appendExtensionByName(key, f.ext[b][key])
}
}
}
if (f.cakey === undefined && f.sighex === undefined) {
throw "param cakey and sighex undefined."
}
var d = null;
var a = null;
if (f.cakey) {
d = KEYUTIL.getKey.apply(null, f.cakey);
a = new c.Certificate({
tbscertobj: e,
prvkeyobj: d
});
a.sign()
}
if (f.sighex) {
a = new c.Certificate({
tbscertobj: e
});
a.setSignatureHex(f.sighex)
}
return a.getPEMString()
};
/*! asn1cms-1.0.2.js (c) 2013-2014 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
if (typeof KJUR == "undefined" || !KJUR) {
KJUR = {}
}
if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
KJUR.asn1 = {}
}
if (typeof KJUR.asn1.cms == "undefined" || !KJUR.asn1.cms) {
KJUR.asn1.cms = {}
}
KJUR.asn1.cms.Attribute = function(b) {
KJUR.asn1.cms.Attribute.superclass.constructor.call(this);
var a = [];
this.getEncodedHex = function() {
var f, e, c;
f = new KJUR.asn1.DERObjectIdentifier({
oid: this.attrTypeOid
});
e = new KJUR.asn1.DERSet({
array: this.valueList
});
try {
e.getEncodedHex()
} catch (d) {
throw "fail valueSet.getEncodedHex in Attribute(1)/" + d
}
c = new KJUR.asn1.DERSequence({
array: [f, e]
});
try {
this.hTLV = c.getEncodedHex()
} catch (d) {
throw "failed seq.getEncodedHex in Attribute(2)/" + d
}
return this.hTLV
}
};
YAHOO.lang.extend(KJUR.asn1.cms.Attribute, KJUR.asn1.ASN1Object);
KJUR.asn1.cms.ContentType = function(b) {
KJUR.asn1.cms.ContentType.superclass.constructor.call(this);
this.attrTypeOid = "1.2.840.113549.1.9.3";
var a = null;
if (typeof b != "undefined") {
var a = new KJUR.asn1.DERObjectIdentifier(b);
this.valueList = [a]
}
};
YAHOO.lang.extend(KJUR.asn1.cms.ContentType, KJUR.asn1.cms.Attribute);
KJUR.asn1.cms.MessageDigest = function(e) {
KJUR.asn1.cms.MessageDigest.superclass.constructor.call(this);
this.attrTypeOid = "1.2.840.113549.1.9.4";
if (typeof e != "undefined") {
if (e.eciObj instanceof KJUR.asn1.cms.EncapsulatedContentInfo && typeof e.hashAlg == "string") {
var b = e.eciObj.eContentValueHex;
var a = e.hashAlg;
var c = KJUR.crypto.Util.hashHex(b, a);
var d = new KJUR.asn1.DEROctetString({
hex: c
});
d.getEncodedHex();
this.valueList = [d]
} else {
var d = new KJUR.asn1.DEROctetString(e);
d.getEncodedHex();
this.valueList = [d]
}
}
};
YAHOO.lang.extend(KJUR.asn1.cms.MessageDigest, KJUR.asn1.cms.Attribute);
KJUR.asn1.cms.SigningTime = function(c) {
KJUR.asn1.cms.SigningTime.superclass.constructor.call(this);
this.attrTypeOid = "1.2.840.113549.1.9.5";
if (typeof c != "undefined") {
var a = new KJUR.asn1.x509.Time(c);
try {
a.getEncodedHex()
} catch (b) {
throw "SigningTime.getEncodedHex() failed/" + b
}
this.valueList = [a]
}
};
YAHOO.lang.extend(KJUR.asn1.cms.SigningTime, KJUR.asn1.cms.Attribute);
KJUR.asn1.cms.SigningCertificate = function(d) {
KJUR.asn1.cms.SigningCertificate.superclass.constructor.call(this);
this.attrTypeOid = "1.2.840.113549.1.9.16.2.12";
var a = KJUR.asn1;
var c = KJUR.asn1.cms;
var b = KJUR.crypto;
this.setCerts = function(l) {
var j = [];
for (var h = 0; h < l.length; h++) {
var f = KEYUTIL.getHexFromPEM(l[h]);
var e = b.Util.hashHex(f, "sha1");
var m = new a.DEROctetString({
hex: e
});
m.getEncodedHex();
var k = new c.IssuerAndSerialNumber({
cert: l[h]
});
k.getEncodedHex();
var n = new a.DERSequence({
array: [m, k]
});
n.getEncodedHex();
j.push(n)
}
var g = new a.DERSequence({
array: j
});
g.getEncodedHex();
this.valueList = [g]
};
if (typeof d != "undefined") {
if (typeof d.array == "object") {
this.setCerts(d.array)
}
}
};
YAHOO.lang.extend(KJUR.asn1.cms.SigningCertificate, KJUR.asn1.cms.Attribute);
KJUR.asn1.cms.SigningCertificateV2 = function(e) {
KJUR.asn1.cms.SigningCertificateV2.superclass.constructor.call(this);
this.attrTypeOid = "1.2.840.113549.1.9.16.2.47";
var b = KJUR.asn1;
var f = KJUR.asn1.x509;
var d = KJUR.asn1.cms;
var c = KJUR.crypto;
this.setCerts = function(p, h) {
var n = [];
for (var l = 0; l < p.length; l++) {
var j = KEYUTIL.getHexFromPEM(p[l]);
var r = [];
if (h != "sha256") {
r.push(new f.AlgorithmIdentifier({
name: h
}))
}
var g = c.Util.hashHex(j, h);
var q = new b.DEROctetString({
hex: g
});
q.getEncodedHex();
r.push(q);
var m = new d.IssuerAndSerialNumber({
cert: p[l]
});
m.getEncodedHex();
r.push(m);
var o = new b.DERSequence({
array: r
});
o.getEncodedHex();
n.push(o)
}
var k = new b.DERSequence({
array: n
});
k.getEncodedHex();
this.valueList = [k]
};
if (typeof e != "undefined") {
if (typeof e.array == "object") {
var a = "sha256";
if (typeof e.hashAlg == "string") {
a = e.hashAlg
}
this.setCerts(e.array, a)
}
}
};
YAHOO.lang.extend(KJUR.asn1.cms.SigningCertificateV2, KJUR.asn1.cms.Attribute);
KJUR.asn1.cms.IssuerAndSerialNumber = function(c) {
KJUR.asn1.cms.IssuerAndSerialNumber.superclass.constructor.call(this);
var e = null;
var b = null;
var a = KJUR.asn1;
var d = a.x509;
this.setByCertPEM = function(i) {
var g = KEYUTIL.getHexFromPEM(i);
var f = new X509();
f.hex = g;
var j = f.getIssuerHex();
this.dIssuer = new d.X500Name();
this.dIssuer.hTLV = j;
var h = f.getSerialNumberHex();
this.dSerial = new a.DERInteger({
hex: h
})
};
this.getEncodedHex = function() {
var f = new KJUR.asn1.DERSequence({
array: [this.dIssuer, this.dSerial]
});
this.hTLV = f.getEncodedHex();
return this.hTLV
};
if (typeof c != "undefined") {
if (typeof c == "string" && c.indexOf("-----BEGIN ") != -1) {
this.setByCertPEM(c)
}
if (c.issuer && c.serial) {
if (c.issuer instanceof KJUR.asn1.x509.X500Name) {
this.dIssuer = c.issuer
} else {
this.dIssuer = new KJUR.asn1.x509.X500Name(c.issuer)
}
if (c.serial instanceof KJUR.asn1.DERInteger) {
this.dSerial = c.serial
} else {
this.dSerial = new KJUR.asn1.DERInteger(c.serial)
}
}
if (typeof c.cert == "string") {
this.setByCertPEM(c.cert)
}
}
};
YAHOO.lang.extend(KJUR.asn1.cms.IssuerAndSerialNumber, KJUR.asn1.ASN1Object);
KJUR.asn1.cms.AttributeList = function(a) {
KJUR.asn1.cms.AttributeList.superclass.constructor.call(this);
this.list = new Array();
this.sortFlag = true;
this.add = function(b) {
if (b instanceof KJUR.asn1.cms.Attribute) {
this.list.push(b)
}
};
this.length = function() {
return this.list.length
};
this.clear = function() {
this.list = new Array();
this.hTLV = null;
this.hV = null
};
this.getEncodedHex = function() {
if (typeof this.hTLV == "string") {
return this.hTLV
}
var b = new KJUR.asn1.DERSet({
array: this.list,
sortflag: this.sortFlag
});
this.hTLV = b.getEncodedHex();
return this.hTLV
};
if (typeof a != "undefined") {
if (typeof a.sortflag != "undefined" && a.sortflag == false) {
this.sortFlag = false
}
}
};
YAHOO.lang.extend(KJUR.asn1.cms.AttributeList, KJUR.asn1.ASN1Object);
KJUR.asn1.cms.SignerInfo = function(c) {
KJUR.asn1.cms.SignerInfo.superclass.constructor.call(this);
var a = KJUR.asn1;
var b = KJUR.asn1.cms;
var d = KJUR.asn1.x509;
this.dCMSVersion = new a.DERInteger({
"int": 1
});
this.dSignerIdentifier = null;
this.dDigestAlgorithm = null;
this.dSignedAttrs = new b.AttributeList();
this.dSigAlg = null;
this.dSig = null;
this.dUnsignedAttrs = new b.AttributeList();
this.setSignerIdentifier = function(f) {
if (typeof f == "string" && f.indexOf("CERTIFICATE") != -1 && f.indexOf("BEGIN") != -1 && f.indexOf("END") != -1) {
var e = f;
this.dSignerIdentifier = new b.IssuerAndSerialNumber({
cert: f
})
}
};
this.setForContentAndHash = function(e) {
if (typeof e != "undefined") {
if (e.eciObj instanceof KJUR.asn1.cms.EncapsulatedContentInfo) {
this.dSignedAttrs.add(new b.ContentType({
oid: "1.2.840.113549.1.7.1"
}));
this.dSignedAttrs.add(new b.MessageDigest({
eciObj: e.eciObj,
hashAlg: e.hashAlg
}))
}
if (typeof e.sdObj != "undefined" && e.sdObj instanceof KJUR.asn1.cms.SignedData) {
if (e.sdObj.digestAlgNameList.join(":").indexOf(e.hashAlg) == -1) {
e.sdObj.digestAlgNameList.push(e.hashAlg)
}
}
if (typeof e.hashAlg == "string") {
this.dDigestAlgorithm = new d.AlgorithmIdentifier({
name: e.hashAlg
})
}
}
};
this.sign = function(j, f) {
this.dSigAlg = new d.AlgorithmIdentifier({
name: f
});
var g = this.dSignedAttrs.getEncodedHex();
var e = KEYUTIL.getKey(j);
var i = new KJUR.crypto.Signature({
alg: f
});
i.init(e);
i.updateHex(g);
var h = i.sign();
this.dSig = new a.DEROctetString({
hex: h
})
};
this.addUnsigned = function(e) {
this.hTLV = null;
this.dUnsignedAttrs.hTLV = null;
this.dUnsignedAttrs.add(e)
};
this.getEncodedHex = function() {
if (this.dSignedAttrs instanceof KJUR.asn1.cms.AttributeList && this.dSignedAttrs.length() == 0) {
throw "SignedAttrs length = 0 (empty)"
}
var e = new a.DERTaggedObject({
obj: this.dSignedAttrs,
tag: "a0",
explicit: false
});
var h = null;
if (this.dUnsignedAttrs.length() > 0) {
h = new a.DERTaggedObject({
obj: this.dUnsignedAttrs,
tag: "a1",
explicit: false
})
}
var g = [this.dCMSVersion, this.dSignerIdentifier, this.dDigestAlgorithm, e, this.dSigAlg, this.dSig, ];
if (h != null) {
g.push(h)
}
var f = new a.DERSequence({
array: g
});
this.hTLV = f.getEncodedHex();
return this.hTLV
}
};
YAHOO.lang.extend(KJUR.asn1.cms.SignerInfo, KJUR.asn1.ASN1Object);
KJUR.asn1.cms.EncapsulatedContentInfo = function(c) {
KJUR.asn1.cms.EncapsulatedContentInfo.superclass.constructor.call(this);
var a = KJUR.asn1;
var b = KJUR.asn1.cms;
var d = KJUR.asn1.x509;
this.dEContentType = new a.DERObjectIdentifier({
name: "data"
});
this.dEContent = null;
this.isDetached = false;
this.eContentValueHex = null;
this.setContentType = function(e) {
if (e.match(/^[0-2][.][0-9.]+$/)) {
this.dEContentType = new a.DERObjectIdentifier({
oid: e
})
} else {
this.dEContentType = new a.DERObjectIdentifier({
name: e
})
}
};
this.setContentValue = function(e) {
if (typeof e != "undefined") {
if (typeof e.hex == "string") {
this.eContentValueHex = e.hex
} else {
if (typeof e.str == "string") {
this.eContentValueHex = utf8tohex(e.str)
}
}
}
};
this.setContentValueHex = function(e) {
this.eContentValueHex = e
};
this.setContentValueStr = function(e) {
this.eContentValueHex = utf8tohex(e)
};
this.getEncodedHex = function() {
if (typeof this.eContentValueHex != "string") {
throw "eContentValue not yet set"
}
var g = new a.DEROctetString({
hex: this.eContentValueHex
});
this.dEContent = new a.DERTaggedObject({
obj: g,
tag: "a0",
explicit: true
});
var e = [this.dEContentType];
if (!this.isDetached) {
e.push(this.dEContent)
}
var f = new a.DERSequence({
array: e
});
this.hTLV = f.getEncodedHex();
return this.hTLV
}
};
YAHOO.lang.extend(KJUR.asn1.cms.EncapsulatedContentInfo, KJUR.asn1.ASN1Object);
KJUR.asn1.cms.ContentInfo = function(c) {
KJUR.asn1.cms.ContentInfo.superclass.constructor.call(this);
var a = KJUR.asn1;
var b = KJUR.asn1.cms;
var d = KJUR.asn1.x509;
this.dContentType = null;
this.dContent = null;
this.setContentType = function(e) {
if (typeof e == "string") {
this.dContentType = d.OID.name2obj(e)
}
};
this.getEncodedHex = function() {
var f = new a.DERTaggedObject({
obj: this.dContent,
tag: "a0",
explicit: true
});
var e = new a.DERSequence({
array: [this.dContentType, f]
});
this.hTLV = e.getEncodedHex();
return this.hTLV
};
if (typeof c != "undefined") {
if (c.type) {
this.setContentType(c.type)
}
if (c.obj && c.obj instanceof a.ASN1Object) {
this.dContent = c.obj
}
}
};
YAHOO.lang.extend(KJUR.asn1.cms.ContentInfo, KJUR.asn1.ASN1Object);
KJUR.asn1.cms.SignedData = function(c) {
KJUR.asn1.cms.SignedData.superclass.constructor.call(this);
var a = KJUR.asn1;
var b = KJUR.asn1.cms;
var d = KJUR.asn1.x509;
this.dCMSVersion = new a.DERInteger({
"int": 1
});
this.dDigestAlgs = null;
this.digestAlgNameList = [];
this.dEncapContentInfo = new b.EncapsulatedContentInfo();
this.dCerts = null;
this.certificateList = [];
this.crlList = [];
this.signerInfoList = [new b.SignerInfo()];
this.addCertificatesByPEM = function(e) {
var f = KEYUTIL.getHexFromPEM(e);
var g = new a.ASN1Object();
g.hTLV = f;
this.certificateList.push(g)
};
this.getEncodedHex = function() {
if (typeof this.hTLV == "string") {
return this.hTLV
}
if (this.dDigestAlgs == null) {
var k = [];
for (var j = 0; j < this.digestAlgNameList.length; j++) {
var h = this.digestAlgNameList[j];
var m = new d.AlgorithmIdentifier({
name: h
});
k.push(m)
}
this.dDigestAlgs = new a.DERSet({
array: k
})
}
var e = [this.dCMSVersion, this.dDigestAlgs, this.dEncapContentInfo];
if (this.dCerts == null) {
if (this.certificateList.length > 0) {
var l = new a.DERSet({
array: this.certificateList
});
this.dCerts = new a.DERTaggedObject({
obj: l,
tag: "a0",
explicit: false
})
}
}
if (this.dCerts != null) {
e.push(this.dCerts)
}
var g = new a.DERSet({
array: this.signerInfoList
});
e.push(g);
var f = new a.DERSequence({
array: e
});
this.hTLV = f.getEncodedHex();
return this.hTLV
};
this.getContentInfo = function() {
this.getEncodedHex();
var e = new b.ContentInfo({
type: "signed-data",
obj: this
});
return e
};
this.getContentInfoEncodedHex = function() {
var e = this.getContentInfo();
var f = e.getEncodedHex();
return f
};
this.getPEM = function() {
var e = this.getContentInfoEncodedHex();
var f = a.ASN1Util.getPEMStringFromHex(e, "CMS");
return f
}
};
YAHOO.lang.extend(KJUR.asn1.cms.SignedData, KJUR.asn1.ASN1Object);
KJUR.asn1.cms.CMSUtil = new function() {};
KJUR.asn1.cms.CMSUtil.newSignedData = function(a) {
var h = KJUR.asn1.cms;
var g = KJUR.asn1.cades;
var f = new h.SignedData();
f.dEncapContentInfo.setContentValue(a.content);
if (typeof a.certs == "object") {
for (var b = 0; b < a.certs.length; b++) {
f.addCertificatesByPEM(a.certs[b])
}
}
f.signerInfoList = [];
for (var b = 0; b < a.signerInfos.length; b++) {
var d = a.signerInfos[b];
var c = new h.SignerInfo();
c.setSignerIdentifier(d.signerCert);
c.setForContentAndHash({
sdObj: f,
eciObj: f.dEncapContentInfo,
hashAlg: d.hashAlg
});
for (attrName in d.sAttr) {
var j = d.sAttr[attrName];
if (attrName == "SigningTime") {
var e = new h.SigningTime(j);
c.dSignedAttrs.add(e)
}
if (attrName == "SigningCertificate") {
var e = new h.SigningCertificate(j);
c.dSignedAttrs.add(e)
}
if (attrName == "SigningCertificateV2") {
var e = new h.SigningCertificateV2(j);
c.dSignedAttrs.add(e)
}
if (attrName == "SignaturePolicyIdentifier") {
var e = new g.SignaturePolicyIdentifier(j);
c.dSignedAttrs.add(e)
}
}
c.sign(d.signerPrvKey, d.sigAlg);
f.signerInfoList.push(c)
}
return f
};
/*! asn1tsp-1.0.1.js (c) 2014 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
if (typeof KJUR == "undefined" || !KJUR) {
KJUR = {}
}
if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
KJUR.asn1 = {}
}
if (typeof KJUR.asn1.tsp == "undefined" || !KJUR.asn1.tsp) {
KJUR.asn1.tsp = {}
}
KJUR.asn1.tsp.Accuracy = function(b) {
KJUR.asn1.tsp.Accuracy.superclass.constructor.call(this);
var a = KJUR.asn1;
this.seconds = null;
this.millis = null;
this.micros = null;
this.getEncodedHex = function() {
var e = null;
var g = null;
var i = null;
var c = [];
if (this.seconds != null) {
e = new a.DERInteger({
"int": this.seconds
});
c.push(e)
}
if (this.millis != null) {
var h = new a.DERInteger({
"int": this.millis
});
g = new a.DERTaggedObject({
obj: h,
tag: "80",
explicit: false
});
c.push(g)
}
if (this.micros != null) {
var f = new a.DERInteger({
"int": this.micros
});
i = new a.DERTaggedObject({
obj: f,
tag: "81",
explicit: false
});
c.push(i)
}
var d = new a.DERSequence({
array: c
});
this.hTLV = d.getEncodedHex();
return this.hTLV
};
if (typeof b != "undefined") {
if (typeof b.seconds == "number") {
this.seconds = b.seconds
}
if (typeof b.millis == "number") {
this.millis = b.millis
}
if (typeof b.micros == "number") {
this.micros = b.micros
}
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.Accuracy, KJUR.asn1.ASN1Object);
KJUR.asn1.tsp.MessageImprint = function(b) {
KJUR.asn1.tsp.MessageImprint.superclass.constructor.call(this);
var a = KJUR.asn1;
var c = KJUR.asn1.x509;
this.dHashAlg = null;
this.dHashValue = null;
this.getEncodedHex = function() {
if (typeof this.hTLV == "string") {
return this.hTLV
}
var d = new a.DERSequence({
array: [this.dHashAlg, this.dHashValue]
});
return d.getEncodedHex()
};
if (typeof b != "undefined") {
if (typeof b.hashAlg == "string") {
this.dHashAlg = new c.AlgorithmIdentifier({
name: b.hashAlg
})
}
if (typeof b.hashValue == "string") {
this.dHashValue = new a.DEROctetString({
hex: b.hashValue
})
}
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.MessageImprint, KJUR.asn1.ASN1Object);
KJUR.asn1.tsp.TimeStampReq = function(c) {
KJUR.asn1.tsp.TimeStampReq.superclass.constructor.call(this);
var a = KJUR.asn1;
var b = KJUR.asn1.tsp;
this.dVersion = new a.DERInteger({
"int": 1
});
this.dMessageImprint = null;
this.dPolicy = null;
this.dNonce = null;
this.certReq = true;
this.setMessageImprint = function(d) {
if (d instanceof KJUR.asn1.tsp.MessageImprint) {
this.dMessageImprint = d;
return
}
if (typeof d == "object") {
this.dMessageImprint = new b.MessageImprint(d)
}
};
this.getEncodedHex = function() {
if (this.dMessageImprint == null) {
throw "messageImprint shall be specified"
}
var d = [this.dVersion, this.dMessageImprint];
if (this.dPolicy != null) {
d.push(this.dPolicy)
}
if (this.dNonce != null) {
d.push(this.dNonce)
}
if (this.certReq) {
d.push(new a.DERBoolean())
}
var e = new a.DERSequence({
array: d
});
this.hTLV = e.getEncodedHex();
return this.hTLV
};
if (typeof c != "undefined") {
if (typeof c.mi == "object") {
this.setMessageImprint(c.mi)
}
if (typeof c.policy == "object") {
this.dPolicy = new a.DERObjectIdentifier(c.policy)
}
if (typeof c.nonce == "object") {
this.dNonce = new a.DERInteger(c.nonce)
}
if (typeof c.certreq == "boolean") {
this.certReq = c.certreq
}
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.TimeStampReq, KJUR.asn1.ASN1Object);
KJUR.asn1.tsp.TSTInfo = function(c) {
KJUR.asn1.tsp.TSTInfo.superclass.constructor.call(this);
var a = KJUR.asn1;
var d = KJUR.asn1.x509;
var b = KJUR.asn1.tsp;
this.dVersion = new a.DERInteger({
"int": 1
});
this.dPolicy = null;
this.dMessageImprint = null;
this.dSerialNumber = null;
this.dGenTime = null;
this.dAccuracy = null;
this.dOrdering = null;
this.dNonce = null;
this.dTsa = null;
this.getEncodedHex = function() {
var e = [this.dVersion];
if (this.dPolicy == null) {
throw "policy shall be specified."
}
e.push(this.dPolicy);
if (this.dMessageImprint == null) {
throw "messageImprint shall be specified."
}
e.push(this.dMessageImprint);
if (this.dSerialNumber == null) {
throw "serialNumber shall be specified."
}
e.push(this.dSerialNumber);
if (this.dGenTime == null) {
throw "genTime shall be specified."
}
e.push(this.dGenTime);
if (this.dAccuracy != null) {
e.push(this.dAccuracy)
}
if (this.dOrdering != null) {
e.push(this.dOrdering)
}
if (this.dNonce != null) {
e.push(this.dNonce)
}
if (this.dTsa != null) {
e.push(this.dTsa)
}
var f = new a.DERSequence({
array: e
});
this.hTLV = f.getEncodedHex();
return this.hTLV
};
if (typeof c != "undefined") {
if (typeof c.policy == "string") {
if (!c.policy.match(/^[0-9.]+$/)) {
throw "policy shall be oid like 0.1.4.134"
}
this.dPolicy = new a.DERObjectIdentifier({
oid: c.policy
})
}
if (typeof c.messageImprint != "undefined") {
this.dMessageImprint = new b.MessageImprint(c.messageImprint)
}
if (typeof c.serialNumber != "undefined") {
this.dSerialNumber = new a.DERInteger(c.serialNumber)
}
if (typeof c.genTime != "undefined") {
this.dGenTime = new a.DERGeneralizedTime(c.genTime)
}
if (typeof c.accuracy != "undefind") {
this.dAccuracy = new b.Accuracy(c.accuracy)
}
if (typeof c.ordering != "undefined" && c.ordering == true) {
this.dOrdering = new a.DERBoolean()
}
if (typeof c.nonce != "undefined") {
this.dNonce = new a.DERInteger(c.nonce)
}
if (typeof c.tsa != "undefined") {
this.dTsa = new d.X500Name(c.tsa)
}
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.TSTInfo, KJUR.asn1.ASN1Object);
KJUR.asn1.tsp.TimeStampResp = function(c) {
KJUR.asn1.tsp.TimeStampResp.superclass.constructor.call(this);
var a = KJUR.asn1;
var b = KJUR.asn1.tsp;
this.dStatus = null;
this.dTST = null;
this.getEncodedHex = function() {
if (this.dStatus == null) {
throw "status shall be specified"
}
var d = [this.dStatus];
if (this.dTST != null) {
d.push(this.dTST)
}
var e = new a.DERSequence({
array: d
});
this.hTLV = e.getEncodedHex();
return this.hTLV
};
if (typeof c != "undefined") {
if (typeof c.status == "object") {
this.dStatus = new b.PKIStatusInfo(c.status)
}
if (typeof c.tst != "undefined" && c.tst instanceof KJUR.asn1.ASN1Object) {
this.dTST = c.tst.getContentInfo()
}
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.TimeStampResp, KJUR.asn1.ASN1Object);
KJUR.asn1.tsp.PKIStatusInfo = function(c) {
KJUR.asn1.tsp.PKIStatusInfo.superclass.constructor.call(this);
var a = KJUR.asn1;
var b = KJUR.asn1.tsp;
this.dStatus = null;
this.dStatusString = null;
this.dFailureInfo = null;
this.getEncodedHex = function() {
if (this.dStatus == null) {
throw "status shall be specified"
}
var d = [this.dStatus];
if (this.dStatusString != null) {
d.push(this.dStatusString)
}
if (this.dFailureInfo != null) {
d.push(this.dFailureInfo)
}
var e = new a.DERSequence({
array: d
});
this.hTLV = e.getEncodedHex();
return this.hTLV
};
if (typeof c != "undefined") {
if (typeof c.status == "object") {
this.dStatus = new b.PKIStatus(c.status)
}
if (typeof c.statstr == "object") {
this.dStatusString = new b.PKIFreeText({
array: c.statstr
})
}
if (typeof c.failinfo == "object") {
this.dFailureInfo = new b.PKIFailureInfo(c.failinfo)
}
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.PKIStatusInfo, KJUR.asn1.ASN1Object);
KJUR.asn1.tsp.PKIStatus = function(e) {
KJUR.asn1.tsp.PKIStatus.superclass.constructor.call(this);
var a = KJUR.asn1;
var b = KJUR.asn1.tsp;
var d = null;
this.getEncodedHex = function() {
this.hTLV = this.dStatus.getEncodedHex();
return this.hTLV
};
if (typeof e != "undefined") {
if (typeof e.name != "undefined") {
var c = b.PKIStatus.valueList;
if (typeof c[e.name] == "undefined") {
throw "name undefined: " + e.name
}
this.dStatus = new a.DERInteger({
"int": c[e.name]
})
} else {
this.dStatus = new a.DERInteger(e)
}
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.PKIStatus, KJUR.asn1.ASN1Object);
KJUR.asn1.tsp.PKIStatus.valueList = {
granted: 0,
grantedWithMods: 1,
rejection: 2,
waiting: 3,
revocationWarning: 4,
revocationNotification: 5
};
KJUR.asn1.tsp.PKIFreeText = function(b) {
KJUR.asn1.tsp.PKIFreeText.superclass.constructor.call(this);
var a = KJUR.asn1;
this.textList = [];
this.getEncodedHex = function() {
var c = [];
for (var e = 0; e < this.textList.length; e++) {
c.push(new a.DERUTF8String({
str: this.textList[e]
}))
}
var d = new a.DERSequence({
array: c
});
this.hTLV = d.getEncodedHex();
return this.hTLV
};
if (typeof b != "undefined") {
if (typeof b.array == "object") {
this.textList = b.array
}
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.PKIFreeText, KJUR.asn1.ASN1Object);
KJUR.asn1.tsp.PKIFailureInfo = function(d) {
KJUR.asn1.tsp.PKIFailureInfo.superclass.constructor.call(this);
var a = KJUR.asn1;
var b = KJUR.asn1.tsp;
this.value = null;
this.getEncodedHex = function() {
if (this.value == null) {
throw "value shall be specified"
}
var e = new Number(this.value).toString(2);
var f = new a.DERBitString();
f.setByBinaryString(e);
this.hTLV = f.getEncodedHex();
return this.hTLV
};
if (typeof d != "undefined") {
if (typeof d.name == "string") {
var c = b.PKIFailureInfo.valueList;
if (typeof c[d.name] == "undefined") {
throw "name undefined: " + d.name
}
this.value = c[d.name]
} else {
if (typeof d["int"] == "number") {
this.value = d["int"]
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.PKIFailureInfo, KJUR.asn1.ASN1Object);
KJUR.asn1.tsp.PKIFailureInfo.valueList = {
badAlg: 0,
badRequest: 2,
badDataFormat: 5,
timeNotAvailable: 14,
unacceptedPolicy: 15,
unacceptedExtension: 16,
addInfoNotAvailable: 17,
systemFailure: 25
};
KJUR.asn1.tsp.AbstractTSAAdapter = function(a) {
this.getTSTHex = function(c, b) {
throw "not implemented yet"
}
};
KJUR.asn1.tsp.SimpleTSAAdapter = function(a) {
KJUR.asn1.tsp.SimpleTSAAdapter.superclass.constructor.call(this);
this.params = null;
this.serial = 0;
this.getTSTHex = function(c, b) {
var e = KJUR.crypto.Util.hashHex(c, b);
this.params.tstInfo.messageImprint = {
hashAlg: b,
hashValue: e
};
this.params.tstInfo.serialNumber = {
"int": this.serial++
};
var d = Math.floor(Math.random() * 1000000000);
this.params.tstInfo.nonce = {
"int": d
};
var f = KJUR.asn1.tsp.TSPUtil.newTimeStampToken(this.params);
return f.getContentInfoEncodedHex()
};
if (typeof a != "undefined") {
this.params = a
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.SimpleTSAAdapter, KJUR.asn1.tsp.AbstractTSAAdapter);
KJUR.asn1.tsp.FixedTSAAdapter = function(a) {
KJUR.asn1.tsp.FixedTSAAdapter.superclass.constructor.call(this);
this.params = null;
this.getTSTHex = function(c, b) {
var d = KJUR.crypto.Util.hashHex(c, b);
this.params.tstInfo.messageImprint = {
hashAlg: b,
hashValue: d
};
var e = KJUR.asn1.tsp.TSPUtil.newTimeStampToken(this.params);
return e.getContentInfoEncodedHex()
};
if (typeof a != "undefined") {
this.params = a
}
};
YAHOO.lang.extend(KJUR.asn1.tsp.FixedTSAAdapter, KJUR.asn1.tsp.AbstractTSAAdapter);
KJUR.asn1.tsp.TSPUtil = new function() {};
KJUR.asn1.tsp.TSPUtil.newTimeStampToken = function(b) {
var j = KJUR.asn1.cms;
var a = KJUR.asn1.tsp;
var g = new j.SignedData();
var e = new a.TSTInfo(b.tstInfo);
var f = e.getEncodedHex();
g.dEncapContentInfo.setContentValue({
hex: f
});
g.dEncapContentInfo.setContentType("tstinfo");
if (typeof b.certs == "object") {
for (var c = 0; c < b.certs.length; c++) {
g.addCertificatesByPEM(b.certs[c])
}
}
var d = g.signerInfoList[0];
d.setSignerIdentifier(b.signerCert);
d.setForContentAndHash({
sdObj: g,
eciObj: g.dEncapContentInfo,
hashAlg: b.hashAlg
});
var h = new j.SigningCertificate({
array: [b.signerCert]
});
d.dSignedAttrs.add(h);
d.sign(b.signerPrvKey, b.sigAlg);
return g
};
KJUR.asn1.tsp.TSPUtil.parseTimeStampReq = function(d) {
var f = {};
f.certreq = false;
var h = ASN1HEX.getPosArrayOfChildren_AtObj(d, 0);
if (h.length < 2) {
throw "TimeStampReq must have at least 2 items"
}
var c = ASN1HEX.getHexOfTLV_AtObj(d, h[1]);
f.mi = KJUR.asn1.tsp.TSPUtil.parseMessageImprint(c);
for (var e = 2; e < h.length; e++) {
var b = h[e];
var a = d.substr(b, 2);
if (a == "06") {
var g = ASN1HEX.getHexOfV_AtObj(d, b);
f.policy = ASN1HEX.hextooidstr(g)
}
if (a == "02") {
f.nonce = ASN1HEX.getHexOfV_AtObj(d, b)
}
if (a == "01") {
f.certreq = true
}
}
return f
};
KJUR.asn1.tsp.TSPUtil.parseMessageImprint = function(c) {
var h = {};
if (c.substr(0, 2) != "30") {
throw "head of messageImprint hex shall be '30'"
}
var a = ASN1HEX.getPosArrayOfChildren_AtObj(c, 0);
var i = ASN1HEX.getDecendantIndexByNthList(c, 0, [0, 0]);
var d = ASN1HEX.getHexOfV_AtObj(c, i);
var e = ASN1HEX.hextooidstr(d);
var g = KJUR.asn1.x509.OID.oid2name(e);
if (g == "") {
throw "hashAlg name undefined: " + e
}
var b = g;
var f = ASN1HEX.getDecendantIndexByNthList(c, 0, [1]);
h.hashAlg = b;
h.hashValue = ASN1HEX.getHexOfV_AtObj(c, f);
return h
};
/*! asn1cades-1.0.0.js (c) 2013-2014 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
if (typeof KJUR == "undefined" || !KJUR) {
KJUR = {}
}
if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) {
KJUR.asn1 = {}
}
if (typeof KJUR.asn1.cades == "undefined" || !KJUR.asn1.cades) {
KJUR.asn1.cades = {}
}
KJUR.asn1.cades.SignaturePolicyIdentifier = function(e) {
KJUR.asn1.cades.SignaturePolicyIdentifier.superclass.constructor.call(this);
this.attrTypeOid = "1.2.840.113549.1.9.16.2.15";
var b = KJUR.asn1;
var d = KJUR.asn1.cades;
if (typeof e != "undefined") {
if (typeof e.oid == "string" && typeof e.hash == "object") {
var f = new b.DERObjectIdentifier({
oid: e.oid
});
var a = new d.OtherHashAlgAndValue(e.hash);
var c = new b.DERSequence({
array: [f, a]
});
this.valueList = [c]
}
}
};
YAHOO.lang.extend(KJUR.asn1.cades.SignaturePolicyIdentifier, KJUR.asn1.cms.Attribute);
KJUR.asn1.cades.OtherHashAlgAndValue = function(b) {
KJUR.asn1.cades.OtherHashAlgAndValue.superclass.constructor.call(this);
var a = KJUR.asn1;
var c = KJUR.asn1.x509;
this.dAlg = null;
this.dHash = null;
this.getEncodedHex = function() {
var d = new a.DERSequence({
array: [this.dAlg, this.dHash]
});
this.hTLV = d.getEncodedHex();
return this.hTLV
};
if (typeof b != "undefined") {
if (typeof b.alg == "string" && typeof b.hash == "string") {
this.dAlg = new c.AlgorithmIdentifier({
name: b.alg
});
this.dHash = new a.DEROctetString({
hex: b.hash
})
}
}
};
YAHOO.lang.extend(KJUR.asn1.cades.OtherHashAlgAndValue, KJUR.asn1.ASN1Object);
KJUR.asn1.cades.SignatureTimeStamp = function(c) {
KJUR.asn1.cades.SignatureTimeStamp.superclass.constructor.call(this);
this.attrTypeOid = "1.2.840.113549.1.9.16.2.14";
this.tstHex = null;
var a = KJUR.asn1;
if (typeof c != "undefined") {
if (typeof c.res != "undefined") {
if (typeof c.res == "string" && c.res.match(/^[0-9A-Fa-f]+$/)) {} else {
if (c.res instanceof KJUR.asn1.ASN1Object) {} else {
throw "res param shall be ASN1Object or hex string"
}
}
}
if (typeof c.tst != "undefined") {
if (typeof c.tst == "string" && c.tst.match(/^[0-9A-Fa-f]+$/)) {
var b = new a.ASN1Object();
this.tstHex = c.tst;
b.hTLV = this.tstHex;
b.getEncodedHex();
this.valueList = [b]
} else {
if (c.tst instanceof KJUR.asn1.ASN1Object) {} else {
throw "tst param shall be ASN1Object or hex string"
}
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.cades.SignatureTimeStamp, KJUR.asn1.cms.Attribute);
KJUR.asn1.cades.CompleteCertificateRefs = function(c) {
KJUR.asn1.cades.CompleteCertificateRefs.superclass.constructor.call(this);
this.attrTypeOid = "1.2.840.113549.1.9.16.2.21";
var a = KJUR.asn1;
var b = KJUR.asn1.cades;
this.setByArray = function(d) {
this.valueList = [];
for (var e = 0; e < d.length; e++) {
var f = new b.OtherCertID(d[e]);
this.valueList.push(f)
}
};
if (typeof c != "undefined") {
if (typeof c == "object" && typeof c.length == "number") {
this.setByArray(c)
}
}
};
YAHOO.lang.extend(KJUR.asn1.cades.CompleteCertificateRefs, KJUR.asn1.cms.Attribute);
KJUR.asn1.cades.OtherCertID = function(d) {
KJUR.asn1.cades.OtherCertID.superclass.constructor.call(this);
var a = KJUR.asn1;
var c = KJUR.asn1.cms;
var b = KJUR.asn1.cades;
this.hasIssuerSerial = true;
this.dOtherCertHash = null;
this.dIssuerSerial = null;
this.setByCertPEM = function(e) {
this.dOtherCertHash = new b.OtherHash(e);
if (this.hasIssuerSerial) {
this.dIssuerSerial = new c.IssuerAndSerialNumber(e)
}
};
this.getEncodedHex = function() {
if (this.hTLV != null) {
return this.hTLV
}
if (this.dOtherCertHash == null) {
throw "otherCertHash not set"
}
var e = [this.dOtherCertHash];
if (this.dIssuerSerial != null) {
e.push(this.dIssuerSerial)
}
var f = new a.DERSequence({
array: e
});
this.hTLV = f.getEncodedHex();
return this.hTLV
};
if (typeof d != "undefined") {
if (typeof d == "string" && d.indexOf("-----BEGIN ") != -1) {
this.setByCertPEM(d)
}
if (typeof d == "object") {
if (d.hasis === false) {
this.hasIssuerSerial = false
}
if (typeof d.cert == "string") {
this.setByCertPEM(d.cert)
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.cades.OtherCertID, KJUR.asn1.ASN1Object);
KJUR.asn1.cades.OtherHash = function(c) {
KJUR.asn1.cades.OtherHash.superclass.constructor.call(this);
var a = KJUR.asn1;
var b = KJUR.asn1.cades;
this.alg = "sha256";
this.dOtherHash = null;
this.setByCertPEM = function(d) {
if (d.indexOf("-----BEGIN ") == -1) {
throw "certPEM not to seem PEM format"
}
var e = X509.pemToHex(d);
var f = KJUR.crypto.Util.hashHex(e, this.alg);
this.dOtherHash = new b.OtherHashAlgAndValue({
alg: this.alg,
hash: f
})
};
this.getEncodedHex = function() {
if (this.dOtherHash == null) {
throw "OtherHash not set"
}
return this.dOtherHash.getEncodedHex()
};
if (typeof c != "undefined") {
if (typeof c == "string") {
if (c.indexOf("-----BEGIN ") != -1) {
this.setByCertPEM(c)
} else {
if (c.match(/^[0-9A-Fa-f]+$/)) {
this.dOtherHash = new a.DEROctetString({
hex: c
})
} else {
throw "unsupported string value for params"
}
}
} else {
if (typeof c == "object") {
if (typeof c.cert == "string") {
if (typeof c.alg == "string") {
this.alg = c.alg
}
this.setByCertPEM(c.cert)
} else {
this.dOtherHash = new b.OtherHashAlgAndValue(c)
}
}
}
}
};
YAHOO.lang.extend(KJUR.asn1.cades.OtherHash, KJUR.asn1.ASN1Object);
KJUR.asn1.cades.CAdESUtil = new function() {};
KJUR.asn1.cades.CAdESUtil.addSigTS = function(c, b, a) {};
KJUR.asn1.cades.CAdESUtil.parseSignedDataForAddingUnsigned = function(d) {
var q = KJUR.asn1;
var p = KJUR.asn1.cms;
var c = KJUR.asn1.cades.CAdESUtil;
var a = {};
if (ASN1HEX.getDecendantHexTLVByNthList(d, 0, [0]) != "06092a864886f70d010702") {
throw "hex is not CMS SignedData"
}
var s = ASN1HEX.getDecendantIndexByNthList(d, 0, [1, 0]);
var b = ASN1HEX.getPosArrayOfChildren_AtObj(d, s);
if (b.length < 4) {
throw "num of SignedData elem shall be 4 at least"
}
var f = b.shift();
a.version = ASN1HEX.getHexOfTLV_AtObj(d, f);
var l = b.shift();
a.algs = ASN1HEX.getHexOfTLV_AtObj(d, l);
var m = b.shift();
a.encapcontent = ASN1HEX.getHexOfTLV_AtObj(d, m);
a.certs = null;
a.revs = null;
a.si = [];
var n = b.shift();
if (d.substr(n, 2) == "a0") {
a.certs = ASN1HEX.getHexOfTLV_AtObj(d, n);
n = b.shift()
}
if (d.substr(n, 2) == "a1") {
a.revs = ASN1HEX.getHexOfTLV_AtObj(d, n);
n = b.shift()
}
var k = n;
if (d.substr(k, 2) != "31") {
throw "Can't find signerInfos"
}
var j = ASN1HEX.getPosArrayOfChildren_AtObj(d, k);
for (var h = 0; h < j.length; h++) {
var o = j[h];
var e = c.parseSignerInfoForAddingUnsigned(d, o, h);
a.si[h] = e
}
var g = null;
a.obj = new p.SignedData();
g = new q.ASN1Object();
g.hTLV = a.version;
a.obj.dCMSVersion = g;
g = new q.ASN1Object();
g.hTLV = a.algs;
a.obj.dDigestAlgs = g;
g = new q.ASN1Object();
g.hTLV = a.encapcontent;
a.obj.dEncapContentInfo = g;
g = new q.ASN1Object();
g.hTLV = a.certs;
a.obj.dCerts = g;
a.obj.signerInfoList = [];
for (var h = 0; h < a.si.length; h++) {
a.obj.signerInfoList.push(a.si[h].obj)
}
return a
};
KJUR.asn1.cades.CAdESUtil.parseSignerInfoForAddingUnsigned = function(d, k, a) {
var m = KJUR.asn1;
var l = KJUR.asn1.cms;
var b = {};
var e = ASN1HEX.getPosArrayOfChildren_AtObj(d, k);
if (e.length != 6) {
throw "not supported items for SignerInfo (!=6)"
}
var f = e.shift();
b.version = ASN1HEX.getHexOfTLV_AtObj(d, f);
var n = e.shift();
b.si = ASN1HEX.getHexOfTLV_AtObj(d, n);
var h = e.shift();
b.digalg = ASN1HEX.getHexOfTLV_AtObj(d, h);
var c = e.shift();
b.sattrs = ASN1HEX.getHexOfTLV_AtObj(d, c);
var i = e.shift();
b.sigalg = ASN1HEX.getHexOfTLV_AtObj(d, i);
var j = e.shift();
b.sig = ASN1HEX.getHexOfTLV_AtObj(d, j);
b.sigval = ASN1HEX.getHexOfV_AtObj(d, j);
var g = null;
b.obj = new l.SignerInfo();
g = new m.ASN1Object();
g.hTLV = b.version;
b.obj.dCMSVersion = g;
g = new m.ASN1Object();
g.hTLV = b.si;
b.obj.dSignerIdentifier = g;
g = new m.ASN1Object();
g.hTLV = b.digalg;
b.obj.dDigestAlgorithm = g;
g = new m.ASN1Object();
g.hTLV = b.sattrs;
b.obj.dSignedAttrs = g;
g = new m.ASN1Object();
g.hTLV = b.sigalg;
b.obj.dSigAlg = g;
g = new m.ASN1Object();
g.hTLV = b.sig;
b.obj.dSig = g;
b.obj.dUnsignedAttrs = new l.AttributeList();
return b
};
/*! base64x-1.1.3 (c) 2012-2014 Kenji Urushima | kjur.github.com/jsjws/license
*/
function Base64x() {}
function stoBA(d) {
var b = new Array();
for (var c = 0; c < d.length; c++) {
b[c] = d.charCodeAt(c)
}
return b
}
function BAtos(b) {
var d = "";
for (var c = 0; c < b.length; c++) {
d = d + String.fromCharCode(b[c])
}
return d
}
function BAtohex(b) {
var e = "";
for (var d = 0; d < b.length; d++) {
var c = b[d].toString(16);
if (c.length == 1) {
c = "0" + c
}
e = e + c
}
return e
}
function stohex(a) {
return BAtohex(stoBA(a))
}
function stob64(a) {
return hex2b64(stohex(a))
}
function stob64u(a) {
return b64tob64u(hex2b64(stohex(a)))
}
function b64utos(a) {
return BAtos(b64toBA(b64utob64(a)))
}
function b64tob64u(a) {
a = a.replace(/\=/g, "");
a = a.replace(/\+/g, "-");
a = a.replace(/\//g, "_");
return a
}
function b64utob64(a) {
if (a.length % 4 == 2) {
a = a + "=="
} else {
if (a.length % 4 == 3) {
a = a + "="
}
}
a = a.replace(/-/g, "+");
a = a.replace(/_/g, "/");
return a
}
function hextob64u(a) {
return b64tob64u(hex2b64(a))
}
function b64utohex(a) {
return b64tohex(b64utob64(a))
}
var utf8tob64u, b64utoutf8;
if (typeof Buffer === "function") {
utf8tob64u = function(a) {
return b64tob64u(new Buffer(a, "utf8").toString("base64"))
};
b64utoutf8 = function(a) {
return new Buffer(b64utob64(a), "base64").toString("utf8")
}
} else {
utf8tob64u = function(a) {
return hextob64u(uricmptohex(encodeURIComponentAll(a)))
};
b64utoutf8 = function(a) {
return decodeURIComponent(hextouricmp(b64utohex(a)))
}
}
function utf8tob64(a) {
return hex2b64(uricmptohex(encodeURIComponentAll(a)))
}
function b64toutf8(a) {
return decodeURIComponent(hextouricmp(b64tohex(a)))
}
function utf8tohex(a) {
return uricmptohex(encodeURIComponentAll(a))
}
function hextoutf8(a) {
return decodeURIComponent(hextouricmp(a))
}
function hextorstr(c) {
var b = "";
for (var a = 0; a < c.length - 1; a += 2) {
b += String.fromCharCode(parseInt(c.substr(a, 2), 16))
}
return b
}
function rstrtohex(c) {
var a = "";
for (var b = 0; b < c.length; b++) {
a += ("0" + c.charCodeAt(b).toString(16)).slice(-2)
}
return a
}
function hextob64(a) {
return hex2b64(a)
}
function hextob64nl(b) {
var a = hextob64(b);
var c = a.replace(/(.{64})/g, "$1\r\n");
c = c.replace(/\r\n$/, "");
return c
}
function b64nltohex(b) {
var a = b.replace(/[^0-9A-Za-z\/+=]*/g, "");
var c = b64tohex(a);
return c
}
function uricmptohex(a) {
return a.replace(/%/g, "")
}
function hextouricmp(a) {
return a.replace(/(..)/g, "%$1")
}
function encodeURIComponentAll(a) {
var d = encodeURIComponent(a);
var b = "";
for (var c = 0; c < d.length; c++) {
if (d[c] == "%") {
b = b + d.substr(c, 3);
c = c + 2
} else {
b = b + "%" + stohex(d[c])
}
}
return b
}
function newline_toUnix(a) {
a = a.replace(/\r\n/mg, "\n");
return a
}
function newline_toDos(a) {
a = a.replace(/\r\n/mg, "\n");
a = a.replace(/\n/mg, "\r\n");
return a
};
/*! crypto-1.1.5.js (c) 2013 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
if (typeof KJUR == "undefined" || !KJUR) {
KJUR = {}
}
if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) {
KJUR.crypto = {}
}
KJUR.crypto.Util = new function() {
this.DIGESTINFOHEAD = {
sha1: "3021300906052b0e03021a05000414",
sha224: "302d300d06096086480165030402040500041c",
sha256: "3031300d060960864801650304020105000420",
sha384: "3041300d060960864801650304020205000430",
sha512: "3051300d060960864801650304020305000440",
md2: "3020300c06082a864886f70d020205000410",
md5: "3020300c06082a864886f70d020505000410",
ripemd160: "3021300906052b2403020105000414"
};
this.DEFAULTPROVIDER = {
md5: "cryptojs",
sha1: "cryptojs",
sha224: "cryptojs",
sha256: "cryptojs",
sha384: "cryptojs",
sha512: "cryptojs",
ripemd160: "cryptojs",
hmacmd5: "cryptojs",
hmacsha1: "cryptojs",
hmacsha224: "cryptojs",
hmacsha256: "cryptojs",
hmacsha384: "cryptojs",
hmacsha512: "cryptojs",
hmacripemd160: "cryptojs",
MD5withRSA: "cryptojs/jsrsa",
SHA1withRSA: "cryptojs/jsrsa",
SHA224withRSA: "cryptojs/jsrsa",
SHA256withRSA: "cryptojs/jsrsa",
SHA384withRSA: "cryptojs/jsrsa",
SHA512withRSA: "cryptojs/jsrsa",
RIPEMD160withRSA: "cryptojs/jsrsa",
MD5withECDSA: "cryptojs/jsrsa",
SHA1withECDSA: "cryptojs/jsrsa",
SHA224withECDSA: "cryptojs/jsrsa",
SHA256withECDSA: "cryptojs/jsrsa",
SHA384withECDSA: "cryptojs/jsrsa",
SHA512withECDSA: "cryptojs/jsrsa",
RIPEMD160withECDSA: "cryptojs/jsrsa",
SHA1withDSA: "cryptojs/jsrsa",
SHA224withDSA: "cryptojs/jsrsa",
SHA256withDSA: "cryptojs/jsrsa",
MD5withRSAandMGF1: "cryptojs/jsrsa",
SHA1withRSAandMGF1: "cryptojs/jsrsa",
SHA224withRSAandMGF1: "cryptojs/jsrsa",
SHA256withRSAandMGF1: "cryptojs/jsrsa",
SHA384withRSAandMGF1: "cryptojs/jsrsa",
SHA512withRSAandMGF1: "cryptojs/jsrsa",
RIPEMD160withRSAandMGF1: "cryptojs/jsrsa"
};
this.CRYPTOJSMESSAGEDIGESTNAME = {
md5: "CryptoJS.algo.MD5",
sha1: "CryptoJS.algo.SHA1",
sha224: "CryptoJS.algo.SHA224",
sha256: "CryptoJS.algo.SHA256",
sha384: "CryptoJS.algo.SHA384",
sha512: "CryptoJS.algo.SHA512",
ripemd160: "CryptoJS.algo.RIPEMD160"
};
this.getDigestInfoHex = function(a, b) {
if (typeof this.DIGESTINFOHEAD[b] == "undefined") {
throw "alg not supported in Util.DIGESTINFOHEAD: " + b
}
return this.DIGESTINFOHEAD[b] + a
};
this.getPaddedDigestInfoHex = function(h, a, j) {
var c = this.getDigestInfoHex(h, a);
var d = j / 4;
if (c.length + 22 > d) {
throw "key is too short for SigAlg: keylen=" + j + "," + a
}
var b = "0001";
var k = "00" + c;
var g = "";
var l = d - b.length - k.length;
for (var f = 0; f < l; f += 2) {
g += "ff"
}
var e = b + g + k;
return e
};
this.hashString = function(a, c) {
var b = new KJUR.crypto.MessageDigest({
alg: c
});
return b.digestString(a)
};
this.hashHex = function(b, c) {
var a = new KJUR.crypto.MessageDigest({
alg: c
});
return a.digestHex(b)
};
this.sha1 = function(a) {
var b = new KJUR.crypto.MessageDigest({
alg: "sha1",
prov: "cryptojs"
});
return b.digestString(a)
};
this.sha256 = function(a) {
var b = new KJUR.crypto.MessageDigest({
alg: "sha256",
prov: "cryptojs"
});
return b.digestString(a)
};
this.sha256Hex = function(a) {
var b = new KJUR.crypto.MessageDigest({
alg: "sha256",
prov: "cryptojs"
});
return b.digestHex(a)
};
this.sha512 = function(a) {
var b = new KJUR.crypto.MessageDigest({
alg: "sha512",
prov: "cryptojs"
});
return b.digestString(a)
};
this.sha512Hex = function(a) {
var b = new KJUR.crypto.MessageDigest({
alg: "sha512",
prov: "cryptojs"
});
return b.digestHex(a)
};
this.md5 = function(a) {
var b = new KJUR.crypto.MessageDigest({
alg: "md5",
prov: "cryptojs"
});
return b.digestString(a)
};
this.ripemd160 = function(a) {
var b = new KJUR.crypto.MessageDigest({
alg: "ripemd160",
prov: "cryptojs"
});
return b.digestString(a)
};
this.getCryptoJSMDByName = function(a) {}
};
KJUR.crypto.MessageDigest = function(params) {
var md = null;
var algName = null;
var provName = null;
this.setAlgAndProvider = function(alg, prov) {
if (alg != null && prov === undefined) {
prov = KJUR.crypto.Util.DEFAULTPROVIDER[alg]
}
if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(alg) != -1 && prov == "cryptojs") {
try {
this.md = eval(KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[alg]).create()
} catch (ex) {
throw "setAlgAndProvider hash alg set fail alg=" + alg + "/" + ex
}
this.updateString = function(str) {
this.md.update(str)
};
this.updateHex = function(hex) {
var wHex = CryptoJS.enc.Hex.parse(hex);
this.md.update(wHex)
};
this.digest = function() {
var hash = this.md.finalize();
return hash.toString(CryptoJS.enc.Hex)
};
this.digestString = function(str) {
this.updateString(str);
return this.digest()
};
this.digestHex = function(hex) {
this.updateHex(hex);
return this.digest()
}
}
if (":sha256:".indexOf(alg) != -1 && prov == "sjcl") {
try {
this.md = new sjcl.hash.sha256()
} catch (ex) {
throw "setAlgAndProvider hash alg set fail alg=" + alg + "/" + ex
}
this.updateString = function(str) {
this.md.update(str)
};
this.updateHex = function(hex) {
var baHex = sjcl.codec.hex.toBits(hex);
this.md.update(baHex)
};
this.digest = function() {
var hash = this.md.finalize();
return sjcl.codec.hex.fromBits(hash)
};
this.digestString = function(str) {
this.updateString(str);
return this.digest()
};
this.digestHex = function(hex) {
this.updateHex(hex);
return this.digest()
}
}
};
this.updateString = function(str) {
throw "updateString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName
};
this.updateHex = function(hex) {
throw "updateHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName
};
this.digest = function() {
throw "digest() not supported for this alg/prov: " + this.algName + "/" + this.provName
};
this.digestString = function(str) {
throw "digestString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName
};
this.digestHex = function(hex) {
throw "digestHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName
};
if (params !== undefined) {
if (params.alg !== undefined) {
this.algName = params.alg;
if (params.prov === undefined) {
this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]
}
this.setAlgAndProvider(this.algName, this.provName)
}
}
};
KJUR.crypto.Mac = function(params) {
var mac = null;
var pass = null;
var algName = null;
var provName = null;
var algProv = null;
this.setAlgAndProvider = function(alg, prov) {
if (alg == null) {
alg = "hmacsha1"
}
alg = alg.toLowerCase();
if (alg.substr(0, 4) != "hmac") {
throw "setAlgAndProvider unsupported HMAC alg: " + alg
}
if (prov === undefined) {
prov = KJUR.crypto.Util.DEFAULTPROVIDER[alg]
}
this.algProv = alg + "/" + prov;
var hashAlg = alg.substr(4);
if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(hashAlg) != -1 && prov == "cryptojs") {
try {
var mdObj = eval(KJUR.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[hashAlg]);
this.mac = CryptoJS.algo.HMAC.create(mdObj, this.pass)
} catch (ex) {
throw "setAlgAndProvider hash alg set fail hashAlg=" + hashAlg + "/" + ex
}
this.updateString = function(str) {
this.mac.update(str)
};
this.updateHex = function(hex) {
var wHex = CryptoJS.enc.Hex.parse(hex);
this.mac.update(wHex)
};
this.doFinal = function() {
var hash = this.mac.finalize();
return hash.toString(CryptoJS.enc.Hex)
};
this.doFinalString = function(str) {
this.updateString(str);
return this.doFinal()
};
this.doFinalHex = function(hex) {
this.updateHex(hex);
return this.doFinal()
}
}
};
this.updateString = function(str) {
throw "updateString(str) not supported for this alg/prov: " + this.algProv
};
this.updateHex = function(hex) {
throw "updateHex(hex) not supported for this alg/prov: " + this.algProv
};
this.doFinal = function() {
throw "digest() not supported for this alg/prov: " + this.algProv
};
this.doFinalString = function(str) {
throw "digestString(str) not supported for this alg/prov: " + this.algProv
};
this.doFinalHex = function(hex) {
throw "digestHex(hex) not supported for this alg/prov: " + this.algProv
};
if (params !== undefined) {
if (params.pass !== undefined) {
this.pass = params.pass
}
if (params.alg !== undefined) {
this.algName = params.alg;
if (params.prov === undefined) {
this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]
}
this.setAlgAndProvider(this.algName, this.provName)
}
}
};
KJUR.crypto.Signature = function(o) {
var q = null;
var n = null;
var r = null;
var c = null;
var l = null;
var d = null;
var k = null;
var h = null;
var p = null;
var e = null;
var b = -1;
var g = null;
var j = null;
var a = null;
var i = null;
var f = null;
this._setAlgNames = function() {
if (this.algName.match(/^(.+)with(.+)$/)) {
this.mdAlgName = RegExp.$1.toLowerCase();
this.pubkeyAlgName = RegExp.$2.toLowerCase()
}
};
this._zeroPaddingOfSignature = function(x, w) {
var v = "";
var t = w / 4 - x.length;
for (var u = 0; u < t; u++) {
v = v + "0"
}
return v + x
};
this.setAlgAndProvider = function(u, t) {
this._setAlgNames();
if (t != "cryptojs/jsrsa") {
throw "provider not supported: " + t
}
if (":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(this.mdAlgName) != -1) {
try {
this.md = new KJUR.crypto.MessageDigest({
alg: this.mdAlgName
})
} catch (s) {
throw "setAlgAndProvider hash alg set fail alg=" + this.mdAlgName + "/" + s
}
this.init = function(w, x) {
var y = null;
try {
if (x === undefined) {
y = KEYUTIL.getKey(w)
} else {
y = KEYUTIL.getKey(w, x)
}
} catch (v) {
throw "init failed:" + v
}
if (y.isPrivate === true) {
this.prvKey = y;
this.state = "SIGN"
} else {
if (y.isPublic === true) {
this.pubKey = y;
this.state = "VERIFY"
} else {
throw "init failed.:" + y
}
}
};
this.initSign = function(v) {
if (typeof v.ecprvhex == "string" && typeof v.eccurvename == "string") {
this.ecprvhex = v.ecprvhex;
this.eccurvename = v.eccurvename
} else {
this.prvKey = v
}
this.state = "SIGN"
};
this.initVerifyByPublicKey = function(v) {
if (typeof v.ecpubhex == "string" && typeof v.eccurvename == "string") {
this.ecpubhex = v.ecpubhex;
this.eccurvename = v.eccurvename
} else {
if (v instanceof KJUR.crypto.ECDSA) {
this.pubKey = v
} else {
if (v instanceof RSAKey) {
this.pubKey = v
}
}
}
this.state = "VERIFY"
};
this.initVerifyByCertificatePEM = function(v) {
var w = new X509();
w.readCertPEM(v);
this.pubKey = w.subjectPublicKeyRSA;
this.state = "VERIFY"
};
this.updateString = function(v) {
this.md.updateString(v)
};
this.updateHex = function(v) {
this.md.updateHex(v)
};
this.sign = function() {
this.sHashHex = this.md.digest();
if (typeof this.ecprvhex != "undefined" && typeof this.eccurvename != "undefined") {
var v = new KJUR.crypto.ECDSA({
curve: this.eccurvename
});
this.hSign = v.signHex(this.sHashHex, this.ecprvhex)
} else {
if (this.pubkeyAlgName == "rsaandmgf1") {
this.hSign = this.prvKey.signWithMessageHashPSS(this.sHashHex, this.mdAlgName, this.pssSaltLen)
} else {
if (this.pubkeyAlgName == "rsa") {
this.hSign = this.prvKey.signWithMessageHash(this.sHashHex, this.mdAlgName)
} else {
if (this.prvKey instanceof KJUR.crypto.ECDSA) {
this.hSign = this.prvKey.signWithMessageHash(this.sHashHex)
} else {
if (this.prvKey instanceof KJUR.crypto.DSA) {
this.hSign = this.prvKey.signWithMessageHash(this.sHashHex)
} else {
throw "Signature: unsupported public key alg: " + this.pubkeyAlgName
}
}
}
}
}
return this.hSign
};
this.signString = function(v) {
this.updateString(v);
this.sign()
};
this.signHex = function(v) {
this.updateHex(v);
this.sign()
};
this.verify = function(v) {
this.sHashHex = this.md.digest();
if (typeof this.ecpubhex != "undefined" && typeof this.eccurvename != "undefined") {
var w = new KJUR.crypto.ECDSA({
curve: this.eccurvename
});
return w.verifyHex(this.sHashHex, v, this.ecpubhex)
} else {
if (this.pubkeyAlgName == "rsaandmgf1") {
return this.pubKey.verifyWithMessageHashPSS(this.sHashHex, v, this.mdAlgName, this.pssSaltLen)
} else {
if (this.pubkeyAlgName == "rsa") {
return this.pubKey.verifyWithMessageHash(this.sHashHex, v)
} else {
if (this.pubKey instanceof KJUR.crypto.ECDSA) {
return this.pubKey.verifyWithMessageHash(this.sHashHex, v)
} else {
if (this.pubKey instanceof KJUR.crypto.DSA) {
return this.pubKey.verifyWithMessageHash(this.sHashHex, v)
} else {
throw "Signature: unsupported public key alg: " + this.pubkeyAlgName
}
}
}
}
}
}
}
};
this.init = function(s, t) {
throw "init(key, pass) not supported for this alg:prov=" + this.algProvName
};
this.initVerifyByPublicKey = function(s) {
throw "initVerifyByPublicKey(rsaPubKeyy) not supported for this alg:prov=" + this.algProvName
};
this.initVerifyByCertificatePEM = function(s) {
throw "initVerifyByCertificatePEM(certPEM) not supported for this alg:prov=" + this.algProvName
};
this.initSign = function(s) {
throw "initSign(prvKey) not supported for this alg:prov=" + this.algProvName
};
this.updateString = function(s) {
throw "updateString(str) not supported for this alg:prov=" + this.algProvName
};
this.updateHex = function(s) {
throw "updateHex(hex) not supported for this alg:prov=" + this.algProvName
};
this.sign = function() {
throw "sign() not supported for this alg:prov=" + this.algProvName
};
this.signString = function(s) {
throw "digestString(str) not supported for this alg:prov=" + this.algProvName
};
this.signHex = function(s) {
throw "digestHex(hex) not supported for this alg:prov=" + this.algProvName
};
this.verify = function(s) {
throw "verify(hSigVal) not supported for this alg:prov=" + this.algProvName
};
this.initParams = o;
if (o !== undefined) {
if (o.alg !== undefined) {
this.algName = o.alg;
if (o.prov === undefined) {
this.provName = KJUR.crypto.Util.DEFAULTPROVIDER[this.algName]
} else {
this.provName = o.prov
}
this.algProvName = this.algName + ":" + this.provName;
this.setAlgAndProvider(this.algName, this.provName);
this._setAlgNames()
}
if (o.psssaltlen !== undefined) {
this.pssSaltLen = o.psssaltlen
}
if (o.prvkeypem !== undefined) {
if (o.prvkeypas !== undefined) {
throw "both prvkeypem and prvkeypas parameters not supported"
} else {
try {
var q = new RSAKey();
q.readPrivateKeyFromPEMString(o.prvkeypem);
this.initSign(q)
} catch (m) {
throw "fatal error to load pem private key: " + m
}
}
}
}
};
KJUR.crypto.OID = new function() {
this.oidhex2name = {
"2a864886f70d010101": "rsaEncryption",
"2a8648ce3d0201": "ecPublicKey",
"2a8648ce380401": "dsa",
"2a8648ce3d030107": "secp256r1",
"2b8104001f": "secp192k1",
"2b81040021": "secp224r1",
"2b8104000a": "secp256k1",
"2b81040023": "secp521r1",
"2b81040022": "secp384r1",
"2a8648ce380403": "SHA1withDSA",
"608648016503040301": "SHA224withDSA",
"608648016503040302": "SHA256withDSA"
}
};
/*! ecdsa-modified-1.0.4.js (c) Stephan Thomas, Kenji Urushima | github.com/bitcoinjs/bitcoinjs-lib/blob/master/LICENSE
*/
if (typeof KJUR == "undefined" || !KJUR) {
KJUR = {}
}
if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) {
KJUR.crypto = {}
}
KJUR.crypto.ECDSA = function(h) {
var e = "secp256r1";
var g = null;
var b = null;
var f = null;
var a = new SecureRandom();
var d = null;
this.type = "EC";
function c(s, o, r, n) {
var j = Math.max(o.bitLength(), n.bitLength());
var t = s.add2D(r);
var q = s.curve.getInfinity();
for (var p = j - 1; p >= 0; --p) {
q = q.twice2D();
q.z = BigInteger.ONE;
if (o.testBit(p)) {
if (n.testBit(p)) {
q = q.add2D(t)
} else {
q = q.add2D(s)
}
} else {
if (n.testBit(p)) {
q = q.add2D(r)
}
}
}
return q
}
this.getBigRandom = function(i) {
return new BigInteger(i.bitLength(), a).mod(i.subtract(BigInteger.ONE)).add(BigInteger.ONE)
};
this.setNamedCurve = function(i) {
this.ecparams = KJUR.crypto.ECParameterDB.getByName(i);
this.prvKeyHex = null;
this.pubKeyHex = null;
this.curveName = i
};
this.setPrivateKeyHex = function(i) {
this.isPrivate = true;
this.prvKeyHex = i
};
this.setPublicKeyHex = function(i) {
this.isPublic = true;
this.pubKeyHex = i
};
this.generateKeyPairHex = function() {
var k = this.ecparams.n;
var n = this.getBigRandom(k);
var l = this.ecparams.G.multiply(n);
var q = l.getX().toBigInteger();
var o = l.getY().toBigInteger();
var i = this.ecparams.keylen / 4;
var m = ("0000000000" + n.toString(16)).slice(-i);
var r = ("0000000000" + q.toString(16)).slice(-i);
var p = ("0000000000" + o.toString(16)).slice(-i);
var j = "04" + r + p;
this.setPrivateKeyHex(m);
this.setPublicKeyHex(j);
return {
ecprvhex: m,
ecpubhex: j
}
};
this.signWithMessageHash = function(i) {
return this.signHex(i, this.prvKeyHex)
};
this.signHex = function(o, j) {
var t = new BigInteger(j, 16);
var l = this.ecparams.n;
var q = new BigInteger(o, 16);
do {
var m = this.getBigRandom(l);
var u = this.ecparams.G;
var p = u.multiply(m);
var i = p.getX().toBigInteger().mod(l)
} while (i.compareTo(BigInteger.ZERO) <= 0);
var v = m.modInverse(l).multiply(q.add(t.multiply(i))).mod(l);
return KJUR.crypto.ECDSA.biRSSigToASN1Sig(i, v)
};
this.sign = function(m, u) {
var q = u;
var j = this.ecparams.n;
var p = BigInteger.fromByteArrayUnsigned(m);
do {
var l = this.getBigRandom(j);
var t = this.ecparams.G;
var o = t.multiply(l);
var i = o.getX().toBigInteger().mod(j)
} while (i.compareTo(BigInteger.ZERO) <= 0);
var v = l.modInverse(j).multiply(p.add(q.multiply(i))).mod(j);
return this.serializeSig(i, v)
};
this.verifyWithMessageHash = function(j, i) {
return this.verifyHex(j, i, this.pubKeyHex)
};
this.verifyHex = function(m, i, p) {
var l, j;
var o = KJUR.crypto.ECDSA.parseSigHex(i);
l = o.r;
j = o.s;
var k;
k = ECPointFp.decodeFromHex(this.ecparams.curve, p);
var n = new BigInteger(m, 16);
return this.verifyRaw(n, l, j, k)
};
this.verify = function(o, p, j) {
var l, i;
if (Bitcoin.Util.isArray(p)) {
var n = this.parseSig(p);
l = n.r;
i = n.s
} else {
if ("object" === typeof p && p.r && p.s) {
l = p.r;
i = p.s
} else {
throw "Invalid value for signature"
}
}
var k;
if (j instanceof ECPointFp) {
k = j
} else {
if (Bitcoin.Util.isArray(j)) {
k = ECPointFp.decodeFrom(this.ecparams.curve, j)
} else {
throw "Invalid format for pubkey value, must be byte array or ECPointFp"
}
}
var m = BigInteger.fromByteArrayUnsigned(o);
return this.verifyRaw(m, l, i, k)
};
this.verifyRaw = function(o, i, w, m) {
var l = this.ecparams.n;
var u = this.ecparams.G;
if (i.compareTo(BigInteger.ONE) < 0 || i.compareTo(l) >= 0) {
return false
}
if (w.compareTo(BigInteger.ONE) < 0 || w.compareTo(l) >= 0) {
return false
}
var p = w.modInverse(l);
var k = o.multiply(p).mod(l);
var j = i.multiply(p).mod(l);
var q = u.multiply(k).add(m.multiply(j));
var t = q.getX().toBigInteger().mod(l);
return t.equals(i)
};
this.serializeSig = function(k, j) {
var l = k.toByteArraySigned();
var i = j.toByteArraySigned();
var m = [];
m.push(2);
m.push(l.length);
m = m.concat(l);
m.push(2);
m.push(i.length);
m = m.concat(i);
m.unshift(m.length);
m.unshift(48);
return m
};
this.parseSig = function(n) {
var m;
if (n[0] != 48) {
throw new Error("Signature not a valid DERSequence")
}
m = 2;
if (n[m] != 2) {
throw new Error("First element in signature must be a DERInteger")
}
var l = n.slice(m + 2, m + 2 + n[m + 1]);
m += 2 + n[m + 1];
if (n[m] != 2) {
throw new Error("Second element in signature must be a DERInteger")
}
var i = n.slice(m + 2, m + 2 + n[m + 1]);
m += 2 + n[m + 1];
var k = BigInteger.fromByteArrayUnsigned(l);
var j = BigInteger.fromByteArrayUnsigned(i);
return {
r: k,
s: j
}
};
this.parseSigCompact = function(m) {
if (m.length !== 65) {
throw "Signature has the wrong length"
}
var j = m[0] - 27;
if (j < 0 || j > 7) {
throw "Invalid signature type"
}
var o = this.ecparams.n;
var l = BigInteger.fromByteArrayUnsigned(m.slice(1, 33)).mod(o);
var k = BigInteger.fromByteArrayUnsigned(m.slice(33, 65)).mod(o);
return {
r: l,
s: k,
i: j
}
};
if (h !== undefined) {
if (h.curve !== undefined) {
this.curveName = h.curve
}
}
if (this.curveName === undefined) {
this.curveName = e
}
this.setNamedCurve(this.curveName);
if (h !== undefined) {
if (h.prv !== undefined) {
this.setPrivateKeyHex(h.prv)
}
if (h.pub !== undefined) {
this.setPublicKeyHex(h.pub)
}
}
};
KJUR.crypto.ECDSA.parseSigHex = function(a) {
var b = KJUR.crypto.ECDSA.parseSigHexInHexRS(a);
var d = new BigInteger(b.r, 16);
var c = new BigInteger(b.s, 16);
return {
r: d,
s: c
}
};
KJUR.crypto.ECDSA.parseSigHexInHexRS = function(c) {
if (c.substr(0, 2) != "30") {
throw "signature is not a ASN.1 sequence"
}
var b = ASN1HEX.getPosArrayOfChildren_AtObj(c, 0);
if (b.length != 2) {
throw "number of signature ASN.1 sequence elements seem wrong"
}
var g = b[0];
var f = b[1];
if (c.substr(g, 2) != "02") {
throw "1st item of sequene of signature is not ASN.1 integer"
}
if (c.substr(f, 2) != "02") {
throw "2nd item of sequene of signature is not ASN.1 integer"
}
var e = ASN1HEX.getHexOfV_AtObj(c, g);
var d = ASN1HEX.getHexOfV_AtObj(c, f);
return {
r: e,
s: d
}
};
KJUR.crypto.ECDSA.asn1SigToConcatSig = function(c) {
var d = KJUR.crypto.ECDSA.parseSigHexInHexRS(c);
var b = d.r;
var a = d.s;
if (b.substr(0, 2) == "00" && (((b.length / 2) * 8) % (16 * 8)) == 8) {
b = b.substr(2)
}
if (a.substr(0, 2) == "00" && (((a.length / 2) * 8) % (16 * 8)) == 8) {
a = a.substr(2)
}
if ((((b.length / 2) * 8) % (16 * 8)) != 0) {
throw "unknown ECDSA sig r length error"
}
if ((((a.length / 2) * 8) % (16 * 8)) != 0) {
throw "unknown ECDSA sig s length error"
}
return b + a
};
KJUR.crypto.ECDSA.concatSigToASN1Sig = function(a) {
if ((((a.length / 2) * 8) % (16 * 8)) != 0) {
throw "unknown ECDSA concatinated r-s sig length error"
}
var c = a.substr(0, a.length / 2);
var b = a.substr(a.length / 2);
return KJUR.crypto.ECDSA.hexRSSigToASN1Sig(c, b)
};
KJUR.crypto.ECDSA.hexRSSigToASN1Sig = function(b, a) {
var d = new BigInteger(b, 16);
var c = new BigInteger(a, 16);
return KJUR.crypto.ECDSA.biRSSigToASN1Sig(d, c)
};
KJUR.crypto.ECDSA.biRSSigToASN1Sig = function(e, c) {
var b = new KJUR.asn1.DERInteger({
bigint: e
});
var a = new KJUR.asn1.DERInteger({
bigint: c
});
var d = new KJUR.asn1.DERSequence({
array: [b, a]
});
return d.getEncodedHex()
};
/*! ecparam-1.0.0.js (c) 2013 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
if (typeof KJUR == "undefined" || !KJUR) {
KJUR = {}
}
if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) {
KJUR.crypto = {}
}
KJUR.crypto.ECParameterDB = new function() {
var b = {};
var c = {};
function a(d) {
return new BigInteger(d, 16)
}
this.getByName = function(e) {
var d = e;
if (typeof c[d] != "undefined") {
d = c[e]
}
if (typeof b[d] != "undefined") {
return b[d]
}
throw "unregistered EC curve name: " + d
};
this.regist = function(A, l, o, g, m, e, j, f, k, u, d, x) {
b[A] = {};
var s = a(o);
var z = a(g);
var y = a(m);
var t = a(e);
var w = a(j);
var r = new ECCurveFp(s, z, y);
var q = r.decodePointHex("04" + f + k);
b[A]["name"] = A;
b[A]["keylen"] = l;
b[A]["curve"] = r;
b[A]["G"] = q;
b[A]["n"] = t;
b[A]["h"] = w;
b[A]["oid"] = d;
b[A]["info"] = x;
for (var v = 0; v < u.length; v++) {
c[u[v]] = A
}
}
};
KJUR.crypto.ECParameterDB.regist("secp128r1", 128, "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", "E87579C11079F43DD824993C2CEE5ED3", "FFFFFFFE0000000075A30D1B9038A115", "1", "161FF7528B899B2D0C28607CA52C5B86",
"CF5AC8395BAFEB13C02DA292DDED7A83", [], "", "secp128r1 : SECG curve over a 128 bit prime field");
KJUR.crypto.ECParameterDB.regist("secp160k1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", "0", "7", "0100000000000000000001B8FA16DFAB9ACA16B6B3", "1", "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", "938CF935318FDCED6BC28286531733C3F03C4FEE",
[], "", "secp160k1 : SECG curve over a 160 bit prime field");
KJUR.crypto.ECParameterDB.regist("secp160r1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC", "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", "0100000000000000000001F4C8F927AED3CA752257", "1",
"4A96B5688EF573284664698968C38BB913CBFC82", "23A628553168947D59DCC912042351377AC5FB32", [], "", "secp160r1 : SECG curve over a 160 bit prime field");
KJUR.crypto.ECParameterDB.regist("secp192k1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", "0", "3", "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", "1", "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D",
"9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", []);
KJUR.crypto.ECParameterDB.regist("secp192r1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1",
"FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", "1", "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811", []);
KJUR.crypto.ECParameterDB.regist("secp224r1", 224, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4",
"FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", "1", "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", []);
KJUR.crypto.ECParameterDB.regist("secp256k1", 256, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", "0", "7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", "1",
"79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", []);
KJUR.crypto.ECParameterDB.regist("secp256r1", 256, "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC",
"5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", "1", "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296",
"4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", ["NIST P-256", "P-256", "prime256v1"]);
KJUR.crypto.ECParameterDB.regist("secp384r1", 384, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF",
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF",
"FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", "1", "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7",
"3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", ["NIST P-384", "P-384"]);
KJUR.crypto.ECParameterDB.regist("secp521r1", 521, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF",
"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC",
"051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00",
"1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", "1",
"C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66",
"011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", ["NIST P-521", "P-521"]);
/*! dsa-modified-1.0.1.js (c) Recurity Labs GmbH, Kenji Urushimma | github.com/openpgpjs/openpgpjs/blob/master/LICENSE
*/
if (typeof KJUR == "undefined" || !KJUR) {
KJUR = {}
}
if (typeof KJUR.crypto == "undefined" || !KJUR.crypto) {
KJUR.crypto = {}
}
KJUR.crypto.DSA = function() {
this.p = null;
this.q = null;
this.g = null;
this.y = null;
this.x = null;
this.type = "DSA";
this.setPrivate = function(z, w, v, A, u) {
this.isPrivate = true;
this.p = z;
this.q = w;
this.g = v;
this.y = A;
this.x = u
};
this.setPublic = function(w, v, u, z) {
this.isPublic = true;
this.p = w;
this.q = v;
this.g = u;
this.y = z;
this.x = null
};
this.signWithMessageHash = function(z) {
var v = this.p;
var u = this.q;
var C = this.g;
var D = this.y;
var E = this.x;
var A = z.substr(0, u.bitLength() / 4);
var B = new BigInteger(z, 16);
var w = n(BigInteger.ONE.add(BigInteger.ONE), u.subtract(BigInteger.ONE));
var G = (C.modPow(w, v)).mod(u);
var F = (w.modInverse(u).multiply(B.add(E.multiply(G)))).mod(u);
var H = KJUR.asn1.ASN1Util.jsonToASN1HEX({
seq: [{
"int": {
bigint: G
}
}, {
"int": {
bigint: F
}
}]
});
return H
};
this.verifyWithMessageHash = function(C, B) {
var z = this.p;
var u = this.q;
var G = this.g;
var H = this.y;
var E = this.parseASN1Signature(B);
var K = E[0];
var J = E[1];
var C = C.substr(0, u.bitLength() / 4);
var D = new BigInteger(C, 16);
if (BigInteger.ZERO.compareTo(K) > 0 || K.compareTo(u) > 0 || BigInteger.ZERO.compareTo(J) > 0 || J.compareTo(u) > 0) {
throw "invalid DSA signature"
}
var I = J.modInverse(u);
var A = D.multiply(I).mod(u);
var v = K.multiply(I).mod(u);
var F = G.modPow(A, z).multiply(H.modPow(v, z)).mod(z).mod(u);
return F.compareTo(K) == 0
};
this.parseASN1Signature = function(u) {
try {
var y = new BigInteger(ASN1HEX.getVbyList(u, 0, [0], "02"), 16);
var v = new BigInteger(ASN1HEX.getVbyList(u, 0, [1], "02"), 16);
return [y, v]
} catch (w) {
throw "malformed DSA signature"
}
};
function d(E, w, B, v, u, C) {
var z = KJUR.crypto.Util.hashString(w, E.toLowerCase());
var z = z.substr(0, u.bitLength() / 4);
var A = new BigInteger(z, 16);
var y = n(BigInteger.ONE.add(BigInteger.ONE), u.subtract(BigInteger.ONE));
var F = (B.modPow(y, v)).mod(u);
var D = (y.modInverse(u).multiply(A.add(C.multiply(F)))).mod(u);
var G = new Array();
G[0] = F;
G[1] = D;
return G
}
function r(v) {
var u = openpgp.config.config.prefer_hash_algorithm;
switch (Math.round(v.bitLength() / 8)) {
case 20:
if (u != 2 && u > 11 && u != 10 && u < 8) {
return 2
}
return u;
case 28:
if (u > 11 && u < 8) {
return 11
}
return u;
case 32:
if (u > 10 && u < 8) {
return 8
}
return u;
default:
util.print_debug("DSA select hash algorithm: returning null for an unknown length of q");
return null
}
}
this.select_hash_algorithm = r;
function m(I, K, J, B, z, u, F, G) {
var C = KJUR.crypto.Util.hashString(B, I.toLowerCase());
var C = C.substr(0, u.bitLength() / 4);
var D = new BigInteger(C, 16);
if (BigInteger.ZERO.compareTo(K) > 0 || K.compareTo(u) > 0 || BigInteger.ZERO.compareTo(J) > 0 || J.compareTo(u) > 0) {
util.print_error("invalid DSA Signature");
return null
}
var H = J.modInverse(u);
var A = D.multiply(H).mod(u);
var v = K.multiply(H).mod(u);
var E = F.modPow(A, z).multiply(G.modPow(v, z)).mod(z).mod(u);
return E.compareTo(K) == 0
}
function a(z) {
var A = new BigInteger(z, primeCenterie);
var y = j(q, 512);
var u = t(p, q, z);
var v;
do {
v = new BigInteger(q.bitCount(), rand)
} while (x.compareTo(BigInteger.ZERO) != 1 && x.compareTo(q) != -1);
var w = g.modPow(x, p);
return {
x: v,
q: A,
p: y,
g: u,
y: w
}
}
function j(y, z, w) {
if (z % 64 != 0) {
return false
}
var u;
var v;
do {
u = w(bitcount, true);
v = u.subtract(BigInteger.ONE);
u = u.subtract(v.remainder(y))
} while (!u.isProbablePrime(primeCenterie) || u.bitLength() != l);
return u
}
function t(B, z, A, w) {
var u = B.subtract(BigInteger.ONE);
var y = u.divide(z);
var v;
do {
v = w(A)
} while (v.compareTo(u) != -1 && v.compareTo(BigInteger.ONE) != 1);
return v.modPow(y, B)
}
function o(w, y, u) {
var v;
do {
v = u(y, false)
} while (v.compareTo(w) != -1 && v.compareTo(BigInteger.ZERO) != 1);
return v
}
function i(v, w) {
k = o(v);
var u = g.modPow(k, w).mod(v);
return u
}
function h(B, w, y, v, z, u) {
var A = B(v);
s = (w.modInverse(z).multiply(A.add(u.multiply(y)))).mod(z);
return s
}
this.sign = d;
this.verify = m;
function n(w, u) {
if (u.compareTo(w) <= 0) {
return
}
var v = u.subtract(w);
var y = e(v.bitLength());
while (y > v) {
y = e(v.bitLength())
}
return w.add(y)
}
function e(w) {
if (w < 0) {
return null
}
var u = Math.floor((w + 7) / 8);
var v = c(u);
if (w % 8 > 0) {
v = String.fromCharCode((Math.pow(2, w % 8) - 1) & v.charCodeAt(0)) + v.substring(1)
}
return new BigInteger(f(v), 16)
}
function c(w) {
var u = "";
for (var v = 0; v < w; v++) {
u += String.fromCharCode(b())
}
return u
}
function b() {
var u = new Uint32Array(1);
window.crypto.getRandomValues(u);
return u[0] & 255
}
function f(y) {
if (y == null) {
return ""
}
var v = [];
var w = y.length;
var z = 0;
var u;
while (z < w) {
u = y[z++].charCodeAt().toString(16);
while (u.length < 2) {
u = "0" + u
}
v.push("" + u)
}
return v.join("")
}
this.getRandomBigIntegerInRange = n;
this.getRandomBigInteger = e;
this.getRandomBytes = c
};
/*! pkcs5pkey-1.0.6.js (c) 2013-2014 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
var PKCS5PKEY = function() {
var c = function(n, p, o) {
return i(CryptoJS.AES, n, p, o)
};
var d = function(n, p, o) {
return i(CryptoJS.TripleDES, n, p, o)
};
var i = function(q, v, s, o) {
var p = CryptoJS.enc.Hex.parse(v);
var u = CryptoJS.enc.Hex.parse(s);
var n = CryptoJS.enc.Hex.parse(o);
var r = {};
r.key = u;
r.iv = n;
r.ciphertext = p;
var t = q.decrypt(r, u, {
iv: n
});
return CryptoJS.enc.Hex.stringify(t)
};
var j = function(n, p, o) {
return e(CryptoJS.AES, n, p, o)
};
var m = function(n, p, o) {
return e(CryptoJS.TripleDES, n, p, o)
};
var e = function(s, x, v, p) {
var r = CryptoJS.enc.Hex.parse(x);
var w = CryptoJS.enc.Hex.parse(v);
var o = CryptoJS.enc.Hex.parse(p);
var n = {};
var u = s.encrypt(r, w, {
iv: o
});
var q = CryptoJS.enc.Hex.parse(u.toString());
var t = CryptoJS.enc.Base64.stringify(q);
return t
};
var g = {
"AES-256-CBC": {
proc: c,
eproc: j,
keylen: 32,
ivlen: 16
},
"AES-192-CBC": {
proc: c,
eproc: j,
keylen: 24,
ivlen: 16
},
"AES-128-CBC": {
proc: c,
eproc: j,
keylen: 16,
ivlen: 16
},
"DES-EDE3-CBC": {
proc: d,
eproc: m,
keylen: 24,
ivlen: 8
}
};
var b = function(n) {
return g[n]["proc"]
};
var k = function(n) {
var p = CryptoJS.lib.WordArray.random(n);
var o = CryptoJS.enc.Hex.stringify(p);
return o
};
var l = function(q) {
var r = {};
if (q.match(new RegExp("DEK-Info: ([^,]+),([0-9A-Fa-f]+)", "m"))) {
r.cipher = RegExp.$1;
r.ivsalt = RegExp.$2
}
if (q.match(new RegExp("-----BEGIN ([A-Z]+) PRIVATE KEY-----"))) {
r.type = RegExp.$1
}
var p = -1;
var t = 0;
if (q.indexOf("\r\n\r\n") != -1) {
p = q.indexOf("\r\n\r\n");
t = 2
}
if (q.indexOf("\n\n") != -1) {
p = q.indexOf("\n\n");
t = 1
}
var o = q.indexOf("-----END");
if (p != -1 && o != -1) {
var n = q.substring(p + t * 2, o - t);
n = n.replace(/\s+/g, "");
r.data = n
}
return r
};
var h = function(o, w, n) {
var t = n.substring(0, 16);
var r = CryptoJS.enc.Hex.parse(t);
var p = CryptoJS.enc.Utf8.parse(w);
var s = g[o]["keylen"] + g[o]["ivlen"];
var v = "";
var u = null;
for (;;) {
var q = CryptoJS.algo.MD5.create();
if (u != null) {
q.update(u)
}
q.update(p);
q.update(r);
u = q.finalize();
v = v + CryptoJS.enc.Hex.stringify(u);
if (v.length >= s * 2) {
break
}
}
var x = {};
x.keyhex = v.substr(0, g[o]["keylen"] * 2);
x.ivhex = v.substr(g[o]["keylen"] * 2, g[o]["ivlen"] * 2);
return x
};
var a = function(n, t, p, u) {
var q = CryptoJS.enc.Base64.parse(n);
var o = CryptoJS.enc.Hex.stringify(q);
var s = g[t]["proc"];
var r = s(o, p, u);
return r
};
var f = function(n, q, o, s) {
var p = g[q]["eproc"];
var r = p(n, o, s);
return r
};
return {
version: "1.0.5",
getHexFromPEM: function(o, r) {
var p = o;
if (p.indexOf("BEGIN " + r) == -1) {
throw "can't find PEM header: " + r
}
p = p.replace("-----BEGIN " + r + "-----", "");
p = p.replace("-----END " + r + "-----", "");
var q = p.replace(/\s+/g, "");
var n = b64tohex(q);
return n
},
getDecryptedKeyHexByKeyIV: function(o, r, q, p) {
var n = b(r);
return n(o, q, p)
},
parsePKCS5PEM: function(n) {
return l(n)
},
getKeyAndUnusedIvByPasscodeAndIvsalt: function(o, n, p) {
return h(o, n, p)
},
decryptKeyB64: function(n, p, o, q) {
return a(n, p, o, q)
},
getDecryptedKeyHex: function(w, v) {
var o = l(w);
var r = o.type;
var p = o.cipher;
var n = o.ivsalt;
var q = o.data;
var u = h(p, v, n);
var t = u.keyhex;
var s = a(q, p, t, n);
return s
},
getRSAKeyFromEncryptedPKCS5PEM: function(p, o) {
var q = this.getDecryptedKeyHex(p, o);
var n = new RSAKey();
n.readPrivateKeyFromASN1HexString(q);
return n
},
getEryptedPKCS5PEMFromPrvKeyHex: function(q, x, r, p) {
var n = "";
if (typeof r == "undefined" || r == null) {
r = "AES-256-CBC"
}
if (typeof g[r] == "undefined") {
throw "PKCS5PKEY unsupported algorithm: " + r
}
if (typeof p == "undefined" || p == null) {
var t = g[r]["ivlen"];
var s = k(t);
p = s.toUpperCase()
}
var w = h(r, x, p);
var v = w.keyhex;
var u = f(q, r, v, p);
var o = u.replace(/(.{64})/g, "$1\r\n");
var n = "-----BEGIN RSA PRIVATE KEY-----\r\n";
n += "Proc-Type: 4,ENCRYPTED\r\n";
n += "DEK-Info: " + r + "," + p + "\r\n";
n += "\r\n";
n += o;
n += "\r\n-----END RSA PRIVATE KEY-----\r\n";
return n
},
getEryptedPKCS5PEMFromRSAKey: function(C, D, o, s) {
var A = new KJUR.asn1.DERInteger({
"int": 0
});
var v = new KJUR.asn1.DERInteger({
bigint: C.n
});
var z = new KJUR.asn1.DERInteger({
"int": C.e
});
var B = new KJUR.asn1.DERInteger({
bigint: C.d
});
var t = new KJUR.asn1.DERInteger({
bigint: C.p
});
var r = new KJUR.asn1.DERInteger({
bigint: C.q
});
var y = new KJUR.asn1.DERInteger({
bigint: C.dmp1
});
var u = new KJUR.asn1.DERInteger({
bigint: C.dmq1
});
var x = new KJUR.asn1.DERInteger({
bigint: C.coeff
});
var E = new KJUR.asn1.DERSequence({
array: [A, v, z, B, t, r, y, u, x]
});
var w = E.getEncodedHex();
return this.getEryptedPKCS5PEMFromPrvKeyHex(w, D, o, s)
},
newEncryptedPKCS5PEM: function(n, o, r, s) {
if (typeof o == "undefined" || o == null) {
o = 1024
}
if (typeof r == "undefined" || r == null) {
r = "10001"
}
var p = new RSAKey();
p.generate(o, r);
var q = null;
if (typeof s == "undefined" || s == null) {
q = this.getEncryptedPKCS5PEMFromRSAKey(pkey, n)
} else {
q = this.getEncryptedPKCS5PEMFromRSAKey(pkey, n, s)
}
return q
},
getRSAKeyFromPlainPKCS8PEM: function(p) {
if (p.match(/ENCRYPTED/)) {
throw "pem shall be not ENCRYPTED"
}
var o = this.getHexFromPEM(p, "PRIVATE KEY");
var n = this.getRSAKeyFromPlainPKCS8Hex(o);
return n
},
getRSAKeyFromPlainPKCS8Hex: function(q) {
var p = ASN1HEX.getPosArrayOfChildren_AtObj(q, 0);
if (p.length != 3) {
throw "outer DERSequence shall have 3 elements: " + p.length
}
var o = ASN1HEX.getHexOfTLV_AtObj(q, p[1]);
if (o != "300d06092a864886f70d0101010500") {
throw "PKCS8 AlgorithmIdentifier is not rsaEnc: " + o
}
var o = ASN1HEX.getHexOfTLV_AtObj(q, p[1]);
var r = ASN1HEX.getHexOfTLV_AtObj(q, p[2]);
var s = ASN1HEX.getHexOfV_AtObj(r, 0);
var n = new RSAKey();
n.readPrivateKeyFromASN1HexString(s);
return n
},
parseHexOfEncryptedPKCS8: function(u) {
var q = {};
var p = ASN1HEX.getPosArrayOfChildren_AtObj(u, 0);
if (p.length != 2) {
throw "malformed format: SEQUENCE(0).items != 2: " + p.length
}
q.ciphertext = ASN1HEX.getHexOfV_AtObj(u, p[1]);
var w = ASN1HEX.getPosArrayOfChildren_AtObj(u, p[0]);
if (w.length != 2) {
throw "malformed format: SEQUENCE(0.0).items != 2: " + w.length
}
if (ASN1HEX.getHexOfV_AtObj(u, w[0]) != "2a864886f70d01050d") {
throw "this only supports pkcs5PBES2"
}
var n = ASN1HEX.getPosArrayOfChildren_AtObj(u, w[1]);
if (w.length != 2) {
throw "malformed format: SEQUENCE(0.0.1).items != 2: " + n.length
}
var o = ASN1HEX.getPosArrayOfChildren_AtObj(u, n[1]);
if (o.length != 2) {
throw "malformed format: SEQUENCE(0.0.1.1).items != 2: " + o.length
}
if (ASN1HEX.getHexOfV_AtObj(u, o[0]) != "2a864886f70d0307") {
throw "this only supports TripleDES"
}
q.encryptionSchemeAlg = "TripleDES";
q.encryptionSchemeIV = ASN1HEX.getHexOfV_AtObj(u, o[1]);
var r = ASN1HEX.getPosArrayOfChildren_AtObj(u, n[0]);
if (r.length != 2) {
throw "malformed format: SEQUENCE(0.0.1.0).items != 2: " + r.length
}
if (ASN1HEX.getHexOfV_AtObj(u, r[0]) != "2a864886f70d01050c") {
throw "this only supports pkcs5PBKDF2"
}
var v = ASN1HEX.getPosArrayOfChildren_AtObj(u, r[1]);
if (v.length < 2) {
throw "malformed format: SEQUENCE(0.0.1.0.1).items < 2: " + v.length
}
q.pbkdf2Salt = ASN1HEX.getHexOfV_AtObj(u, v[0]);
var s = ASN1HEX.getHexOfV_AtObj(u, v[1]);
try {
q.pbkdf2Iter = parseInt(s, 16)
} catch (t) {
throw "malformed format pbkdf2Iter: " + s
}
return q
},
getPBKDF2KeyHexFromParam: function(s, n) {
var r = CryptoJS.enc.Hex.parse(s.pbkdf2Salt);
var o = s.pbkdf2Iter;
var q = CryptoJS.PBKDF2(n, r, {
keySize: 192 / 32,
iterations: o
});
var p = CryptoJS.enc.Hex.stringify(q);
return p
},
getPlainPKCS8HexFromEncryptedPKCS8PEM: function(v, w) {
var p = this.getHexFromPEM(v, "ENCRYPTED PRIVATE KEY");
var n = this.parseHexOfEncryptedPKCS8(p);
var s = PKCS5PKEY.getPBKDF2KeyHexFromParam(n, w);
var t = {};
t.ciphertext = CryptoJS.enc.Hex.parse(n.ciphertext);
var r = CryptoJS.enc.Hex.parse(s);
var q = CryptoJS.enc.Hex.parse(n.encryptionSchemeIV);
var u = CryptoJS.TripleDES.decrypt(t, r, {
iv: q
});
var o = CryptoJS.enc.Hex.stringify(u);
return o
},
getRSAKeyFromEncryptedPKCS8PEM: function(q, p) {
var o = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(q, p);
var n = this.getRSAKeyFromPlainPKCS8Hex(o);
return n
},
getKeyFromEncryptedPKCS8PEM: function(q, o) {
var n = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(q, o);
var p = this.getKeyFromPlainPrivatePKCS8Hex(n);
return p
},
parsePlainPrivatePKCS8Hex: function(q) {
var o = {};
o.algparam = null;
if (q.substr(0, 2) != "30") {
throw "malformed plain PKCS8 private key(code:001)"
}
var p = ASN1HEX.getPosArrayOfChildren_AtObj(q, 0);
if (p.length != 3) {
throw "malformed plain PKCS8 private key(code:002)"
}
if (q.substr(p[1], 2) != "30") {
throw "malformed PKCS8 private key(code:003)"
}
var n = ASN1HEX.getPosArrayOfChildren_AtObj(q, p[1]);
if (n.length != 2) {
throw "malformed PKCS8 private key(code:004)"
}
if (q.substr(n[0], 2) != "06") {
throw "malformed PKCS8 private key(code:005)"
}
o.algoid = ASN1HEX.getHexOfV_AtObj(q, n[0]);
if (q.substr(n[1], 2) == "06") {
o.algparam = ASN1HEX.getHexOfV_AtObj(q, n[1])
}
if (q.substr(p[2], 2) != "04") {
throw "malformed PKCS8 private key(code:006)"
}
o.keyidx = ASN1HEX.getStartPosOfV_AtObj(q, p[2]);
return o
},
getKeyFromPlainPrivatePKCS8PEM: function(o) {
var n = this.getHexFromPEM(o, "PRIVATE KEY");
var p = this.getKeyFromPlainPrivatePKCS8Hex(n);
return p
},
getKeyFromPlainPrivatePKCS8Hex: function(n) {
var p = this.parsePlainPrivatePKCS8Hex(n);
if (p.algoid == "2a864886f70d010101") {
this.parsePrivateRawRSAKeyHexAtObj(n, p);
var o = p.key;
var q = new RSAKey();
q.setPrivateEx(o.n, o.e, o.d, o.p, o.q, o.dp, o.dq, o.co);
return q
} else {
if (p.algoid == "2a8648ce3d0201") {
this.parsePrivateRawECKeyHexAtObj(n, p);
if (KJUR.crypto.OID.oidhex2name[p.algparam] === undefined) {
throw "KJUR.crypto.OID.oidhex2name undefined: " + p.algparam
}
var r = KJUR.crypto.OID.oidhex2name[p.algparam];
var q = new KJUR.crypto.ECDSA({
curve: r,
prv: p.key
});
return q
} else {
throw "unsupported private key algorithm"
}
}
},
getRSAKeyFromPublicPKCS8PEM: function(o) {
var p = this.getHexFromPEM(o, "PUBLIC KEY");
var n = this.getRSAKeyFromPublicPKCS8Hex(p);
return n
},
getKeyFromPublicPKCS8PEM: function(o) {
var p = this.getHexFromPEM(o, "PUBLIC KEY");
var n = this.getKeyFromPublicPKCS8Hex(p);
return n
},
getKeyFromPublicPKCS8Hex: function(o) {
var n = this.parsePublicPKCS8Hex(o);
if (n.algoid == "2a864886f70d010101") {
var r = this.parsePublicRawRSAKeyHex(n.key);
var p = new RSAKey();
p.setPublic(r.n, r.e);
return p
} else {
if (n.algoid == "2a8648ce3d0201") {
if (KJUR.crypto.OID.oidhex2name[n.algparam] === undefined) {
throw "KJUR.crypto.OID.oidhex2name undefined: " + n.algparam
}
var q = KJUR.crypto.OID.oidhex2name[n.algparam];
var p = new KJUR.crypto.ECDSA({
curve: q,
pub: n.key
});
return p
} else {
throw "unsupported public key algorithm"
}
}
},
parsePublicRawRSAKeyHex: function(p) {
var n = {};
if (p.substr(0, 2) != "30") {
throw "malformed RSA key(code:001)"
}
var o = ASN1HEX.getPosArrayOfChildren_AtObj(p, 0);
if (o.length != 2) {
throw "malformed RSA key(code:002)"
}
if (p.substr(o[0], 2) != "02") {
throw "malformed RSA key(code:003)"
}
n.n = ASN1HEX.getHexOfV_AtObj(p, o[0]);
if (p.substr(o[1], 2) != "02") {
throw "malformed RSA key(code:004)"
}
n.e = ASN1HEX.getHexOfV_AtObj(p, o[1]);
return n
},
parsePrivateRawRSAKeyHexAtObj: function(o, q) {
var p = q.keyidx;
if (o.substr(p, 2) != "30") {
throw "malformed RSA private key(code:001)"
}
var n = ASN1HEX.getPosArrayOfChildren_AtObj(o, p);
if (n.length != 9) {
throw "malformed RSA private key(code:002)"
}
q.key = {};
q.key.n = ASN1HEX.getHexOfV_AtObj(o, n[1]);
q.key.e = ASN1HEX.getHexOfV_AtObj(o, n[2]);
q.key.d = ASN1HEX.getHexOfV_AtObj(o, n[3]);
q.key.p = ASN1HEX.getHexOfV_AtObj(o, n[4]);
q.key.q = ASN1HEX.getHexOfV_AtObj(o, n[5]);
q.key.dp = ASN1HEX.getHexOfV_AtObj(o, n[6]);
q.key.dq = ASN1HEX.getHexOfV_AtObj(o, n[7]);
q.key.co = ASN1HEX.getHexOfV_AtObj(o, n[8])
},
parsePrivateRawECKeyHexAtObj: function(o, q) {
var p = q.keyidx;
if (o.substr(p, 2) != "30") {
throw "malformed ECC private key(code:001)"
}
var n = ASN1HEX.getPosArrayOfChildren_AtObj(o, p);
if (n.length != 3) {
throw "malformed ECC private key(code:002)"
}
if (o.substr(n[1], 2) != "04") {
throw "malformed ECC private key(code:003)"
}
q.key = ASN1HEX.getHexOfV_AtObj(o, n[1])
},
parsePublicPKCS8Hex: function(q) {
var o = {};
o.algparam = null;
var p = ASN1HEX.getPosArrayOfChildren_AtObj(q, 0);
if (p.length != 2) {
throw "outer DERSequence shall have 2 elements: " + p.length
}
var r = p[0];
if (q.substr(r, 2) != "30") {
throw "malformed PKCS8 public key(code:001)"
}
var n = ASN1HEX.getPosArrayOfChildren_AtObj(q, r);
if (n.length != 2) {
throw "malformed PKCS8 public key(code:002)"
}
if (q.substr(n[0], 2) != "06") {
throw "malformed PKCS8 public key(code:003)"
}
o.algoid = ASN1HEX.getHexOfV_AtObj(q, n[0]);
if (q.substr(n[1], 2) == "06") {
o.algparam = ASN1HEX.getHexOfV_AtObj(q, n[1])
}
if (q.substr(p[1], 2) != "03") {
throw "malformed PKCS8 public key(code:004)"
}
o.key = ASN1HEX.getHexOfV_AtObj(q, p[1]).substr(2);
return o
},
getRSAKeyFromPublicPKCS8Hex: function(r) {
var q = ASN1HEX.getPosArrayOfChildren_AtObj(r, 0);
if (q.length != 2) {
throw "outer DERSequence shall have 2 elements: " + q.length
}
var p = ASN1HEX.getHexOfTLV_AtObj(r, q[0]);
if (p != "300d06092a864886f70d0101010500") {
throw "PKCS8 AlgorithmId is not rsaEncryption"
}
if (r.substr(q[1], 2) != "03") {
throw "PKCS8 Public Key is not BITSTRING encapslated."
}
var t = ASN1HEX.getStartPosOfV_AtObj(r, q[1]) + 2;
if (r.substr(t, 2) != "30") {
throw "PKCS8 Public Key is not SEQUENCE."
}
var n = ASN1HEX.getPosArrayOfChildren_AtObj(r, t);
if (n.length != 2) {
throw "inner DERSequence shall have 2 elements: " + n.length
}
if (r.substr(n[0], 2) != "02") {
throw "N is not ASN.1 INTEGER"
}
if (r.substr(n[1], 2) != "02") {
throw "E is not ASN.1 INTEGER"
}
var u = ASN1HEX.getHexOfV_AtObj(r, n[0]);
var s = ASN1HEX.getHexOfV_AtObj(r, n[1]);
var o = new RSAKey();
o.setPublic(u, s);
return o
}
}
}();
/*! keyutil-1.0.7.js (c) 2013-2014 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
var KEYUTIL = function() {
var d = function(p, r, q) {
return k(CryptoJS.AES, p, r, q)
};
var e = function(p, r, q) {
return k(CryptoJS.TripleDES, p, r, q)
};
var a = function(p, r, q) {
return k(CryptoJS.DES, p, r, q)
};
var k = function(s, x, u, q) {
var r = CryptoJS.enc.Hex.parse(x);
var w = CryptoJS.enc.Hex.parse(u);
var p = CryptoJS.enc.Hex.parse(q);
var t = {};
t.key = w;
t.iv = p;
t.ciphertext = r;
var v = s.decrypt(t, w, {
iv: p
});
return CryptoJS.enc.Hex.stringify(v)
};
var l = function(p, r, q) {
return g(CryptoJS.AES, p, r, q)
};
var o = function(p, r, q) {
return g(CryptoJS.TripleDES, p, r, q)
};
var f = function(p, r, q) {
return g(CryptoJS.DES, p, r, q)
};
var g = function(t, y, v, q) {
var s = CryptoJS.enc.Hex.parse(y);
var x = CryptoJS.enc.Hex.parse(v);
var p = CryptoJS.enc.Hex.parse(q);
var w = t.encrypt(s, x, {
iv: p
});
var r = CryptoJS.enc.Hex.parse(w.toString());
var u = CryptoJS.enc.Base64.stringify(r);
return u
};
var i = {
"AES-256-CBC": {
proc: d,
eproc: l,
keylen: 32,
ivlen: 16
},
"AES-192-CBC": {
proc: d,
eproc: l,
keylen: 24,
ivlen: 16
},
"AES-128-CBC": {
proc: d,
eproc: l,
keylen: 16,
ivlen: 16
},
"DES-EDE3-CBC": {
proc: e,
eproc: o,
keylen: 24,
ivlen: 8
},
"DES-CBC": {
proc: a,
eproc: f,
keylen: 8,
ivlen: 8
}
};
var c = function(p) {
return i[p]["proc"]
};
var m = function(p) {
var r = CryptoJS.lib.WordArray.random(p);
var q = CryptoJS.enc.Hex.stringify(r);
return q
};
var n = function(t) {
var u = {};
if (t.match(new RegExp("DEK-Info: ([^,]+),([0-9A-Fa-f]+)", "m"))) {
u.cipher = RegExp.$1;
u.ivsalt = RegExp.$2
}
if (t.match(new RegExp("-----BEGIN ([A-Z]+) PRIVATE KEY-----"))) {
u.type = RegExp.$1
}
var r = -1;
var v = 0;
if (t.indexOf("\r\n\r\n") != -1) {
r = t.indexOf("\r\n\r\n");
v = 2
}
if (t.indexOf("\n\n") != -1) {
r = t.indexOf("\n\n");
v = 1
}
var q = t.indexOf("-----END");
if (r != -1 && q != -1) {
var p = t.substring(r + v * 2, q - v);
p = p.replace(/\s+/g, "");
u.data = p
}
return u
};
var j = function(q, y, p) {
var v = p.substring(0, 16);
var t = CryptoJS.enc.Hex.parse(v);
var r = CryptoJS.enc.Utf8.parse(y);
var u = i[q]["keylen"] + i[q]["ivlen"];
var x = "";
var w = null;
for (;;) {
var s = CryptoJS.algo.MD5.create();
if (w != null) {
s.update(w)
}
s.update(r);
s.update(t);
w = s.finalize();
x = x + CryptoJS.enc.Hex.stringify(w);
if (x.length >= u * 2) {
break
}
}
var z = {};
z.keyhex = x.substr(0, i[q]["keylen"] * 2);
z.ivhex = x.substr(i[q]["keylen"] * 2, i[q]["ivlen"] * 2);
return z
};
var b = function(p, v, r, w) {
var s = CryptoJS.enc.Base64.parse(p);
var q = CryptoJS.enc.Hex.stringify(s);
var u = i[v]["proc"];
var t = u(q, r, w);
return t
};
var h = function(p, s, q, u) {
var r = i[s]["eproc"];
var t = r(p, q, u);
return t
};
return {
version: "1.0.0",
getHexFromPEM: function(q, u) {
var r = q;
if (r.indexOf("-----BEGIN ") == -1) {
throw "can't find PEM header: " + u
}
if (typeof u == "string" && u != "") {
r = r.replace("-----BEGIN " + u + "-----", "");
r = r.replace("-----END " + u + "-----", "")
} else {
r = r.replace(/-----BEGIN [^-]+-----/, "");
r = r.replace(/-----END [^-]+-----/, "")
}
var t = r.replace(/\s+/g, "");
var p = b64tohex(t);
return p
},
getDecryptedKeyHexByKeyIV: function(q, t, s, r) {
var p = c(t);
return p(q, s, r)
},
parsePKCS5PEM: function(p) {
return n(p)
},
getKeyAndUnusedIvByPasscodeAndIvsalt: function(q, p, r) {
return j(q, p, r)
},
decryptKeyB64: function(p, r, q, s) {
return b(p, r, q, s)
},
getDecryptedKeyHex: function(y, x) {
var q = n(y);
var t = q.type;
var r = q.cipher;
var p = q.ivsalt;
var s = q.data;
var w = j(r, x, p);
var v = w.keyhex;
var u = b(s, r, v, p);
return u
},
getRSAKeyFromEncryptedPKCS5PEM: function(r, q) {
var s = this.getDecryptedKeyHex(r, q);
var p = new RSAKey();
p.readPrivateKeyFromASN1HexString(s);
return p
},
getEncryptedPKCS5PEMFromPrvKeyHex: function(x, s, A, t, r) {
var p = "";
if (typeof t == "undefined" || t == null) {
t = "AES-256-CBC"
}
if (typeof i[t] == "undefined") {
throw "KEYUTIL unsupported algorithm: " + t
}
if (typeof r == "undefined" || r == null) {
var v = i[t]["ivlen"];
var u = m(v);
r = u.toUpperCase()
}
var z = j(t, A, r);
var y = z.keyhex;
var w = h(s, t, y, r);
var q = w.replace(/(.{64})/g, "$1\r\n");
var p = "-----BEGIN " + x + " PRIVATE KEY-----\r\n";
p += "Proc-Type: 4,ENCRYPTED\r\n";
p += "DEK-Info: " + t + "," + r + "\r\n";
p += "\r\n";
p += q;
p += "\r\n-----END " + x + " PRIVATE KEY-----\r\n";
return p
},
getEncryptedPKCS5PEMFromRSAKey: function(D, E, r, t) {
var B = new KJUR.asn1.DERInteger({
"int": 0
});
var w = new KJUR.asn1.DERInteger({
bigint: D.n
});
var A = new KJUR.asn1.DERInteger({
"int": D.e
});
var C = new KJUR.asn1.DERInteger({
bigint: D.d
});
var u = new KJUR.asn1.DERInteger({
bigint: D.p
});
var s = new KJUR.asn1.DERInteger({
bigint: D.q
});
var z = new KJUR.asn1.DERInteger({
bigint: D.dmp1
});
var v = new KJUR.asn1.DERInteger({
bigint: D.dmq1
});
var y = new KJUR.asn1.DERInteger({
bigint: D.coeff
});
var F = new KJUR.asn1.DERSequence({
array: [B, w, A, C, u, s, z, v, y]
});
var x = F.getEncodedHex();
return this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA", x, E, r, t)
},
newEncryptedPKCS5PEM: function(p, q, t, u) {
if (typeof q == "undefined" || q == null) {
q = 1024
}
if (typeof t == "undefined" || t == null) {
t = "10001"
}
var r = new RSAKey();
r.generate(q, t);
var s = null;
if (typeof u == "undefined" || u == null) {
s = this.getEncryptedPKCS5PEMFromRSAKey(r, p)
} else {
s = this.getEncryptedPKCS5PEMFromRSAKey(r, p, u)
}
return s
},
getRSAKeyFromPlainPKCS8PEM: function(r) {
if (r.match(/ENCRYPTED/)) {
throw "pem shall be not ENCRYPTED"
}
var q = this.getHexFromPEM(r, "PRIVATE KEY");
var p = this.getRSAKeyFromPlainPKCS8Hex(q);
return p
},
getRSAKeyFromPlainPKCS8Hex: function(s) {
var r = ASN1HEX.getPosArrayOfChildren_AtObj(s, 0);
if (r.length != 3) {
throw "outer DERSequence shall have 3 elements: " + r.length
}
var q = ASN1HEX.getHexOfTLV_AtObj(s, r[1]);
if (q != "300d06092a864886f70d0101010500") {
throw "PKCS8 AlgorithmIdentifier is not rsaEnc: " + q
}
var q = ASN1HEX.getHexOfTLV_AtObj(s, r[1]);
var t = ASN1HEX.getHexOfTLV_AtObj(s, r[2]);
var u = ASN1HEX.getHexOfV_AtObj(t, 0);
var p = new RSAKey();
p.readPrivateKeyFromASN1HexString(u);
return p
},
parseHexOfEncryptedPKCS8: function(w) {
var s = {};
var r = ASN1HEX.getPosArrayOfChildren_AtObj(w, 0);
if (r.length != 2) {
throw "malformed format: SEQUENCE(0).items != 2: " + r.length
}
s.ciphertext = ASN1HEX.getHexOfV_AtObj(w, r[1]);
var y = ASN1HEX.getPosArrayOfChildren_AtObj(w, r[0]);
if (y.length != 2) {
throw "malformed format: SEQUENCE(0.0).items != 2: " + y.length
}
if (ASN1HEX.getHexOfV_AtObj(w, y[0]) != "2a864886f70d01050d") {
throw "this only supports pkcs5PBES2"
}
var p = ASN1HEX.getPosArrayOfChildren_AtObj(w, y[1]);
if (y.length != 2) {
throw "malformed format: SEQUENCE(0.0.1).items != 2: " + p.length
}
var q = ASN1HEX.getPosArrayOfChildren_AtObj(w, p[1]);
if (q.length != 2) {
throw "malformed format: SEQUENCE(0.0.1.1).items != 2: " + q.length
}
if (ASN1HEX.getHexOfV_AtObj(w, q[0]) != "2a864886f70d0307") {
throw "this only supports TripleDES"
}
s.encryptionSchemeAlg = "TripleDES";
s.encryptionSchemeIV = ASN1HEX.getHexOfV_AtObj(w, q[1]);
var t = ASN1HEX.getPosArrayOfChildren_AtObj(w, p[0]);
if (t.length != 2) {
throw "malformed format: SEQUENCE(0.0.1.0).items != 2: " + t.length
}
if (ASN1HEX.getHexOfV_AtObj(w, t[0]) != "2a864886f70d01050c") {
throw "this only supports pkcs5PBKDF2"
}
var x = ASN1HEX.getPosArrayOfChildren_AtObj(w, t[1]);
if (x.length < 2) {
throw "malformed format: SEQUENCE(0.0.1.0.1).items < 2: " + x.length
}
s.pbkdf2Salt = ASN1HEX.getHexOfV_AtObj(w, x[0]);
var u = ASN1HEX.getHexOfV_AtObj(w, x[1]);
try {
s.pbkdf2Iter = parseInt(u, 16)
} catch (v) {
throw "malformed format pbkdf2Iter: " + u
}
return s
},
getPBKDF2KeyHexFromParam: function(u, p) {
var t = CryptoJS.enc.Hex.parse(u.pbkdf2Salt);
var q = u.pbkdf2Iter;
var s = CryptoJS.PBKDF2(p, t, {
keySize: 192 / 32,
iterations: q
});
var r = CryptoJS.enc.Hex.stringify(s);
return r
},
getPlainPKCS8HexFromEncryptedPKCS8PEM: function(x, y) {
var r = this.getHexFromPEM(x, "ENCRYPTED PRIVATE KEY");
var p = this.parseHexOfEncryptedPKCS8(r);
var u = KEYUTIL.getPBKDF2KeyHexFromParam(p, y);
var v = {};
v.ciphertext = CryptoJS.enc.Hex.parse(p.ciphertext);
var t = CryptoJS.enc.Hex.parse(u);
var s = CryptoJS.enc.Hex.parse(p.encryptionSchemeIV);
var w = CryptoJS.TripleDES.decrypt(v, t, {
iv: s
});
var q = CryptoJS.enc.Hex.stringify(w);
return q
},
getRSAKeyFromEncryptedPKCS8PEM: function(s, r) {
var q = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(s, r);
var p = this.getRSAKeyFromPlainPKCS8Hex(q);
return p
},
getKeyFromEncryptedPKCS8PEM: function(s, q) {
var p = this.getPlainPKCS8HexFromEncryptedPKCS8PEM(s, q);
var r = this.getKeyFromPlainPrivatePKCS8Hex(p);
return r
},
parsePlainPrivatePKCS8Hex: function(s) {
var q = {};
q.algparam = null;
if (s.substr(0, 2) != "30") {
throw "malformed plain PKCS8 private key(code:001)"
}
var r = ASN1HEX.getPosArrayOfChildren_AtObj(s, 0);
if (r.length != 3) {
throw "malformed plain PKCS8 private key(code:002)"
}
if (s.substr(r[1], 2) != "30") {
throw "malformed PKCS8 private key(code:003)"
}
var p = ASN1HEX.getPosArrayOfChildren_AtObj(s, r[1]);
if (p.length != 2) {
throw "malformed PKCS8 private key(code:004)"
}
if (s.substr(p[0], 2) != "06") {
throw "malformed PKCS8 private key(code:005)"
}
q.algoid = ASN1HEX.getHexOfV_AtObj(s, p[0]);
if (s.substr(p[1], 2) == "06") {
q.algparam = ASN1HEX.getHexOfV_AtObj(s, p[1])
}
if (s.substr(r[2], 2) != "04") {
throw "malformed PKCS8 private key(code:006)"
}
q.keyidx = ASN1HEX.getStartPosOfV_AtObj(s, r[2]);
return q
},
getKeyFromPlainPrivatePKCS8PEM: function(q) {
var p = this.getHexFromPEM(q, "PRIVATE KEY");
var r = this.getKeyFromPlainPrivatePKCS8Hex(p);
return r
},
getKeyFromPlainPrivatePKCS8Hex: function(p) {
var w = this.parsePlainPrivatePKCS8Hex(p);
if (w.algoid == "2a864886f70d010101") {
this.parsePrivateRawRSAKeyHexAtObj(p, w);
var u = w.key;
var z = new RSAKey();
z.setPrivateEx(u.n, u.e, u.d, u.p, u.q, u.dp, u.dq, u.co);
return z
} else {
if (w.algoid == "2a8648ce3d0201") {
this.parsePrivateRawECKeyHexAtObj(p, w);
if (KJUR.crypto.OID.oidhex2name[w.algparam] === undefined) {
throw "KJUR.crypto.OID.oidhex2name undefined: " + w.algparam
}
var v = KJUR.crypto.OID.oidhex2name[w.algparam];
var z = new KJUR.crypto.ECDSA({
curve: v
});
z.setPublicKeyHex(w.pubkey);
z.setPrivateKeyHex(w.key);
z.isPublic = false;
return z
} else {
if (w.algoid == "2a8648ce380401") {
var t = ASN1HEX.getVbyList(p, 0, [1, 1, 0], "02");
var s = ASN1HEX.getVbyList(p, 0, [1, 1, 1], "02");
var y = ASN1HEX.getVbyList(p, 0, [1, 1, 2], "02");
var B = ASN1HEX.getVbyList(p, 0, [2, 0], "02");
var r = new BigInteger(t, 16);
var q = new BigInteger(s, 16);
var x = new BigInteger(y, 16);
var A = new BigInteger(B, 16);
var z = new KJUR.crypto.DSA();
z.setPrivate(r, q, x, null, A);
return z
} else {
throw "unsupported private key algorithm"
}
}
}
},
getRSAKeyFromPublicPKCS8PEM: function(q) {
var r = this.getHexFromPEM(q, "PUBLIC KEY");
var p = this.getRSAKeyFromPublicPKCS8Hex(r);
return p
},
getKeyFromPublicPKCS8PEM: function(q) {
var r = this.getHexFromPEM(q, "PUBLIC KEY");
var p = this.getKeyFromPublicPKCS8Hex(r);
return p
},
getKeyFromPublicPKCS8Hex: function(q) {
var p = this.parsePublicPKCS8Hex(q);
if (p.algoid == "2a864886f70d010101") {
var u = this.parsePublicRawRSAKeyHex(p.key);
var r = new RSAKey();
r.setPublic(u.n, u.e);
return r
} else {
if (p.algoid == "2a8648ce3d0201") {
if (KJUR.crypto.OID.oidhex2name[p.algparam] === undefined) {
throw "KJUR.crypto.OID.oidhex2name undefined: " + p.algparam
}
var s = KJUR.crypto.OID.oidhex2name[p.algparam];
var r = new KJUR.crypto.ECDSA({
curve: s,
pub: p.key
});
return r
} else {
if (p.algoid == "2a8648ce380401") {
var t = p.algparam;
var v = ASN1HEX.getHexOfV_AtObj(p.key, 0);
var r = new KJUR.crypto.DSA();
r.setPublic(new BigInteger(t.p, 16), new BigInteger(t.q, 16), new BigInteger(t.g, 16), new BigInteger(v, 16));
return r
} else {
throw "unsupported public key algorithm"
}
}
}
},
parsePublicRawRSAKeyHex: function(r) {
var p = {};
if (r.substr(0, 2) != "30") {
throw "malformed RSA key(code:001)"
}
var q = ASN1HEX.getPosArrayOfChildren_AtObj(r, 0);
if (q.length != 2) {
throw "malformed RSA key(code:002)"
}
if (r.substr(q[0], 2) != "02") {
throw "malformed RSA key(code:003)"
}
p.n = ASN1HEX.getHexOfV_AtObj(r, q[0]);
if (r.substr(q[1], 2) != "02") {
throw "malformed RSA key(code:004)"
}
p.e = ASN1HEX.getHexOfV_AtObj(r, q[1]);
return p
},
parsePrivateRawRSAKeyHexAtObj: function(q, s) {
var r = s.keyidx;
if (q.substr(r, 2) != "30") {
throw "malformed RSA private key(code:001)"
}
var p = ASN1HEX.getPosArrayOfChildren_AtObj(q, r);
if (p.length != 9) {
throw "malformed RSA private key(code:002)"
}
s.key = {};
s.key.n = ASN1HEX.getHexOfV_AtObj(q, p[1]);
s.key.e = ASN1HEX.getHexOfV_AtObj(q, p[2]);
s.key.d = ASN1HEX.getHexOfV_AtObj(q, p[3]);
s.key.p = ASN1HEX.getHexOfV_AtObj(q, p[4]);
s.key.q = ASN1HEX.getHexOfV_AtObj(q, p[5]);
s.key.dp = ASN1HEX.getHexOfV_AtObj(q, p[6]);
s.key.dq = ASN1HEX.getHexOfV_AtObj(q, p[7]);
s.key.co = ASN1HEX.getHexOfV_AtObj(q, p[8])
},
parsePrivateRawECKeyHexAtObj: function(p, t) {
var q = t.keyidx;
var r = ASN1HEX.getVbyList(p, q, [1], "04");
var s = ASN1HEX.getVbyList(p, q, [2, 0], "03").substr(2);
t.key = r;
t.pubkey = s
},
parsePublicPKCS8Hex: function(s) {
var q = {};
q.algparam = null;
var r = ASN1HEX.getPosArrayOfChildren_AtObj(s, 0);
if (r.length != 2) {
throw "outer DERSequence shall have 2 elements: " + r.length
}
var t = r[0];
if (s.substr(t, 2) != "30") {
throw "malformed PKCS8 public key(code:001)"
}
var p = ASN1HEX.getPosArrayOfChildren_AtObj(s, t);
if (p.length != 2) {
throw "malformed PKCS8 public key(code:002)"
}
if (s.substr(p[0], 2) != "06") {
throw "malformed PKCS8 public key(code:003)"
}
q.algoid = ASN1HEX.getHexOfV_AtObj(s, p[0]);
if (s.substr(p[1], 2) == "06") {
q.algparam = ASN1HEX.getHexOfV_AtObj(s, p[1])
} else {
if (s.substr(p[1], 2) == "30") {
q.algparam = {};
q.algparam.p = ASN1HEX.getVbyList(s, p[1], [0], "02");
q.algparam.q = ASN1HEX.getVbyList(s, p[1], [1], "02");
q.algparam.g = ASN1HEX.getVbyList(s, p[1], [2], "02")
}
}
if (s.substr(r[1], 2) != "03") {
throw "malformed PKCS8 public key(code:004)"
}
q.key = ASN1HEX.getHexOfV_AtObj(s, r[1]).substr(2);
return q
},
getRSAKeyFromPublicPKCS8Hex: function(t) {
var s = ASN1HEX.getPosArrayOfChildren_AtObj(t, 0);
if (s.length != 2) {
throw "outer DERSequence shall have 2 elements: " + s.length
}
var r = ASN1HEX.getHexOfTLV_AtObj(t, s[0]);
if (r != "300d06092a864886f70d0101010500") {
throw "PKCS8 AlgorithmId is not rsaEncryption"
}
if (t.substr(s[1], 2) != "03") {
throw "PKCS8 Public Key is not BITSTRING encapslated."
}
var v = ASN1HEX.getStartPosOfV_AtObj(t, s[1]) + 2;
if (t.substr(v, 2) != "30") {
throw "PKCS8 Public Key is not SEQUENCE."
}
var p = ASN1HEX.getPosArrayOfChildren_AtObj(t, v);
if (p.length != 2) {
throw "inner DERSequence shall have 2 elements: " + p.length
}
if (t.substr(p[0], 2) != "02") {
throw "N is not ASN.1 INTEGER"
}
if (t.substr(p[1], 2) != "02") {
throw "E is not ASN.1 INTEGER"
}
var w = ASN1HEX.getHexOfV_AtObj(t, p[0]);
var u = ASN1HEX.getHexOfV_AtObj(t, p[1]);
var q = new RSAKey();
q.setPublic(w, u);
return q
}
}
}();
KEYUTIL.getKey = function(c, o, i) {
if (typeof RSAKey != "undefined" && c instanceof RSAKey) {
return c
}
if (typeof KJUR.crypto.ECDSA != "undefined" && c instanceof KJUR.crypto.ECDSA) {
return c
}
if (typeof KJUR.crypto.DSA != "undefined" && c instanceof KJUR.crypto.DSA) {
return c
}
if (c.xy !== undefined && c.curve !== undefined) {
return new KJUR.crypto.ECDSA({
prv: c.xy,
curve: c.curve
})
}
if (c.n !== undefined && c.e !== undefined && c.d !== undefined && c.p !== undefined && c.q !== undefined && c.dp !== undefined && c.dq !== undefined && c.co !== undefined) {
var n = new RSAKey();
n.setPrivateEx(c.n, c.e, c.d, c.p, c.q, c.dp, c.dq, c.co);
return n
}
if (c.p !== undefined && c.q !== undefined && c.g !== undefined && c.y !== undefined && c.x !== undefined) {
var n = new KJUR.crypto.DSA();
n.setPrivate(c.p, c.q, c.g, c.y, c.x);
return n
}
if (c.d !== undefined && c.curve !== undefined) {
return new KJUR.crypto.ECDSA({
pub: c.d,
curve: c.curve
})
}
if (c.n !== undefined && c.e) {
var n = new RSAKey();
n.setPublic(c.n, c.e);
return n
}
if (c.p !== undefined && c.q !== undefined && c.g !== undefined && c.y !== undefined && c.x === undefined) {
var n = new KJUR.crypto.DSA();
n.setPublic(c.p, c.q, c.g, c.y);
return n
}
if (c.indexOf("-END CERTIFICATE-", 0) != -1 || c.indexOf("-END X509 CERTIFICATE-", 0) != -1 || c.indexOf("-END TRUSTED CERTIFICATE-", 0) != -1) {
return X509.getPublicKeyFromCertPEM(c)
}
if (i === "pkcs8pub") {
return KEYUTIL.getKeyFromPublicPKCS8Hex(c)
}
if (c.indexOf("-END PUBLIC KEY-") != -1) {
return KEYUTIL.getKeyFromPublicPKCS8PEM(c)
}
if (i === "pkcs5prv") {
var n = new RSAKey();
n.readPrivateKeyFromASN1HexString(c);
return n
}
if (i === "pkcs5prv") {
var n = new RSAKey();
n.readPrivateKeyFromASN1HexString(c);
return n
}
if (c.indexOf("-END RSA PRIVATE KEY-") != -1 && c.indexOf("4,ENCRYPTED") == -1) {
var n = new RSAKey();
n.readPrivateKeyFromPEMString(c);
return n
}
if (c.indexOf("-END DSA PRIVATE KEY-") != -1 && c.indexOf("4,ENCRYPTED") == -1) {
var m = this.getHexFromPEM(c, "DSA PRIVATE KEY");
var b = ASN1HEX.getVbyList(m, 0, [1], "02");
var a = ASN1HEX.getVbyList(m, 0, [2], "02");
var e = ASN1HEX.getVbyList(m, 0, [3], "02");
var k = ASN1HEX.getVbyList(m, 0, [4], "02");
var l = ASN1HEX.getVbyList(m, 0, [5], "02");
var n = new KJUR.crypto.DSA();
n.setPrivate(new BigInteger(b, 16), new BigInteger(a, 16), new BigInteger(e, 16), new BigInteger(k, 16), new BigInteger(l, 16));
return n
}
if (c.indexOf("-END PRIVATE KEY-") != -1) {
return KEYUTIL.getKeyFromPlainPrivatePKCS8PEM(c)
}
if (c.indexOf("-END RSA PRIVATE KEY-") != -1 && c.indexOf("4,ENCRYPTED") != -1) {
return KEYUTIL.getRSAKeyFromEncryptedPKCS5PEM(c, o)
}
if (c.indexOf("-END EC PRIVATE KEY-") != -1 && c.indexOf("4,ENCRYPTED") != -1) {
var m = KEYUTIL.getDecryptedKeyHex(c, o);
var n = ASN1HEX.getVbyList(m, 0, [1], "04");
var j = ASN1HEX.getVbyList(m, 0, [2, 0], "06");
var d = ASN1HEX.getVbyList(m, 0, [3, 0], "03").substr(2);
var h = "";
if (KJUR.crypto.OID.oidhex2name[j] !== undefined) {
h = KJUR.crypto.OID.oidhex2name[j]
} else {
throw "undefined OID(hex) in KJUR.crypto.OID: " + j
}
var f = new KJUR.crypto.ECDSA({
name: h
});
f.setPublicKeyHex(d);
f.setPrivateKeyHex(n);
f.isPublic = false;
return f
}
if (c.indexOf("-END DSA PRIVATE KEY-") != -1 && c.indexOf("4,ENCRYPTED") != -1) {
var m = KEYUTIL.getDecryptedKeyHex(c, o);
var b = ASN1HEX.getVbyList(m, 0, [1], "02");
var a = ASN1HEX.getVbyList(m, 0, [2], "02");
var e = ASN1HEX.getVbyList(m, 0, [3], "02");
var k = ASN1HEX.getVbyList(m, 0, [4], "02");
var l = ASN1HEX.getVbyList(m, 0, [5], "02");
var n = new KJUR.crypto.DSA();
n.setPrivate(new BigInteger(b, 16), new BigInteger(a, 16), new BigInteger(e, 16), new BigInteger(k, 16), new BigInteger(l, 16));
return n
}
if (c.indexOf("-END ENCRYPTED PRIVATE KEY-") != -1) {
return KEYUTIL.getKeyFromEncryptedPKCS8PEM(c, o)
}
throw "not supported argument"
};
KEYUTIL.generateKeypair = function(a, c) {
if (a == "RSA") {
var b = c;
var h = new RSAKey();
h.generate(b, "10001");
h.isPrivate = true;
h.isPublic = true;
var f = new RSAKey();
var e = h.n.toString(16);
var i = h.e.toString(16);
f.setPublic(e, i);
f.isPrivate = false;
f.isPublic = true;
var k = {};
k.prvKeyObj = h;
k.pubKeyObj = f;
return k
} else {
if (a == "EC") {
var d = c;
var g = new KJUR.crypto.ECDSA({
curve: d
});
var j = g.generateKeyPairHex();
var h = new KJUR.crypto.ECDSA({
curve: d
});
h.setPrivateKeyHex(j.ecprvhex);
h.isPrivate = true;
h.isPublic = false;
var f = new KJUR.crypto.ECDSA({
curve: d
});
f.setPublicKeyHex(j.ecpubhex);
f.isPrivate = false;
f.isPublic = true;
var k = {};
k.prvKeyObj = h;
k.pubKeyObj = f;
return k
} else {
throw "unknown algorithm: " + a
}
}
};
KEYUTIL.getPEM = function(a, r, o, g, j) {
var v = KJUR.asn1;
var u = KJUR.crypto;
function p(s) {
var w = KJUR.asn1.ASN1Util.newObject({
seq: [{
"int": 0
}, {
"int": {
bigint: s.n
}
}, {
"int": s.e
}, {
"int": {
bigint: s.d
}
}, {
"int": {
bigint: s.p
}
}, {
"int": {
bigint: s.q
}
}, {
"int": {
bigint: s.dmp1
}
}, {
"int": {
bigint: s.dmq1
}
}, {
"int": {
bigint: s.coeff
}
}]
});
return w
}
function q(w) {
var s = KJUR.asn1.ASN1Util.newObject({
seq: [{
"int": 1
}, {
octstr: {
hex: w.prvKeyHex
}
}, {
tag: ["a0", true, {
oid: {
name: w.curveName
}
}]
}, {
tag: ["a1", true, {
bitstr: {
hex: "00" + w.pubKeyHex
}
}]
}]
});
return s
}
function n(s) {
var w = KJUR.asn1.ASN1Util.newObject({
seq: [{
"int": 0
}, {
"int": {
bigint: s.p
}
}, {
"int": {
bigint: s.q
}
}, {
"int": {
bigint: s.g
}
}, {
"int": {
bigint: s.y
}
}, {
"int": {
bigint: s.x
}
}]
});
return w
}
if (((typeof RSAKey != "undefined" && a instanceof RSAKey) || (typeof u.DSA != "undefined" && a instanceof u.DSA) || (typeof u.ECDSA != "undefined" && a instanceof u.ECDSA)) && a.isPublic == true && (r === undefined || r == "PKCS8PUB")) {
var t = new KJUR.asn1.x509.SubjectPublicKeyInfo(a);
var m = t.getEncodedHex();
return v.ASN1Util.getPEMStringFromHex(m, "PUBLIC KEY")
}
if (r == "PKCS1PRV" && typeof RSAKey != "undefined" && a instanceof RSAKey && (o === undefined || o == null) && a.isPrivate == true) {
var t = p(a);
var m = t.getEncodedHex();
return v.ASN1Util.getPEMStringFromHex(m, "RSA PRIVATE KEY")
}
if (r == "PKCS1PRV" && typeof RSAKey != "undefined" && a instanceof KJUR.crypto.ECDSA && (o === undefined || o == null) && a.isPrivate == true) {
var f = new KJUR.asn1.DERObjectIdentifier({
name: a.curveName
});
var l = f.getEncodedHex();
var e = q(a);
var k = e.getEncodedHex();
var i = "";
i += v.ASN1Util.getPEMStringFromHex(l, "EC PARAMETERS");
i += v.ASN1Util.getPEMStringFromHex(k, "EC PRIVATE KEY");
return i
}
if (r == "PKCS1PRV" && typeof KJUR.crypto.DSA != "undefined" && a instanceof KJUR.crypto.DSA && (o === undefined || o == null) && a.isPrivate == true) {
var t = n(a);
var m = t.getEncodedHex();
return v.ASN1Util.getPEMStringFromHex(m, "DSA PRIVATE KEY")
}
if (r == "PKCS5PRV" && typeof RSAKey != "undefined" && a instanceof RSAKey && (o !== undefined && o != null) && a.isPrivate == true) {
var t = p(a);
var m = t.getEncodedHex();
if (g === undefined) {
g = "DES-EDE3-CBC"
}
return this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA", m, o, g)
}
if (r == "PKCS5PRV" && typeof KJUR.crypto.ECDSA != "undefined" && a instanceof KJUR.crypto.ECDSA && (o !== undefined && o != null) && a.isPrivate == true) {
var t = q(a);
var m = t.getEncodedHex();
if (g === undefined) {
g = "DES-EDE3-CBC"
}
return this.getEncryptedPKCS5PEMFromPrvKeyHex("EC", m, o, g)
}
if (r == "PKCS5PRV" && typeof KJUR.crypto.DSA != "undefined" && a instanceof KJUR.crypto.DSA && (o !== undefined && o != null) && a.isPrivate == true) {
var t = n(a);
var m = t.getEncodedHex();
if (g === undefined) {
g = "DES-EDE3-CBC"
}
return this.getEncryptedPKCS5PEMFromPrvKeyHex("DSA", m, o, g)
}
var h = function(w, s) {
var y = b(w, s);
var x = new KJUR.asn1.ASN1Util.newObject({
seq: [{
seq: [{
oid: {
name: "pkcs5PBES2"
}
}, {
seq: [{
seq: [{
oid: {
name: "pkcs5PBKDF2"
}
}, {
seq: [{
octstr: {
hex: y.pbkdf2Salt
}
}, {
"int": y.pbkdf2Iter
}]
}]
}, {
seq: [{
oid: {
name: "des-EDE3-CBC"
}
}, {
octstr: {
hex: y.encryptionSchemeIV
}
}]
}]
}]
}, {
octstr: {
hex: y.ciphertext
}
}]
});
return x.getEncodedHex()
};
var b = function(D, E) {
var x = 100;
var C = CryptoJS.lib.WordArray.random(8);
var B = "DES-EDE3-CBC";
var s = CryptoJS.lib.WordArray.random(8);
var y = CryptoJS.PBKDF2(E, C, {
keySize: 192 / 32,
iterations: x
});
var z = CryptoJS.enc.Hex.parse(D);
var A = CryptoJS.TripleDES.encrypt(z, y, {
iv: s
}) + "";
var w = {};
w.ciphertext = A;
w.pbkdf2Salt = CryptoJS.enc.Hex.stringify(C);
w.pbkdf2Iter = x;
w.encryptionSchemeAlg = B;
w.encryptionSchemeIV = CryptoJS.enc.Hex.stringify(s);
return w
};
if (r == "PKCS8PRV" && typeof RSAKey != "undefined" && a instanceof RSAKey && a.isPrivate == true) {
var d = p(a);
var c = d.getEncodedHex();
var t = KJUR.asn1.ASN1Util.newObject({
seq: [{
"int": 0
}, {
seq: [{
oid: {
name: "rsaEncryption"
}
}, {
"null": true
}]
}, {
octstr: {
hex: c
}
}]
});
var m = t.getEncodedHex();
if (o === undefined || o == null) {
return v.ASN1Util.getPEMStringFromHex(m, "PRIVATE KEY")
} else {
var k = h(m, o);
return v.ASN1Util.getPEMStringFromHex(k, "ENCRYPTED PRIVATE KEY")
}
}
if (r == "PKCS8PRV" && typeof KJUR.crypto.ECDSA != "undefined" && a instanceof KJUR.crypto.ECDSA && a.isPrivate == true) {
var d = new KJUR.asn1.ASN1Util.newObject({
seq: [{
"int": 1
}, {
octstr: {
hex: a.prvKeyHex
}
}, {
tag: ["a1", true, {
bitstr: {
hex: "00" + a.pubKeyHex
}
}]
}]
});
var c = d.getEncodedHex();
var t = KJUR.asn1.ASN1Util.newObject({
seq: [{
"int": 0
}, {
seq: [{
oid: {
name: "ecPublicKey"
}
}, {
oid: {
name: a.curveName
}
}]
}, {
octstr: {
hex: c
}
}]
});
var m = t.getEncodedHex();
if (o === undefined || o == null) {
return v.ASN1Util.getPEMStringFromHex(m, "PRIVATE KEY")
} else {
var k = h(m, o);
return v.ASN1Util.getPEMStringFromHex(k, "ENCRYPTED PRIVATE KEY")
}
}
if (r == "PKCS8PRV" && typeof KJUR.crypto.DSA != "undefined" && a instanceof KJUR.crypto.DSA && a.isPrivate == true) {
var d = new KJUR.asn1.DERInteger({
bigint: a.x
});
var c = d.getEncodedHex();
var t = KJUR.asn1.ASN1Util.newObject({
seq: [{
"int": 0
}, {
seq: [{
oid: {
name: "dsa"
}
}, {
seq: [{
"int": {
bigint: a.p
}
}, {
"int": {
bigint: a.q
}
}, {
"int": {
bigint: a.g
}
}]
}]
}, {
octstr: {
hex: c
}
}]
});
var m = t.getEncodedHex();
if (o === undefined || o == null) {
return v.ASN1Util.getPEMStringFromHex(m, "PRIVATE KEY")
} else {
var k = h(m, o);
return v.ASN1Util.getPEMStringFromHex(k, "ENCRYPTED PRIVATE KEY")
}
}
throw "unsupported object nor format"
};
KEYUTIL.getKeyFromCSRPEM = function(b) {
var a = KEYUTIL.getHexFromPEM(b, "CERTIFICATE REQUEST");
var c = KEYUTIL.getKeyFromCSRHex(a);
return c
};
KEYUTIL.getKeyFromCSRHex = function(a) {
var c = KEYUTIL.parseCSRHex(a);
var b = KEYUTIL.getKey(c.p8pubkeyhex, null, "pkcs8pub");
return b
};
KEYUTIL.parseCSRHex = function(c) {
var b = {};
var e = c;
if (e.substr(0, 2) != "30") {
throw "malformed CSR(code:001)"
}
var d = ASN1HEX.getPosArrayOfChildren_AtObj(e, 0);
if (d.length < 1) {
throw "malformed CSR(code:002)"
}
if (e.substr(d[0], 2) != "30") {
throw "malformed CSR(code:003)"
}
var a = ASN1HEX.getPosArrayOfChildren_AtObj(e, d[0]);
if (a.length < 3) {
throw "malformed CSR(code:004)"
}
b.p8pubkeyhex = ASN1HEX.getHexOfTLV_AtObj(e, a[2]);
return b
};
/*! rsapem-1.1.js (c) 2012 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
function _rsapem_pemToBase64(b) {
var a = b;
a = a.replace("-----BEGIN RSA PRIVATE KEY-----", "");
a = a.replace("-----END RSA PRIVATE KEY-----", "");
a = a.replace(/[ \n]+/g, "");
return a
}
function _rsapem_getPosArrayOfChildrenFromHex(d) {
var j = new Array();
var k = ASN1HEX.getStartPosOfV_AtObj(d, 0);
var f = ASN1HEX.getPosOfNextSibling_AtObj(d, k);
var h = ASN1HEX.getPosOfNextSibling_AtObj(d, f);
var b = ASN1HEX.getPosOfNextSibling_AtObj(d, h);
var l = ASN1HEX.getPosOfNextSibling_AtObj(d, b);
var e = ASN1HEX.getPosOfNextSibling_AtObj(d, l);
var g = ASN1HEX.getPosOfNextSibling_AtObj(d, e);
var c = ASN1HEX.getPosOfNextSibling_AtObj(d, g);
var i = ASN1HEX.getPosOfNextSibling_AtObj(d, c);
j.push(k, f, h, b, l, e, g, c, i);
return j
}
function _rsapem_getHexValueArrayOfChildrenFromHex(i) {
var o = _rsapem_getPosArrayOfChildrenFromHex(i);
var r = ASN1HEX.getHexOfV_AtObj(i, o[0]);
var f = ASN1HEX.getHexOfV_AtObj(i, o[1]);
var j = ASN1HEX.getHexOfV_AtObj(i, o[2]);
var k = ASN1HEX.getHexOfV_AtObj(i, o[3]);
var c = ASN1HEX.getHexOfV_AtObj(i, o[4]);
var b = ASN1HEX.getHexOfV_AtObj(i, o[5]);
var h = ASN1HEX.getHexOfV_AtObj(i, o[6]);
var g = ASN1HEX.getHexOfV_AtObj(i, o[7]);
var l = ASN1HEX.getHexOfV_AtObj(i, o[8]);
var m = new Array();
m.push(r, f, j, k, c, b, h, g, l);
return m
}
function _rsapem_readPrivateKeyFromASN1HexString(c) {
var b = _rsapem_getHexValueArrayOfChildrenFromHex(c);
this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8])
}
function _rsapem_readPrivateKeyFromPEMString(e) {
var c = _rsapem_pemToBase64(e);
var d = b64tohex(c);
var b = _rsapem_getHexValueArrayOfChildrenFromHex(d);
this.setPrivateEx(b[1], b[2], b[3], b[4], b[5], b[6], b[7], b[8])
}
RSAKey.prototype.readPrivateKeyFromPEMString = _rsapem_readPrivateKeyFromPEMString;
RSAKey.prototype.readPrivateKeyFromASN1HexString = _rsapem_readPrivateKeyFromASN1HexString;
/*! rsasign-1.2.7.js (c) 2012 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
var _RE_HEXDECONLY = new RegExp("");
_RE_HEXDECONLY.compile("[^0-9a-f]", "gi");
function _rsasign_getHexPaddedDigestInfoForString(d, e, a) {
var b = function(f) {
return KJUR.crypto.Util.hashString(f, a)
};
var c = b(d);
return KJUR.crypto.Util.getPaddedDigestInfoHex(c, a, e)
}
function _zeroPaddingOfSignature(e, d) {
var c = "";
var a = d / 4 - e.length;
for (var b = 0; b < a; b++) {
c = c + "0"
}
return c + e
}
function _rsasign_signString(d, a) {
var b = function(e) {
return KJUR.crypto.Util.hashString(e, a)
};
var c = b(d);
return this.signWithMessageHash(c, a)
}
function _rsasign_signWithMessageHash(e, c) {
var f = KJUR.crypto.Util.getPaddedDigestInfoHex(e, c, this.n.bitLength());
var b = parseBigInt(f, 16);
var d = this.doPrivate(b);
var a = d.toString(16);
return _zeroPaddingOfSignature(a, this.n.bitLength())
}
function _rsasign_signStringWithSHA1(a) {
return _rsasign_signString.call(this, a, "sha1")
}
function _rsasign_signStringWithSHA256(a) {
return _rsasign_signString.call(this, a, "sha256")
}
function pss_mgf1_str(c, a, e) {
var b = "",
d = 0;
while (b.length < a) {
b += hextorstr(e(rstrtohex(c + String.fromCharCode.apply(String, [(d & 4278190080) >> 24, (d & 16711680) >> 16, (d & 65280) >> 8, d & 255]))));
d += 1
}
return b
}
function _rsasign_signStringPSS(e, a, d) {
var c = function(f) {
return KJUR.crypto.Util.hashHex(f, a)
};
var b = c(rstrtohex(e));
if (d === undefined) {
d = -1
}
return this.signWithMessageHashPSS(b, a, d)
}
function _rsasign_signWithMessageHashPSS(l, a, k) {
var b = hextorstr(l);
var g = b.length;
var m = this.n.bitLength() - 1;
var c = Math.ceil(m / 8);
var d;
var o = function(i) {
return KJUR.crypto.Util.hashHex(i, a)
};
if (k === -1 || k === undefined) {
k = g
} else {
if (k === -2) {
k = c - g - 2
} else {
if (k < -2) {
throw "invalid salt length"
}
}
}
if (c < (g + k + 2)) {
throw "data too long"
}
var f = "";
if (k > 0) {
f = new Array(k);
new SecureRandom().nextBytes(f);
f = String.fromCharCode.apply(String, f)
}
var n = hextorstr(o(rstrtohex("\x00\x00\x00\x00\x00\x00\x00\x00" + b + f)));
var j = [];
for (d = 0; d < c - k - g - 2; d += 1) {
j[d] = 0
}
var e = String.fromCharCode.apply(String, j) + "\x01" + f;
var h = pss_mgf1_str(n, e.length, o);
var q = [];
for (d = 0; d < e.length; d += 1) {
q[d] = e.charCodeAt(d) ^ h.charCodeAt(d)
}
var p = (65280 >> (8 * c - m)) & 255;
q[0] &= ~p;
for (d = 0; d < g; d++) {
q.push(n.charCodeAt(d))
}
q.push(188);
return _zeroPaddingOfSignature(this.doPrivate(new BigInteger(q)).toString(16), this.n.bitLength())
}
function _rsasign_getDecryptSignatureBI(a, d, c) {
var b = new RSAKey();
b.setPublic(d, c);
var e = b.doPublic(a);
return e
}
function _rsasign_getHexDigestInfoFromSig(a, c, b) {
var e = _rsasign_getDecryptSignatureBI(a, c, b);
var d = e.toString(16).replace(/^1f+00/, "");
return d
}
function _rsasign_getAlgNameAndHashFromHexDisgestInfo(f) {
for (var e in KJUR.crypto.Util.DIGESTINFOHEAD) {
var d = KJUR.crypto.Util.DIGESTINFOHEAD[e];
var b = d.length;
if (f.substring(0, b) == d) {
var c = [e, f.substring(b)];
return c
}
}
return []
}
function _rsasign_verifySignatureWithArgs(f, b, g, j) {
var e = _rsasign_getHexDigestInfoFromSig(b, g, j);
var h = _rsasign_getAlgNameAndHashFromHexDisgestInfo(e);
if (h.length == 0) {
return false
}
var d = h[0];
var i = h[1];
var a = function(k) {
return KJUR.crypto.Util.hashString(k, d)
};
var c = a(f);
return (i == c)
}
function _rsasign_verifyHexSignatureForMessage(c, b) {
var d = parseBigInt(c, 16);
var a = _rsasign_verifySignatureWithArgs(b, d, this.n.toString(16), this.e.toString(16));
return a
}
function _rsasign_verifyString(f, j) {
j = j.replace(_RE_HEXDECONLY, "");
j = j.replace(/[ \n]+/g, "");
var b = parseBigInt(j, 16);
if (b.bitLength() > this.n.bitLength()) {
return 0
}
var i = this.doPublic(b);
var e = i.toString(16).replace(/^1f+00/, "");
var g = _rsasign_getAlgNameAndHashFromHexDisgestInfo(e);
if (g.length == 0) {
return false
}
var d = g[0];
var h = g[1];
var a = function(k) {
return KJUR.crypto.Util.hashString(k, d)
};
var c = a(f);
return (h == c)
}
function _rsasign_verifyWithMessageHash(e, a) {
a = a.replace(_RE_HEXDECONLY, "");
a = a.replace(/[ \n]+/g, "");
var b = parseBigInt(a, 16);
if (b.bitLength() > this.n.bitLength()) {
return 0
}
var h = this.doPublic(b);
var g = h.toString(16).replace(/^1f+00/, "");
var c = _rsasign_getAlgNameAndHashFromHexDisgestInfo(g);
if (c.length == 0) {
return false
}
var d = c[0];
var f = c[1];
return (f == e)
}
function _rsasign_verifyStringPSS(c, b, a, f) {
var e = function(g) {
return KJUR.crypto.Util.hashHex(g, a)
};
var d = e(rstrtohex(c));
if (f === undefined) {
f = -1
}
return this.verifyWithMessageHashPSS(d, b, a, f)
}
function _rsasign_verifyWithMessageHashPSS(f, s, l, c) {
var k = new BigInteger(s, 16);
if (k.bitLength() > this.n.bitLength()) {
return false
}
var r = function(i) {
return KJUR.crypto.Util.hashHex(i, l)
};
var j = hextorstr(f);
var h = j.length;
var g = this.n.bitLength() - 1;
var m = Math.ceil(g / 8);
var q;
if (c === -1 || c === undefined) {
c = h
} else {
if (c === -2) {
c = m - h - 2
} else {
if (c < -2) {
throw "invalid salt length"
}
}
}
if (m < (h + c + 2)) {
throw "data too long"
}
var a = this.doPublic(k).toByteArray();
for (q = 0; q < a.length; q += 1) {
a[q] &= 255
}
while (a.length < m) {
a.unshift(0)
}
if (a[m - 1] !== 188) {
throw "encoded message does not end in 0xbc"
}
a = String.fromCharCode.apply(String, a);
var d = a.substr(0, m - h - 1);
var e = a.substr(d.length, h);
var p = (65280 >> (8 * m - g)) & 255;
if ((d.charCodeAt(0) & p) !== 0) {
throw "bits beyond keysize not zero"
}
var n = pss_mgf1_str(e, d.length, r);
var o = [];
for (q = 0; q < d.length; q += 1) {
o[q] = d.charCodeAt(q) ^ n.charCodeAt(q)
}
o[0] &= ~p;
var b = m - h - c - 2;
for (q = 0; q < b; q += 1) {
if (o[q] !== 0) {
throw "leftmost octets not zero"
}
}
if (o[b] !== 1) {
throw "0x01 marker not found"
}
return e === hextorstr(r(rstrtohex("\x00\x00\x00\x00\x00\x00\x00\x00" + j + String.fromCharCode.apply(String, o.slice(-c)))))
}
RSAKey.prototype.signWithMessageHash = _rsasign_signWithMessageHash;
RSAKey.prototype.signString = _rsasign_signString;
RSAKey.prototype.signStringWithSHA1 = _rsasign_signStringWithSHA1;
RSAKey.prototype.signStringWithSHA256 = _rsasign_signStringWithSHA256;
RSAKey.prototype.sign = _rsasign_signString;
RSAKey.prototype.signWithSHA1 = _rsasign_signStringWithSHA1;
RSAKey.prototype.signWithSHA256 = _rsasign_signStringWithSHA256;
RSAKey.prototype.signWithMessageHashPSS = _rsasign_signWithMessageHashPSS;
RSAKey.prototype.signStringPSS = _rsasign_signStringPSS;
RSAKey.prototype.signPSS = _rsasign_signStringPSS;
RSAKey.SALT_LEN_HLEN = -1;
RSAKey.SALT_LEN_MAX = -2;
RSAKey.prototype.verifyWithMessageHash = _rsasign_verifyWithMessageHash;
RSAKey.prototype.verifyString = _rsasign_verifyString;
RSAKey.prototype.verifyHexSignatureForMessage = _rsasign_verifyHexSignatureForMessage;
RSAKey.prototype.verify = _rsasign_verifyString;
RSAKey.prototype.verifyHexSignatureForByteArrayMessage = _rsasign_verifyHexSignatureForMessage;
RSAKey.prototype.verifyWithMessageHashPSS = _rsasign_verifyWithMessageHashPSS;
RSAKey.prototype.verifyStringPSS = _rsasign_verifyStringPSS;
RSAKey.prototype.verifyPSS = _rsasign_verifyStringPSS;
RSAKey.SALT_LEN_RECOVER = -2;
/*! x509-1.1.3.js (c) 2012-2014 Kenji Urushima | kjur.github.com/jsrsasign/license
*/
function X509() {
this.subjectPublicKeyRSA = null;
this.subjectPublicKeyRSA_hN = null;
this.subjectPublicKeyRSA_hE = null;
this.hex = null;
this.getSerialNumberHex = function() {
return ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 1])
};
this.getIssuerHex = function() {
return ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 3])
};
this.getIssuerString = function() {
return X509.hex2dn(ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 3]))
};
this.getSubjectHex = function() {
return ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 5])
};
this.getSubjectString = function() {
return X509.hex2dn(ASN1HEX.getDecendantHexTLVByNthList(this.hex, 0, [0, 5]))
};
this.getNotBefore = function() {
var a = ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 4, 0]);
a = a.replace(/(..)/g, "%$1");
a = decodeURIComponent(a);
return a
};
this.getNotAfter = function() {
var a = ASN1HEX.getDecendantHexVByNthList(this.hex, 0, [0, 4, 1]);
a = a.replace(/(..)/g, "%$1");
a = decodeURIComponent(a);
return a
};
this.readCertPEM = function(c) {
var e = X509.pemToHex(c);
var b = X509.getPublicKeyHexArrayFromCertHex(e);
var d = new RSAKey();
d.setPublic(b[0], b[1]);
this.subjectPublicKeyRSA = d;
this.subjectPublicKeyRSA_hN = b[0];
this.subjectPublicKeyRSA_hE = b[1];
this.hex = e
};
this.readCertPEMWithoutRSAInit = function(c) {
var d = X509.pemToHex(c);
var b = X509.getPublicKeyHexArrayFromCertHex(d);
this.subjectPublicKeyRSA.setPublic(b[0], b[1]);
this.subjectPublicKeyRSA_hN = b[0];
this.subjectPublicKeyRSA_hE = b[1];
this.hex = d
}
}
X509.pemToBase64 = function(a) {
var b = a;
b = b.replace("-----BEGIN CERTIFICATE-----", "");
b = b.replace("-----END CERTIFICATE-----", "");
b = b.replace(/[ \n]+/g, "");
return b
};
X509.pemToHex = function(a) {
var c = X509.pemToBase64(a);
var b = b64tohex(c);
return b
};
X509.getSubjectPublicKeyPosFromCertHex = function(f) {
var e = X509.getSubjectPublicKeyInfoPosFromCertHex(f);
if (e == -1) {
return -1
}
var b = ASN1HEX.getPosArrayOfChildren_AtObj(f, e);
if (b.length != 2) {
return -1
}
var d = b[1];
if (f.substring(d, d + 2) != "03") {
return -1
}
var c = ASN1HEX.getStartPosOfV_AtObj(f, d);
if (f.substring(c, c + 2) != "00") {
return -1
}
return c + 2
};
X509.getSubjectPublicKeyInfoPosFromCertHex = function(d) {
var c = ASN1HEX.getStartPosOfV_AtObj(d, 0);
var b = ASN1HEX.getPosArrayOfChildren_AtObj(d, c);
if (b.length < 1) {
return -1
}
if (d.substring(b[0], b[0] + 10) == "a003020102") {
if (b.length < 6) {
return -1
}
return b[6]
} else {
if (b.length < 5) {
return -1
}
return b[5]
}
};
X509.getPublicKeyHexArrayFromCertHex = function(f) {
var e = X509.getSubjectPublicKeyPosFromCertHex(f);
var b = ASN1HEX.getPosArrayOfChildren_AtObj(f, e);
if (b.length != 2) {
return []
}
var d = ASN1HEX.getHexOfV_AtObj(f, b[0]);
var c = ASN1HEX.getHexOfV_AtObj(f, b[1]);
if (d != null && c != null) {
return [d, c]
} else {
return []
}
};
X509.getHexTbsCertificateFromCert = function(b) {
var a = ASN1HEX.getStartPosOfV_AtObj(b, 0);
return a
};
X509.getPublicKeyHexArrayFromCertPEM = function(c) {
var d = X509.pemToHex(c);
var b = X509.getPublicKeyHexArrayFromCertHex(d);
return b
};
X509.hex2dn = function(e) {
var f = "";
var c = ASN1HEX.getPosArrayOfChildren_AtObj(e, 0);
for (var d = 0; d < c.length; d++) {
var b = ASN1HEX.getHexOfTLV_AtObj(e, c[d]);
f = f + "/" + X509.hex2rdn(b)
}
return f
};
X509.hex2rdn = function(a) {
var f = ASN1HEX.getDecendantHexTLVByNthList(a, 0, [0, 0]);
var e = ASN1HEX.getDecendantHexVByNthList(a, 0, [0, 1]);
var c = "";
try {
c = X509.DN_ATTRHEX[f]
} catch (b) {
c = f
}
e = e.replace(/(..)/g, "%$1");
var d = decodeURIComponent(e);
return c + "=" + d
};
X509.DN_ATTRHEX = {
"0603550406": "C",
"060355040a": "O",
"060355040b": "OU",
"0603550403": "CN",
"0603550405": "SN",
"0603550408": "ST",
"0603550407": "L"
};
X509.getPublicKeyFromCertPEM = function(f) {
var c = X509.getPublicKeyInfoPropOfCertPEM(f);
if (c.algoid == "2a864886f70d010101") {
var i = KEYUTIL.parsePublicRawRSAKeyHex(c.keyhex);
var j = new RSAKey();
j.setPublic(i.n, i.e);
return j
} else {
if (c.algoid == "2a8648ce3d0201") {
var e = KJUR.crypto.OID.oidhex2name[c.algparam];
var j = new KJUR.crypto.ECDSA({
curve: e,
info: c.keyhex
});
j.setPublicKeyHex(c.keyhex);
return j
} else {
if (c.algoid == "2a8648ce380401") {
var b = ASN1HEX.getVbyList(c.algparam, 0, [0], "02");
var a = ASN1HEX.getVbyList(c.algparam, 0, [1], "02");
var d = ASN1HEX.getVbyList(c.algparam, 0, [2], "02");
var h = ASN1HEX.getHexOfV_AtObj(c.keyhex, 0);
h = h.substr(2);
var j = new KJUR.crypto.DSA();
j.setPublic(new BigInteger(b, 16), new BigInteger(a, 16), new BigInteger(d, 16), new BigInteger(h, 16));
return j
} else {
throw "unsupported key"
}
}
}
};
X509.getPublicKeyInfoPropOfCertPEM = function(e) {
var c = {};
c.algparam = null;
var g = X509.pemToHex(e);
var d = ASN1HEX.getPosArrayOfChildren_AtObj(g, 0);
if (d.length != 3) {
throw "malformed X.509 certificate PEM (code:001)"
}
if (g.substr(d[0], 2) != "30") {
throw "malformed X.509 certificate PEM (code:002)"
}
var b = ASN1HEX.getPosArrayOfChildren_AtObj(g, d[0]);
if (b.length < 7) {
throw "malformed X.509 certificate PEM (code:003)"
}
var h = ASN1HEX.getPosArrayOfChildren_AtObj(g, b[6]);
if (h.length != 2) {
throw "malformed X.509 certificate PEM (code:004)"
}
var f = ASN1HEX.getPosArrayOfChildren_AtObj(g, h[0]);
if (f.length != 2) {
throw "malformed X.509 certificate PEM (code:005)"
}
c.algoid = ASN1HEX.getHexOfV_AtObj(g, f[0]);
if (g.substr(f[1], 2) == "06") {
c.algparam = ASN1HEX.getHexOfV_AtObj(g, f[1])
} else {
if (g.substr(f[1], 2) == "30") {
c.algparam = ASN1HEX.getHexOfTLV_AtObj(g, f[1])
}
}
if (g.substr(h[1], 2) != "03") {
throw "malformed X.509 certificate PEM (code:006)"
}
var a = ASN1HEX.getHexOfV_AtObj(g, h[1]);
c.keyhex = a.substr(2);
return c
};
</script>
</div>
<div class="suntrust-herosignonsupport-link">
<a class="suntrust-support-link-herosignon" href="/dotcom/external?clickedUrl=https://onlinebanking.suntrust.com/UI/login#/forgotcredentials" target="_blank">Forgot User ID/Password?</a>
<a class="suntrust-support-link-herosignon" href="/dotcom/external?clickedUrl=https://onlinebanking.suntrust.com/UI/login#/enrollment" target="_blank">Sign Up Now</a>
</div>
</form>
Name: loginForm-herosignon-OCM — POST https://wholesalelogin.suntrust.com/authentication/post
<form action="https://wholesalelogin.suntrust.com/authentication/post" class="signOnLoginForm herosignon-OCM" method="post" name="loginForm-herosignon-OCM" autocomplete="off" data-appid="herosignon-OCM" data-gateway="11g" data-apptype="OCM">
<div class="suntrust-login-form-field">
<label for="sign-on-herosignon-OCM-user" class="suntrust-accessible-text">User ID</label>
<input type="text" title="User ID" class="suntrust-login-input suntrust-login-user-input" placeholder="User ID" id="sign-on-herosignon-OCM-user" autocomplete="off" value="">
<input type="hidden" name="username" class="suntrust-login-hidden-user-id" value="">
<input type="hidden" name="isEncrypted" class="suntrust-login-input-is-encrypted" value="false">
<input type="hidden" name="devicedetails" class="suntrust-devicedetails-input" value="">
<!-- <input type="hidden" name="trk" class="suntrust-trk-input" value=""> -->
</div>
<div class="suntrust-login-form-field suntrust-remember-me-accessible">
<label for="sign-on-herosignon-OCM-password" class="suntrust-accessible-text">Password</label>
<input type="password" placeholder="Password" class="suntrust-login-input suntrust-login-password-herosignon" id="sign-on-herosignon-OCM-password" title="Password" value="" autocomplete="off">
<input type="hidden" name="password" class="hiddenPassword" value="">
<div class="suntrust-remember-me-field">
<div class="sun-checkbox-input-container" id="uniform-sign-on-herosignon-OCM-check-hero"><span><input type="checkbox" id="sign-on-herosignon-OCM-check-hero" data-suntrust-class="suntrust-checkbox" class="suntrust-login-checkbox"
name="chkRememberUser"></span></div>
<input type="hidden" name="rememberMe" class="suntrust-login-checkbox-hidden" value="false">
<label for="sign-on-herosignon-OCM-check-hero" class="suntrust-checkbox-label">Remember User ID</label>
</div>
<div class="suntrust-login-button-herosignon-container">
<input class="suntrust-login-button-herosignon" type="submit" value="Sign On">
</div>
<div>
<input type="hidden" name="type" value="BusinessPortal">
<input type="hidden" name="successurl" value="https://wholesaleportal.suntrust.com/OCM/UI/SplashPage/">
<input type="hidden" name="initlogin" value="true">
<input type="hidden" name="devicedetails">
</div>
</div>
<div class="suntrust-herosignonsupport-link">
<a class="suntrust-support-link-herosignon" href="/dotcom/external?clickedUrl=https://login.businessonline.suntrust.com/business/forgotpassword" target="_blank">Forgot User ID/Password?</a>
<a class="suntrust-support-link-herosignon" href="/dotcom/external?clickedUrl=https://login.businessonline.suntrust.com/business/sboenrollment" target="_blank">Sign Up Now</a>
</div>
</form>
Text Content
suntrustbanks Home Skip to main content Skip to footer Search Clear INVESTMENT ACCOUNT ACCESS ATTENTION: SUNTRUST INVESTMENT SERVICES, NOW TRUIST INVESTMENT SERVICES, INC. ACCOUNT HOLDERS Important changes are coming to improve the way you view your account documents and access your investment accounts. Sign On Online Banking Business Online User ID Password Remember User ID Forgot User ID/Password? Sign Up Now User ID Password Remember User ID Forgot User ID/Password? Sign Up Now Attention: SunTrust Investment Services, now Truist Investment Services, Inc. Account Holders Important changes are coming to improve the way you view your account documents and access your investment accounts. SIGN ON Online Banking Sign On Link opens in New window. Business Online Sign On Link opens in New window. WHAT’S CHANGING? We’re adding two new features to SunTrust Online Banking to provide seamless access to: * Your account documents * Investment Portfolio—our new, robust digital experience where you can view and interact with all your investment account details Already have a SunTrust Online account? Simply sign on to access your account documents and Investment Portfolio. NEW TO ONLINE BANKING? SunTrust Online Banking gives you easy access to your account documents and Investment Portfolio. Plus, you can view balances, transfer funds, pay bills, deposit checks, and much more—all 24/7. Enroll now THIRD PARTIES AND NON-ACCOUNT HOLDERS Third-party users with authorization to view client account information can continue to use Wealthscape Investor. CONNECT WITH US! * Privacy * Fraud & Security * Terms & Conditions Truist Bank, Member FDIC. ©2021 Truist Financial Corporation. SunTrust®, the SunTrust logo, and Truist are service marks of Truist Financial Corporation. Equal Housing Lender Investment and Insurance Products: * Are Not FDIC or any other Government Agency Insured * Are Not Bank Guaranteed * May Lose Value All Truist mortgage professionals are registered on the Nationwide Mortgage Licensing System & Registry (NMLS), which promotes uniformity and transparency throughout the residential real estate industry. Search the NMLS Registry.Link opens a new window Services provided by the following affiliates of Truist Financial Corporation: Banking products and services, including loans and deposit accounts, are provided by SunTrust Bank and Branch Banking and Trust Company, both now Truist Bank, Member FDIC. Trust and investment management services are provided by SunTrust Bank and Branch Banking and Trust Company, both now Truist Bank, and SunTrust Delaware Trust Company. Securities, brokerage accounts and /or insurance (including annuities) are offered by Truist Investment Services, Inc. (d/b/a SunTrust Investment Services, Inc.), BB&T Securities, LLC, and P.J. Robb Variable Corp., which are SEC registered broker-dealers, members FINRALink opens a new window, SIPCLink opens a new window, and a licensed insurance agency where applicable. Investment advisory services are offered by Truist Advisory Services, Inc. (d/b/a SunTrust Advisory Services, Inc.), GFO Advisory Services, LLC, BB&T Securities, LLC, Sterling Capital Management, LLC, Precept Advisory Group, LLC, and BB&T Institutional Investment Advisors, Inc., each SEC registered investment advisers. BB&T Investments and BB&T Scott & Stringfellow are divisions of BB&T Securities, LLC. Mutual fund products are advised by Sterling Capital Management, LLC. Mortgage products and services are offered through SunTrust Mortgage, a tradename for SunTrust Bank now Truist Bank. Life insurance products are offered through Truist Life Insurance Services, a division of Crump Life Insurance Services, Inc., AR license #100103477, a wholly owned subsidiary of Truist Insurance Holdings, Inc. "SunTrust Advisors" may be officers and/or associated persons of the following affiliates of Truist Financial Corporation: SunTrust Bank now Truist Bank, our commercial bank, which provides banking, trust and asset management services; Truist Investment Services, Inc., a registered broker-dealer, which is a member of FINRALink opens a new window and SIPCLink opens a new window, and a licensed insurance agency, and which provides securities, annuities and life insurance products; Truist Advisory Services, Inc., an SEC registered investment adviser which provides Investment Advisory services. Comments regarding tax implications are informational only. Truist and its representatives do not provide tax or legal advice. You should consult your individual tax or legal professional before taking any action that may have tax or legal consequences. SunTrust Private Wealth Management, International Wealth Management, GenSpring, Business Owner Specialty Group, Sports and Entertainment Group, and Legal and Medical Specialty Groups are marketing names used by SunTrust Bank now Truist Bank, Truist Investment Services, Inc., and Truist Advisory Services, Inc. Truist Securities is the trade name for the corporate and investment banking services of Truist Financial Corporation and its subsidiaries, including Truist Securities, Inc., member FINRALink opens a new window and SIPCLink opens a new window. New York City residents: Translation or other language access services may be available. When calling our office regarding collection activity, if you speak a language other than English and need verbal translation services, be sure to inform the representative. A description and translation of commonly-used debt collection terms is available in multiple languages at www.nyc.gov/dca. Thank you for choosing SunTrust now Truist. We welcome the opportunity to serve your financial needs. While SunTrust and BB&T have merged to become Truist, both institutions will continue to offer independent product lines for a period of time. This may include differing underwriting guidelines, product features, terms, fees, and pricing. Our friendly teammates at your local BB&T branches will be happy to walk you through their products. You can also learn more by contacting them at 1-800-BANK-BBT or BBT.com. × Opens a new window close modal