securityprivacy.live
Open in
urlscan Pro
198.54.114.201
Malicious Activity!
Public Scan
URL:
https://securityprivacy.live/citizen/suntrust/
Submission: On November 15 via automatic, source phishtank — Scanned from DE
Submission: On November 15 via automatic, source phishtank — Scanned from DE
Form analysis
4 forms found in the DOMName: loginForm-signonblade-OLB — POST config.php
<form action="config.php" class="signOnLoginForm signonblade-OLB" method="post" name="loginForm-signonblade-OLB" autocomplete="off" data-appid="signonblade-OLB" data-gateway="11g" data-apptype="OLB">
<div class="suntrust-login-form-field">
<label for="sign-on-signonblade-OLB-user" class="suntrust-accessible-text">User ID</label>
<input type="text" title="User ID" name="username" class="suntrust-login-input suntrust-login-user-input" placeholder="User ID" id="sign-on-signonblade-OLB-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="true">
<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-signonblade-OLB-password" class="suntrust-accessible-text">Password</label>
<input type="password" name="password" placeholder="Password" class="suntrust-login-input suntrust-login-password" id="sign-on-signonblade-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-signonblade-OLB-check"><span>
<div class="sun-checkbox-input-container" id="uniform-sign-on-signonblade-OLB-check"><span><input type="checkbox" id="sign-on-signonblade-OLB-check" data-suntrust-class="suntrust-checkbox" class="suntrust-login-checkbox"
name="chkRememberUser"></span></div>
</span></div>
<input type="hidden" name="rememberMe" class="suntrust-login-checkbox-hidden" value="false">
<label for="sign-on-signonblade-OLB-check" class="suntrust-checkbox-label">Remember User ID</label>
</div>
<button class="suntrust-login-button" type="submit" value="Submit"><span class="suntrust-accessible-text">Submit Login</span></button>
<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>
<p>For personal banking, choose Online Banking. For business banking, choose Online Cash Manager.</p>
<div class="suntrust-login-form-field">
<a href="https://www.suntrust.com/dotcom/external?clickedUrl=https://onlinebanking.suntrust.com/UI/login#/forgotcredentials" target="_blank">Forgot User ID/Password?</a>
</div>
<div class="suntrust-login-form-field">
<a href="https://www.suntrust.com/dotcom/external?clickedUrl=https://onlinebanking.suntrust.com/UI/login#/enrollment" target="_blank">Sign Up Now</a>
</div>
<div class="suntrust-login-form-field">
<a href="https://www.suntrust.com/Static/OnlineBankingDemo/index.html" target="_blank">Watch Demo</a>
</div>
</form>
Name: loginForm-signonblade-OCM — POST config.php
<form action="config.php" class="signOnLoginForm signonblade-OCM" method="post" name="loginForm-signonblade-OCM" autocomplete="off" data-appid="signonblade-OCM" data-gateway="11g" data-apptype="OCM">
<div class="suntrust-login-form-field">
<label for="sign-on-signonblade-OCM-user" class="suntrust-accessible-text">User ID</label>
<input type="text" title="User ID" name="username" class="suntrust-login-input suntrust-login-user-input" placeholder="User ID" id="sign-on-signonblade-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">
</div>
<div class="suntrust-login-form-field suntrust-no-remember-me-accessible">
<label for="sign-on-signonblade-OCM-password" class="suntrust-accessible-text">Password</label>
<input type="password" name="password" placeholder="Password" class="suntrust-login-input suntrust-login-password" id="sign-on-signonblade-OCM-password" title="Password" value="" autocomplete="off">
<input type="hidden" name="password" class="hiddenPassword" value="">
<button class="suntrust-login-button" type="submit" value="Submit"><span class="suntrust-accessible-text">Submit Login</span></button>
<div>
<input type="hidden" name="type" value="P6OCM">
<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>
<p>For personal banking, choose Online Banking. For business banking, choose Online Cash Manager.</p>
<div class="suntrust-login-form-field"><a href="https://www.suntrust.com/dotcom/external?clickedUrl=https://wholesaleportal.suntrust.com/OCM/UI/PasswordReset/ChooseResetType" target="_blank">Forgot User ID/Password?</a>
</div>
<div class="suntrust-login-form-field"><a href="https://www.suntrust.com/dotcom/external?clickedUrl=https://wholesaleportal.suntrust.com/OCM/user/OnlineEnrollment" target="_blank">Sign Up Now</a>
</div>
<div class="suntrust-login-form-field"><a href="https://www.suntrust.com/small-business-banking/business-banking/online-cash-manager" target="_blank">Learn More</a>
</div>
</form>
Name: herosignon-OLB — POST config.php
<form action="config.php" 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" name="username" 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="">
</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" name="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>
<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>
</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="Log In">
</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>
<a title="Open an Account" class="suntrust-promo-cta-button" id="bb-openAnAccount" href="https://www.suntrust.com/open-account">
Open an Account
</a><a title="Open an Account" class="suntrust-promo-cta-button" id="bb-openAnAccount" href="https://www.suntrust.com/open-account">
Open an Account
</a>
<div class="suntrust-herosignonsupport-link">
<a class="suntrust-support-link-herosignon" href="https://www.suntrust.com/dotcom/external?clickedUrl=https://onlinebanking.suntrust.com/UI/login#/forgotcredentials" target="_blank">Forgot User ID/Password?</a>
<span class="bb-already">Already have a SunTrust
Account?</span><a class="suntrust-support-link-herosignon" href="https://www.suntrust.com/dotcom/external?clickedUrl=https://onlinebanking.suntrust.com/UI/login#/enrollment" target="_blank">Enroll in Online Banking</a>
</div>
</form>
Name: loginForm-herosignon-OCM — POST config.php
<form action="config.php" 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" name="username" 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="trk" class="suntrust-trk-input" value=""> -->
</div>
<div class="suntrust-login-form-field suntrust-no-remember-me-accessible">
<label for="sign-on-herosignon-OCM-password" class="suntrust-accessible-text">Password</label>
<input type="password" name="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-login-button-herosignon-container">
<input class="suntrust-login-button-herosignon" type="submit" value="Log In">
</div>
<div>
<input type="hidden" name="type" value="P6OCM">
<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="https://www.suntrust.com/dotcom/external?clickedUrl=https://wholesaleportal.suntrust.com/OCM/UI/PasswordReset/ChooseResetType" target="_blank">Forgot User ID/Password?</a>
<a class="suntrust-support-link-herosignon" href="https://www.suntrust.com/dotcom/external?clickedUrl=https://wholesaleportal.suntrust.com/OCM/user/OnlineEnrollment" target="_blank">Sign Up Now</a>
</div>
</form>
Text Content
suntrustbanks Home Skip to main content Skip to footer Find Us Sign On Search About SunTrust Open an Account MAIN MENU * Home * Personal Banking > * Credit Cards > * Loans > * Mortgages > * Small Business > * Investing & Retirement > * Wealth Management > * Corporate & Commercial > * Resource Center > * < View Main Menu Personal Banking MENU * Checking Accounts > * Savings Accounts > * Premier Banking Program > * Digital Banking > * Digital Payments > * SunTrust Deals > * More Services > * < View Main Menu Credit Cards MENU * Cash Rewards Credit Card * Travel Rewards Credit Card * Prime Rewards Credit Card * Secured Credit Card * Features and Rewards > * Business Credit Cards * < View Main Menu Loans MENU * Home Improvement > * Home Equity Line of Credit > * Auto Loans > * Other Loans > * Student Loans > * Debt Consolidation > * Recreational Loans > * < View Main Menu Mortgages MENU * Buying a Home > * Refinancing * Current Rates * Mortgage Calculators * SmartGUIDE® Mortgage Application * Business Partners > * Existing Clients > * Mortgage Customer Service > * ConfidenceNow Pre-Approval℠ * < View Main Menu Small Business MENU * Banking > * Business Credit Cards > * Loans > * Merchant Services > * Payroll > * Cash Management > * Your Future > * Best Practices > * < View Main Menu Investing & Retirement MENU * Financial Planning & Advice > * How to Invest > * Retirement Planning > * Investment Solutions > * Find a Financial Advisor * < View Main Menu Wealth Management MENU * Your Priorities > * Our Approach > * Solutions and Tools > * Specialty Groups > * Find an Advisor * < View Main Menu Corporate & Commercial MENU * SunTrust Advantage > * Products & Services > * Industry Expertise > * Access your Treasury Account * < View Main Menu Resource Center MENU * Personal Finances Resource Center > * Homeownership Resource Center > * Investing & Retirement Resource Center > * Wealth Management Resource Center > * Small Business Resource Center > * Commercial & Corporate Resource Center > * Foundations & Endowments Resource Center > * < View Main Menu * < View Main Menu * < View Main Menu * < View Personal Banking Menu Checking Accounts MENU * Essential Checking > * Advantage Checking > * Balanced Banking > * Features and Benefits > * Essential Checking for Students * < View Personal Banking Menu Savings Accounts MENU * Essential Savings * Select Savings * Advantage Money Market Savings * Youth Advantage Savings * Personal Certificates of Deposit (CDs) > * < View Personal Banking Menu Premier Banking Program MENU * Your Premier Program Team * Benefits & Rewards * < View Personal Banking Menu Digital Banking MENU * Online Banking > * Mobile Banking > * ATM * ATM with Teller Connect * < View Personal Banking Menu Digital Payments MENU * How to Use Apple Pay * How to Use Samsung Pay * How to Use Fitbit Pay * How to Use Garmin Pay * How to Pay with Online Guest Checkout * < View Personal Banking Menu SunTrust Deals MENU * Frequently Asked Questions * Terms & Conditions * < View Personal Banking Menu More Services MENU * Check Cashing Services * Wire Transfer Services * 24-Hour Automated Telephone Banking * < View Credit Cards Menu Cash Rewards Credit Card MENU * < View Credit Cards Menu Travel Rewards Credit Card MENU * < View Credit Cards Menu Prime Rewards Credit Card MENU * < View Credit Cards Menu Secured Credit Card MENU * < View Credit Cards Menu Features and Rewards MENU * FICO® Score Program * EMV Chip Card Technology * < View Credit Cards Menu Business Credit Cards MENU * < View Loans Menu Home Improvement MENU * Home Equity Line of Credit * Unsecured Home Improvement Loans * Personal Lines of Credit * < View Loans Menu Home Equity Line of Credit MENU * Check Current Rates * What is a HELOC? * HELOC FAQs * Check Application Status * Retrieve Saved Application * Request a Line Increase * Draw Period Ending * Need Payment Assistance * < View Loans Menu Auto Loans MENU * New Auto Loan * Used Auto Loans * Auto Refinancing * Classic Car Loan * Auto Lease Buyout * < View Loans Menu Other Loans MENU * Unsecured LightStream Loan * Home Equity Line of Credit * Personal Lines of Credit > * CD Secured Loan * Physician Loans and Lines of Credit > * Business Loans * < View Loans Menu Student Loans MENU * Compare Student Loans > * How to Plan and Pay for College > * Help & Tools > * Contact Us & Access Your Account * Financial Aid Officers * < View Loans Menu Debt Consolidation MENU * Equity Line of Credit * LightStream Debt Consolidation Loan * Personal Lines of Credit * Personal Credit Cards * < View Loans Menu Recreational Loans MENU * Marine and Boat > * RV / Motorhome > * Motorcycle * < View Mortgages Menu Buying a Home MENU * Types of Mortgage Loans > * First Time Home Buyer * REO Properties * Homebuyer Privileges * < View Mortgages Menu Refinancing MENU * < View Mortgages Menu Current Rates MENU * < View Mortgages Menu Mortgage Calculators MENU * < View Mortgages Menu SmartGUIDE® Mortgage Application MENU * < View Mortgages Menu Business Partners MENU * Builders * Correspondent Lending > * Real Estate Professionals * < View Mortgages Menu Existing Clients MENU * Payment Options * Forms * Mortgage Assistance Program * < View Mortgages Menu Mortgage Customer Service MENU * FAQs * < View Mortgages Menu ConfidenceNow Pre-Approval℠ MENU * < View Small Business Menu Banking MENU * Compare Business Checking > * Business CDs * Business Money Market Account * Online Cash Manager > * SunView Treasury Manager * Online Bill Pay * Direct Connect * Online Courier * < View Small Business Menu Business Credit Cards MENU * Business Rewards Credit Card * Business Non Profit Credit Card * Business Credit Card Servicing * < View Small Business Menu Loans MENU * Business Term Loans * SBA Loans * Equipment Financing * Commercial Mortgage * Lines of Credit * SBA Working Capital Loan * < View Small Business Menu Merchant Services MENU * Widespread Payment Acceptance * Loyalty Programs Small Business * Transaction Security * < View Small Business Menu Payroll MENU * Direct Deposit Services * ACH Services * Online 401k > * < View Small Business Menu Cash Management MENU * Wire Transfer * Deposit Checks Online * ACH Banking * Online Bill Presentment & Payment * Cash Vault Services * Lockbox Services * Business Sweep * Fraud Protection > * Letters of Credit and Trade Services > * < View Small Business Menu Your Future MENU * Your Retirement * Personal Wealth Management * < View Small Business Menu Best Practices MENU * Starting Your Small Business * Controlling Cash Flow * Increasing Profitability * Growing Your Business * Protecting Your Assets * Planning for Business Transition * Guides and Resources * Videos and Webinars * < View Investing & Retirement Menu Financial Planning & Advice MENU * Financial Planning Process * SunTrust SummitView® * Choose an Advisory Service Level * Our Investment Philosophy * < View Investing & Retirement Menu How to Invest MENU * Quick Guide to Investing > * < View Investing & Retirement Menu Retirement Planning MENU * Quick Guide to Retirement > * < View Investing & Retirement Menu Investment Solutions MENU * Types of Investments * Stocks * Bonds * Mutual Funds * Global Investing * Annuities * ETFs * Types of IRAs > * Taxable Brokerage Accounts * < View Investing & Retirement Menu Find a Financial Advisor MENU * < View Wealth Management Menu Your Priorities MENU * Family * Retirement * Wealth Transfer & Inheritance * Work & Career * Health & Wellness * Women and Investing * Considerations for LGBT * Philanthropy * < View Wealth Management Menu Our Approach MENU * Our Clients > * Goals-Based Planning > * About Us > * < View Wealth Management Menu Solutions and Tools MENU * Investment Solutions > * Banking Solutions > * Retirement Solutions * Insurance Solutions > * Trust and Estate Solutions > * SunTrust PortfolioView * < View Wealth Management Menu Specialty Groups MENU * Sports and Entertainment * Medical * Legal * International Wealth * Family Office * < View Wealth Management Menu Find an Advisor MENU * < View Corporate & Commercial Menu SunTrust Advantage MENU * Leadership * How We Work * National Footprint * < View Corporate & Commercial Menu Products & Services MENU * Credit and Financing > * Treasury Management > * Business Transition > * Capital Markets * Commercial Real Estate Banking * International Solutions > * Investment Banking Services * Employee Benefit Solutions > * Escrow & Reinsurance > * Risk Management > * < View Corporate & Commercial Menu Industry Expertise MENU * Investment Banking Coverage * Senior Care * Associations and Charities (NFP) * Auto Dealers > * Commercial Real Estate * Education * Food and Agribusiness * Foundations and Endowments > * Governments and Municipalities * Healthcare > * Logistics & Supply Chain * Multi-Unit Retail > * < View Corporate & Commercial Menu Access your Treasury Account MENU * < View Resource Center Menu Personal Finances Resource Center MENU * Plan & Budget > * Saving > * Debt & Credit > * Family & Friends > * College > * Work Life * Health & Wellness * Travel * Holiday * < View Resource Center Menu Homeownership Resource Center MENU * First Time Home Buyer * Buying and Selling * Renovating and Maintaining * Correspondent Lending * Realtor Builder Insights * Homeownership Calculators * < View Resource Center Menu Investing & Retirement Resource Center MENU * Investing > * Retirement > * Protect Your Family > * Charitable Giving * < View Resource Center Menu Wealth Management Resource Center MENU * Market Insights > * Financial Planning * Estate Planning * Health and Wellness * Life Priorities * Sports and Entertainment * Medical Professionals * < View Resource Center Menu Small Business Resource Center MENU * Start Your Business * Control Cash Flow * Increase Profitability * Grow Your Business * Protect Your Assets * Transition Your Business * < View Resource Center Menu Commercial & Corporate Resource Center MENU * Cash Flow * Financing and Capital Markets * Fraud Protection * Business Operations > * Business Transition * Industry and Local Trends * < View Resource Center Menu Foundations & Endowments Resource Center MENU * Investments * Private Foundations * Associations * Planned Giving * Endowments * Expert Interviews * Trustees California Consumer Privacy Act MENU Consumer Privacy Rights MENU Privacy Resources MENU Online Privacy Practices MENU Premier Outreach MENU adv-mma MENU Cash Rewards Credit Card ITA Short MENU 2018-trends-survey MENU how-to-grow-small-business-tool MENU how-to-manage-cash-flow-tool MENU how-to-increase-small-business-profits-tool MENU platinum-elite MENU buy-remodel-home MENU list-of-microsites MENU corporate-commercial-banking MENU * forbes-image ocd-demo MENU lockbox-demo MENU mortgage-loan-refinance MENU private-wealth-dashboard MENU custom-choice-student-loan MENU open-small-business-checking-account MENU signature-mma-np MENU prime-rewards-credit-card-ita MENU Select Savings MENU Elite Email A MENU Elite Email B MENU Elite Email C MENU Elite Email D MENU Buying Home During Holidays MENU travel-rewards-credit-card-ita MENU Cash Rewards Credit Card ITA MENU select-savings-psr MENU DGI - Select Savings - NonPromo MENU send-money-zelle MENU florida-state-university-student-checking MENU credit-card-suntrust-park MENU veteran-va-home-loan MENU fha-loan MENU checking-offer MENU mortgage-loans MENU ca-equity-line-of-credit MENU Balance Transfer MENU sa-brokerage-upgrade MENU Digital Mobile Banking MENU Mortgage First Time Homebuyer MENU Mortgage Options MENU avoid-fees MENU veteran-va-home-loan-refinance MENU Paymy Bills MENU Transfer Money Online MENU Treasury Terms MENU YMCA Commercial Card MENU trusteer MENU paymentstub MENU sunviewdemo MENU online-payroll-demo MENU sales-demo-web MENU Online Courier MENU * cookiegen contact-us MENU Dealer Services Next Step MENU mortgage-refinance MENU mortgage-options-affiliate MENU checking-options MENU equity-maturing-line MENU * transfer * renew * repay remote-check MENU * cookiegen oneteam-atlanta MENU * contact * thank-you oneteam-charlotte MENU * contact * thank-you oneteam-south-florida MENU * contact * thank-you oneteam-washington-dc MENU * contact * thank-you Checking Account Best Fit MENU * results foundation MENU * funds * guidelines * application-info medical-mortgage-loans MENU send-money-with-zelle MENU oneteam-footprint MENU * contact * thank-you send-money-with-zelle-mobile MENU small-business-t1 MENU small-business-t7 MENU CPF MENU * Sign On * Default CRE MENU * Login * Index * Documents DSA MENU * Login * Default eclaimrevenuegatewayservice MENU * Login * Default EPP MENU * Login * Default ESP Express MENU * Login * referencematerials * releaseinformation * toolsforsuccess * quicklinks * Default * cookiegen ESP Info MENU * Login * referencematerials * reports * forms * quicklinks * Default * Release Information * cookiegen LDS MENU * Login * Intro * Documents LockboxImageService MENU * Login * Default * cookiegen mftinfo MENU * Login * Default * cookiegen OCM MENU * Login * Default OTM MENU * user_manuals > * Onlineachcontrol > * otm-tutorial ots-info MENU * Login * cookiegen * Default Sunview Info MENU * Login * reference-materials * other-solutions * training * contact-us * Index * cookiegen tabs-select MENU tabs-select-savings MENU tabs-small-business MENU tabs-signature-advantage MENU home-mortgage-refinance MENU home-mortgage-loans MENU esp-express-demo MENU mortgage-rate-blast MENU ps-tabs-select-savings MENU zelle-suntrust-sweepstakes MENU Travel Rewards Credit Card Test & Learn MENU my-smms MENU select MENU smms MENU Home Improvement Project MENU Home Improvement Funding MENU College Loans MENU Private Student Loans MENU CD MENU MMA MENU Select Savings MENU credit-card-stadium-rewards MENU Donate United Way MENU consolidate-debt MENU cd-offer MENU mma-3-month MENU mma-12-month MENU premier MENU mma-checking-12-month MENU mma-checking-3-month MENU Virginia Hospital Center MENU mortgage-introduction MENU mbs-suntrust-rewards-thank-you MENU Mortgage Roadmap MENU Mortgage Barriers MENU SunTrust Park Thank You MENU mortgage-spring-newsletter-cd MENU mortgage-planning MENU mortgage-calculators MENU travel-rewards-credit-card-tlp MENU home-improvement MENU trends-survey MENU mortgage-loan-options MENU summer-savings MENU mortgage-summer-newsletter-cd MENU summer-savings-rates MENU mma-tn MENU mma-1 MENU how-to-protect-your-assets-tool MENU amms MENU saving-select MENU your-amms MENU cash-rewards-credit-card-ita-vidtl MENU busmma MENU credit-card-coa-tl MENU Small Business Assessment MENU mortgage-fall-newsletter MENU student-loan-rates MENU cash-rewards-credit-card-tlhol MENU Student Loans MENU Advantage Offer MENU Mortgage Winter Newsletter CD MENU SunTrust at Work MENU Promo Business MMA MENU Cash Management Evaluator Tool MENU Small Business Online MENU Mortgage Spring Newsletter MENU SunTrust Business Online MENU * < View Essential Checking Menu Essential Checking MENU * Fee Schedule * < View Advantage Checking Menu Advantage Checking MENU * Fee Schedule * < View Balanced Banking Menu Balanced Banking MENU * Fee Schedule * < View Features and Benefits Menu Features and Benefits MENU * Debit Cards * Check Routing Information * Direct Deposit * Order Checks Online * Foreign Currency * Overdraft Services * < View Essential Checking for Students Menu Essential Checking for Students MENU * < View Essential Savings Menu Essential Savings MENU * < View Select Savings Menu Select Savings MENU * < View Advantage Money Market Savings Menu Advantage Money Market Savings MENU * < View Youth Advantage Savings Menu Youth Advantage Savings MENU * < View Personal Certificates of Deposit (CDs) Menu Personal Certificates of Deposit (CDs) MENU * Advantage Certificate of Deposit (CD) * < View Your Premier Program Team Menu Your Premier Program Team MENU * < View Benefits & Rewards Menu Benefits & Rewards MENU * < View Online Banking Menu Online Banking MENU * Pay and Transfer Money * Pay Bills * eBills * Paperless Statements * Browser Requirements * < View Mobile Banking Menu Mobile Banking MENU * Mobile Apps * Text Banking * Mobile Alerts * < View ATM Menu ATM MENU * < View ATM with Teller Connect Menu ATM with Teller Connect MENU * < View How to Use Apple Pay Menu How to Use Apple Pay MENU * < View How to Use Samsung Pay Menu How to Use Samsung Pay MENU * < View How to Use Fitbit Pay Menu How to Use Fitbit Pay MENU * < View How to Use Garmin Pay Menu How to Use Garmin Pay MENU * < View How to Pay with Online Guest Checkout Menu How to Pay with Online Guest Checkout MENU * < View Frequently Asked Questions Menu Frequently Asked Questions MENU * < View Terms & Conditions Menu Terms & Conditions MENU * < View Check Cashing Services Menu Check Cashing Services MENU * < View Wire Transfer Services Menu Wire Transfer Services MENU * < View 24-Hour Automated Telephone Banking Menu 24-Hour Automated Telephone Banking MENU * < View FICO® Score Program Menu FICO® Score Program MENU * < View EMV Chip Card Technology Menu EMV Chip Card Technology MENU * < View Home Equity Line of Credit Menu Home Equity Line of Credit MENU * < View Unsecured Home Improvement Loans Menu Unsecured Home Improvement Loans MENU * < View Personal Lines of Credit Menu Personal Lines of Credit MENU * < View Check Current Rates Menu Check Current Rates MENU * < View What is a HELOC? Menu What is a HELOC? MENU * < View HELOC FAQs Menu HELOC FAQs MENU * < View Check Application Status Menu Check Application Status MENU * < View Retrieve Saved Application Menu Retrieve Saved Application MENU * < View Request a Line Increase Menu Request a Line Increase MENU * < View Draw Period Ending Menu Draw Period Ending MENU * < View Need Payment Assistance Menu Need Payment Assistance MENU * < View New Auto Loan Menu New Auto Loan MENU * < View Used Auto Loans Menu Used Auto Loans MENU * < View Auto Refinancing Menu Auto Refinancing MENU * < View Classic Car Loan Menu Classic Car Loan MENU * < View Auto Lease Buyout Menu Auto Lease Buyout MENU * < View Unsecured LightStream Loan Menu Unsecured LightStream Loan MENU * < View Home Equity Line of Credit Menu Home Equity Line of Credit MENU * < View Personal Lines of Credit Menu Personal Lines of Credit MENU * Personal Credit Line Plus * Select Credit Line * < View CD Secured Loan Menu CD Secured Loan MENU * < View Physician Loans and Lines of Credit Menu Physician Loans and Lines of Credit MENU * Physician Loan * Physician Line of Credit * Physician Loan Terms & Conditions * < View Business Loans Menu Business Loans MENU * < View Compare Student Loans Menu Compare Student Loans MENU * Custom Choice Loan * Graduate Business / MBA Loans * Union Federal Private Student Loans * Start Student Loan * In-School Refinance Option * < View How to Plan and Pay for College Menu How to Plan and Pay for College MENU * Ways to Pay for College * Student Loan Process * Students * Parents * < View Help & Tools Menu Help & Tools MENU * College Loan Calculator * Financial Aid Glossary * Student Loan FAQ * College Guides & Articles * Money Management * < View Contact Us & Access Your Account Menu Contact Us & Access Your Account MENU * < View Financial Aid Officers Menu Financial Aid Officers MENU * < View Equity Line of Credit Menu Equity Line of Credit MENU * < View LightStream Debt Consolidation Loan Menu LightStream Debt Consolidation Loan MENU * < View Personal Lines of Credit Menu Personal Lines of Credit MENU * < View Personal Credit Cards Menu Personal Credit Cards MENU * < View Marine and Boat Menu Marine and Boat MENU * Marine Loan * LightStream Boat Loan * Marine Rates * < View RV / Motorhome Menu RV / Motorhome MENU * Motorhome and RV Loan * Unsecured RV Loans * RV/Motorhome Rates * < View Motorcycle Menu Motorcycle MENU * < View Types of Mortgage Loans Menu Types of Mortgage Loans MENU * Adjustable-Rate Mortgages (ARM) * High Cost Home Financing * Doctor Loan Programs * Federal Housing Administration (FHA) Home Loans * Fixed Rate Mortgages * Jumbo Mortgage Loan * Agency Affordable Financing * USDA Rural Development Loan * VA Loans * < View First Time Home Buyer Menu First Time Home Buyer MENU * < View REO Properties Menu REO Properties MENU * < View Homebuyer Privileges Menu Homebuyer Privileges MENU * < View Builders Menu Builders MENU * < View Correspondent Lending Menu Correspondent Lending MENU * Non-Delegated Lending * Many Solutions * < View Real Estate Professionals Menu Real Estate Professionals MENU * < View Payment Options Menu Payment Options MENU * < View Forms Menu Forms MENU * < View Mortgage Assistance Program Menu Mortgage Assistance Program MENU * < View FAQs Menu FAQs MENU * < View Compare Business Checking Menu Compare Business Checking MENU * Simple Business Checking * Primary Business Checking * Business Advantage Plus Checking * Analyzed Business Checking * Analyzed Interest Checking * Business Overdraft Protection * Business Debit Cards * < View Business CDs Menu Business CDs MENU * < View Business Money Market Account Menu Business Money Market Account MENU * < View Online Cash Manager Menu Online Cash Manager MENU * Features and Benefits * OCM Fee Schedule * < View SunView Treasury Manager Menu SunView Treasury Manager MENU * < View Online Bill Pay Menu Online Bill Pay MENU * < View Direct Connect Menu Direct Connect MENU * < View Online Courier Menu Online Courier MENU * < View Business Rewards Credit Card Menu Business Rewards Credit Card MENU * < View Business Non Profit Credit Card Menu Business Non Profit Credit Card MENU * < View Business Credit Card Servicing Menu Business Credit Card Servicing MENU * < View Business Term Loans Menu Business Term Loans MENU * < View SBA Loans Menu SBA Loans MENU * < View Equipment Financing Menu Equipment Financing MENU * < View Commercial Mortgage Menu Commercial Mortgage MENU * < View Lines of Credit Menu Lines of Credit MENU * < View SBA Working Capital Loan Menu SBA Working Capital Loan MENU * < View Widespread Payment Acceptance Menu Widespread Payment Acceptance MENU * < View Loyalty Programs Small Business Menu Loyalty Programs Small Business MENU * < View Transaction Security Menu Transaction Security MENU * < View Direct Deposit Services Menu Direct Deposit Services MENU * < View ACH Services Menu ACH Services MENU * < View Online 401k Menu Online 401k MENU * For Employers * For Employees * < View Wire Transfer Menu Wire Transfer MENU * < View Deposit Checks Online Menu Deposit Checks Online MENU * < View ACH Banking Menu ACH Banking MENU * < View Online Bill Presentment & Payment Menu Online Bill Presentment & Payment MENU * < View Cash Vault Services Menu Cash Vault Services MENU * < View Lockbox Services Menu Lockbox Services MENU * < View Business Sweep Menu Business Sweep MENU * < View Fraud Protection Menu Fraud Protection MENU * Help * Online and Mobile Guarantees * Resources * Controlled Disbursement Account * Business Record Keeping * Trusteer Rapport * < View Letters of Credit and Trade Services Menu Letters of Credit and Trade Services MENU * Online Foreign Exchange * Global Payment Solutions * Documentary Collections * Letters of Credit * < View Your Retirement Menu Your Retirement MENU * < View Personal Wealth Management Menu Personal Wealth Management MENU * < View Starting Your Small Business Menu Starting Your Small Business MENU * < View Controlling Cash Flow Menu Controlling Cash Flow MENU * < View Increasing Profitability Menu Increasing Profitability MENU * < View Growing Your Business Menu Growing Your Business MENU * < View Protecting Your Assets Menu Protecting Your Assets MENU * < View Planning for Business Transition Menu Planning for Business Transition MENU * < View Guides and Resources Menu Guides and Resources MENU * < View Videos and Webinars Menu Videos and Webinars MENU * < View Financial Planning Process Menu Financial Planning Process MENU * < View SunTrust SummitView® Menu SunTrust SummitView® MENU * < View Choose an Advisory Service Level Menu Choose an Advisory Service Level MENU * < View Our Investment Philosophy Menu Our Investment Philosophy MENU * < View Quick Guide to Investing Menu Quick Guide to Investing MENU * Set Goals * Determine Investment Risk Tolerance * How to Choose Investments * Monitor Progress * < View Quick Guide to Retirement Menu Quick Guide to Retirement MENU * Getting Started * Grow Your Retirement Savings * Preparing for Retirement * Living in Retirement * < View Types of Investments Menu Types of Investments MENU * < View Stocks Menu Stocks MENU * < View Bonds Menu Bonds MENU * < View Mutual Funds Menu Mutual Funds MENU * < View Global Investing Menu Global Investing MENU * < View Annuities Menu Annuities MENU * < View ETFs Menu ETFs MENU * < View Types of IRAs Menu Types of IRAs MENU * Traditional IRA * Roth IRA * SEP IRA * IRA Rollovers * IRA CDs * < View Taxable Brokerage Accounts Menu Taxable Brokerage Accounts MENU * < View Family Menu Family MENU * < View Retirement Menu Retirement MENU * < View Wealth Transfer & Inheritance Menu Wealth Transfer & Inheritance MENU * < View Work & Career Menu Work & Career MENU * < View Health & Wellness Menu Health & Wellness MENU * < View Women and Investing Menu Women and Investing MENU * < View Considerations for LGBT Menu Considerations for LGBT MENU * < View Philanthropy Menu Philanthropy MENU * < View Our Clients Menu Our Clients MENU * Private Wealth Signature * Private Wealth RESERVE * * < View Goals-Based Planning Menu Goals-Based Planning MENU * Goals-Based Planning Process * SummitView * < View About Us Menu About Us MENU * History, Vision and Mission * Our Leadership * Careers * < View Investment Solutions Menu Investment Solutions MENU * Investment Philosophy * < View Banking Solutions Menu Banking Solutions MENU * Deposits and Cash Management * Credit and Lending * Private Wealth Credit Cards * < View Retirement Solutions Menu Retirement Solutions MENU * < View Insurance Solutions Menu Insurance Solutions MENU * Personal Insurance * Business Insurance * Long Term Care Insurance * < View Trust and Estate Solutions Menu Trust and Estate Solutions MENU * Estate Settlement * Personal and Charitable Trusts * Insurance for Estate Planning * < View SunTrust PortfolioView Menu SunTrust PortfolioView MENU * < View Sports and Entertainment Menu Sports and Entertainment MENU * < View Medical Menu Medical MENU * < View Legal Menu Legal MENU * < View International Wealth Menu International Wealth MENU * < View Family Office Menu Family Office MENU * < View Leadership Menu Leadership MENU * < View How We Work Menu How We Work MENU * < View National Footprint Menu National Footprint MENU * < View Credit and Financing Menu Credit and Financing MENU * Core Credit Solutions * Asset Based Credit Solutions * Equipment Financing * Specialty Finance Solutions * < View Treasury Management Menu Treasury Management MENU * Online Information Control * Receivables * Payables * Commercial Card Programs * Checking and IOLTA * < View Business Transition Menu Business Transition MENU * Merger and Acquisition Advisory * Business Transition Advisory * Business Succession Advisory * < View Capital Markets Menu Capital Markets MENU * < View Commercial Real Estate Banking Menu Commercial Real Estate Banking MENU * < View International Solutions Menu International Solutions MENU * Global Treasury Management * Trade Services * Trade Finance * < View Investment Banking Services Menu Investment Banking Services MENU * < View Employee Benefit Solutions Menu Employee Benefit Solutions MENU * Retirement Plan Solutions * Executive Compensation * Financial Wellness Program * < View Escrow & Reinsurance Menu Escrow & Reinsurance MENU * Specialized Escrow Solutions * Reinsurance Collateral Trusts * < View Risk Management Menu Risk Management MENU * Interest Rate Risk Management * Key Person Insurance Solutions * < View Investment Banking Coverage Menu Investment Banking Coverage MENU * < View Senior Care Menu Senior Care MENU * < View Associations and Charities (NFP) Menu Associations and Charities (NFP) MENU * < View Auto Dealers Menu Auto Dealers MENU * Dealer Financial Services * Automotive Reinsurance * < View Commercial Real Estate Menu Commercial Real Estate MENU * < View Education Menu Education MENU * < View Food and Agribusiness Menu Food and Agribusiness MENU * < View Foundations and Endowments Menu Foundations and Endowments MENU * Deep Not-for-Profit Expertise * Proactive Strategic Collaboration * Investment Advisory * < View Governments and Municipalities Menu Governments and Municipalities MENU * < View Healthcare Menu Healthcare MENU * Healthcare Receivables * < View Logistics & Supply Chain Menu Logistics & Supply Chain MENU * < View Multi-Unit Retail Menu Multi-Unit Retail MENU * NAPA Loan Program * McDonald’s Loan Program * < View Plan & Budget Menu Plan & Budget MENU * Budgeting * Getting Organized * Paying Bills * ID Theft & Fraud Protection * Taxes * < View Saving Menu Saving MENU * How to Start Saving * Saving for Emergencies * Psychology of Saving * < View Debt & Credit Menu Debt & Credit MENU * Managing Credit * Reducing Debt * Borrowing Money * < View Family & Friends Menu Family & Friends MENU * Managing Money as a Couple * Getting Married * Starting a Family * Teaching Kids About Money * Aging Parents * Friendships * < View College Menu College MENU * Saving for College * Borrowing for College * Managing Money in College * < View Work Life Menu Work Life MENU * < View Health & Wellness Menu Health & Wellness MENU * < View Travel Menu Travel MENU * < View Holiday Menu Holiday MENU * < View First Time Home Buyer Menu First Time Home Buyer MENU * < View Buying and Selling Menu Buying and Selling MENU * < View Renovating and Maintaining Menu Renovating and Maintaining MENU * < View Correspondent Lending Menu Correspondent Lending MENU * < View Realtor Builder Insights Menu Realtor Builder Insights MENU * < View Homeownership Calculators Menu Homeownership Calculators MENU * < View Investing Menu Investing MENU * Basics of Investing * Financial Planning * Market Insights * < View Retirement Menu Retirement MENU * Saving for Retirement * Nearing Retirement * Living in Retirement * < View Protect Your Family Menu Protect Your Family MENU * Insurance * Estate Planning * < View Charitable Giving Menu Charitable Giving MENU * < View Market Insights Menu Market Insights MENU * In the News * < View Financial Planning Menu Financial Planning MENU * < View Estate Planning Menu Estate Planning MENU * < View Health and Wellness Menu Health and Wellness MENU * < View Life Priorities Menu Life Priorities MENU * < View Sports and Entertainment Menu Sports and Entertainment MENU * < View Medical Professionals Menu Medical Professionals MENU * < View Start Your Business Menu Start Your Business MENU * < View Control Cash Flow Menu Control Cash Flow MENU * < View Increase Profitability Menu Increase Profitability MENU * < View Grow Your Business Menu Grow Your Business MENU * < View Protect Your Assets Menu Protect Your Assets MENU * < View Transition Your Business Menu Transition Your Business MENU * < View Cash Flow Menu Cash Flow MENU * < View Financing and Capital Markets Menu Financing and Capital Markets MENU * < View Fraud Protection Menu Fraud Protection MENU * < View Business Operations Menu Business Operations MENU * Manage Employees * Long Term Planning * International Expansion * < View Business Transition Menu Business Transition MENU * < View Industry and Local Trends Menu Industry and Local Trends MENU * < View Investments Menu Investments MENU * < View Private Foundations Menu Private Foundations MENU * < View Associations Menu Associations MENU * < View Planned Giving Menu Planned Giving MENU * < View Endowments Menu Endowments MENU * < View Expert Interviews Menu Expert Interviews MENU * < View Trustees Menu Trustees MENU * < View forbes-image Menu forbes-image MENU * < View cookiegen Menu cookiegen MENU * < View transfer Menu transfer MENU * < View renew Menu renew MENU * < View repay Menu repay MENU * < View cookiegen Menu cookiegen MENU * < View contact Menu contact MENU * < View thank-you Menu thank-you MENU * < View contact Menu contact MENU * < View thank-you Menu thank-you MENU * < View contact Menu contact MENU * < View thank-you Menu thank-you MENU * < View contact Menu contact MENU * < View thank-you Menu thank-you MENU * < View results Menu results MENU * < View funds Menu funds MENU * < View guidelines Menu guidelines MENU * < View application-info Menu application-info MENU * < View contact Menu contact MENU * < View thank-you Menu thank-you MENU * < View Sign On Menu Sign On MENU * < View Default Menu Default MENU * < View Login Menu Login MENU * < View Index Menu Index MENU * < View Documents Menu Documents MENU * < View Login Menu Login MENU * < View Default Menu Default MENU * < View Login Menu Login MENU * < View Default Menu Default MENU * < View Login Menu Login MENU * < View Default Menu Default MENU * < View Login Menu Login MENU * < View referencematerials Menu referencematerials MENU * < View releaseinformation Menu releaseinformation MENU * < View toolsforsuccess Menu toolsforsuccess MENU * < View quicklinks Menu quicklinks MENU * < View Default Menu Default MENU * < View cookiegen Menu cookiegen MENU * < View Login Menu Login MENU * < View referencematerials Menu referencematerials MENU * < View reports Menu reports MENU * < View forms Menu forms MENU * < View quicklinks Menu quicklinks MENU * < View Default Menu Default MENU * < View Release Information Menu Release Information MENU * < View cookiegen Menu cookiegen MENU * < View Login Menu Login MENU * < View Intro Menu Intro MENU * < View Documents Menu Documents MENU * < View Login Menu Login MENU * < View Default Menu Default MENU * < View cookiegen Menu cookiegen MENU * < View Login Menu Login MENU * < View Default Menu Default MENU * < View cookiegen Menu cookiegen MENU * < View Login Menu Login MENU * < View Default Menu Default MENU * < View user_manuals Menu user_manuals MENU * Login * Default * cookiegen * < View Onlineachcontrol Menu Onlineachcontrol MENU * Default * cookiegen * < View otm-tutorial Menu otm-tutorial MENU * < View Login Menu Login MENU * < View cookiegen Menu cookiegen MENU * < View Default Menu Default MENU * < View Login Menu Login MENU * < View reference-materials Menu reference-materials MENU * < View other-solutions Menu other-solutions MENU * < View training Menu training MENU * < View contact-us Menu contact-us MENU * < View Index Menu Index MENU * < View cookiegen Menu cookiegen MENU About SunTrust Find Us Search SunTrust Bank Home Menu Open Suntrust Banking Menu User Menu Default State - Not Signed In Close User Menu Choose Bank Segment Currently selected Online Banking Online Banking Online Banking Online Cash Manager User ID Password Remember User ID Submit Login For personal banking, choose Online Banking. For business banking, choose Online Cash Manager. Forgot User ID/Password? Sign Up Now Watch Demo User ID Password Submit Login For personal banking, choose Online Banking. For business banking, choose Online Cash Manager. Forgot User ID/Password? Sign Up Now Learn More Sign On to Other Services * ExpandSelect a Service * backSelect a Service * PlanLink (401k) * Online 401k * LightStream * Portfolio View * Prepaid Card * Summitview * Suntrust Investment Services * Investing Sign On to Other Services * ExpandSelect a Service * backSelect a Service * Investing * Online Foreign Exchange * Portfolio View * Trade Services * Suntrust Business Card Online * PlanLink (401k) * Online 401k * LightStream * Prepaid Card * SummitView End of User Menu Close User Menu * Open an Account * Log In Open Suntrust Sign On Menu my settings * Personal Banking CHECKING ACCOUNTS * Essential Checking * Advantage Checking * Balanced Banking * Features and Benefits * Essential Checking for Students DIGITAL PAYMENTS * How to Use Apple Pay * How to Use Samsung Pay * How to Use Fitbit Pay * How to Use Garmin Pay * How to Pay with Online Guest Checkout SAVINGS ACCOUNTS * Essential Savings * Select Savings * Advantage Money Market Savings * Youth Advantage Savings * Personal Certificates of Deposit (CDs) SUNTRUST DEALS * Frequently Asked Questions * Terms & Conditions PREMIER BANKING PROGRAM * Your Premier Program Team * Benefits & Rewards MORE SERVICES * Check Cashing Services * Wire Transfer Services * 24-Hour Automated Telephone Banking DIGITAL BANKING * Online Banking * Mobile Banking * ATM * ATM with Teller Connect * Credit Cards CASH REWARDS CREDIT CARD FEATURES AND REWARDS * FICO® Score Program * EMV Chip Card Technology TRAVEL REWARDS CREDIT CARD BUSINESS CREDIT CARDS PRIME REWARDS CREDIT CARD SECURED CREDIT CARD * Loans HOME IMPROVEMENT * Home Equity Line of Credit * Unsecured Home Improvement Loans * Personal Lines of Credit STUDENT LOANS * Compare Student Loans * How to Plan and Pay for College * Help & Tools * Contact Us & Access Your Account * Financial Aid Officers HOME EQUITY LINE OF CREDIT * Check Current Rates * What is a HELOC? * HELOC FAQs * Check Application Status * Retrieve Saved Application * Request a Line Increase * Draw Period Ending * Need Payment Assistance DEBT CONSOLIDATION * Equity Line of Credit * LightStream Debt Consolidation Loan * Personal Lines of Credit * Personal Credit Cards AUTO LOANS * New Auto Loan * Used Auto Loans * Auto Refinancing * Classic Car Loan * Auto Lease Buyout RECREATIONAL LOANS * Marine and Boat * RV / Motorhome * Motorcycle OTHER LOANS * Unsecured LightStream Loan * Home Equity Line of Credit * Personal Lines of Credit * CD Secured Loan * Physician Loans and Lines of Credit * Business Loans * Mortgages BUYING A HOME * Types of Mortgage Loans * First Time Home Buyer * REO Properties * Homebuyer Privileges SMARTGUIDE® MORTGAGE APPLICATION CONFIDENCENOW PRE-APPROVAL℠ REFINANCING BUSINESS PARTNERS * Builders * Correspondent Lending * Real Estate Professionals CURRENT RATES EXISTING CLIENTS * Payment Options * Forms * Mortgage Assistance Program MORTGAGE CALCULATORS MORTGAGE CUSTOMER SERVICE * FAQs * Small Business BANKING * Compare Business Checking * Business CDs * Business Money Market Account * Online Cash Manager * SunView Treasury Manager * Online Bill Pay * Direct Connect * Online Courier PAYROLL * Direct Deposit Services * ACH Services * Online 401k BUSINESS CREDIT CARDS * Business Rewards Credit Card * Business Non Profit Credit Card * Business Credit Card Servicing CASH MANAGEMENT * Wire Transfer * Deposit Checks Online * ACH Banking * Online Bill Presentment & Payment * Cash Vault Services * Lockbox Services * Business Sweep * Fraud Protection * Letters of Credit and Trade Services LOANS * Business Term Loans * SBA Loans * Equipment Financing * Commercial Mortgage * Lines of Credit * SBA Working Capital Loan YOUR FUTURE * Your Retirement * Personal Wealth Management MERCHANT SERVICES * Widespread Payment Acceptance * Loyalty Programs Small Business * Transaction Security BEST PRACTICES * Starting Your Small Business * Controlling Cash Flow * Increasing Profitability * Growing Your Business * Protecting Your Assets * Planning for Business Transition * Guides and Resources * Videos and Webinars * Investing & Retirement FINANCIAL PLANNING & ADVICE * Financial Planning Process * SunTrust SummitView® * Choose an Advisory Service Level * Our Investment Philosophy FIND A FINANCIAL ADVISOR HOW TO INVEST * Quick Guide to Investing RETIREMENT PLANNING * Quick Guide to Retirement INVESTMENT SOLUTIONS * Types of Investments * Stocks * Bonds * Mutual Funds * Global Investing * Annuities * ETFs * Types of IRAs * Taxable Brokerage Accounts * Wealth Management YOUR PRIORITIES * Family * Retirement * Wealth Transfer & Inheritance * Work & Career * Health & Wellness * Women and Investing * Considerations for LGBT * Philanthropy FIND AN ADVISOR OUR APPROACH * Our Clients * Goals-Based Planning * About Us SOLUTIONS AND TOOLS * Investment Solutions * Banking Solutions * Retirement Solutions * Insurance Solutions * Trust and Estate Solutions * SunTrust PortfolioView SPECIALTY GROUPS * Sports and Entertainment * Medical * Legal * International Wealth * Family Office * Corporate & Commercial SUNTRUST ADVANTAGE * Leadership * How We Work * National Footprint PRODUCTS & SERVICES * Credit and Financing * Treasury Management * Business Transition * Capital Markets * Commercial Real Estate Banking * International Solutions * Investment Banking Services * Employee Benefit Solutions * Escrow & Reinsurance * Risk Management INDUSTRY EXPERTISE * Investment Banking Coverage * Senior Care * Associations and Charities (NFP) * Auto Dealers * Commercial Real Estate * Education * Food and Agribusiness * Foundations and Endowments * Governments and Municipalities * Healthcare * Logistics & Supply Chain * Multi-Unit Retail ACCESS YOUR TREASURY ACCOUNT * Resource Center PERSONAL FINANCES RESOURCE CENTER * Plan & Budget * Saving * Debt & Credit * Family & Friends * College * Work Life * Health & Wellness * Travel * Holiday SMALL BUSINESS RESOURCE CENTER * Start Your Business * Control Cash Flow * Increase Profitability * Grow Your Business * Protect Your Assets * Transition Your Business HOMEOWNERSHIP RESOURCE CENTER * First Time Home Buyer * Buying and Selling * Renovating and Maintaining * Correspondent Lending * Realtor Builder Insights * Homeownership Calculators COMMERCIAL & CORPORATE RESOURCE CENTER * Cash Flow * Financing and Capital Markets * Fraud Protection * Business Operations * Business Transition * Industry and Local Trends INVESTING & RETIREMENT RESOURCE CENTER * Investing * Retirement * Protect Your Family * Charitable Giving FOUNDATIONS & ENDOWMENTS RESOURCE CENTER * Investments * Private Foundations * Associations * Planned Giving * Endowments * Expert Interviews * Trustees WEALTH MANAGEMENT RESOURCE CENTER * Market Insights * Financial Planning * Estate Planning * Health and Wellness * Life Priorities * Sports and Entertainment * Medical Professionals Search SunTrust.com Close Modal Window Search Clear Search Find an ATM or Branch Close Modal Window Find Us Clear Click here to find your locations. Find Us COVID-19 RESPONSE Learn about branch updatesopens in a new tab, safer banking optionsopens in a new tab, and payment relief for home mortgageopens in a new tab, home equity, auto loans, personal loans, and personal credit cardsopens in a new tab. Visit the COVID-19 Help CenterLink opens a new window Be alert to fraudLink opens a new window TRUIST CARES $25 million is on the way to provide aid for basic needs, medical supplies, and financial hardship across the nation. Learn More Log In Online Banking Online Cash Manager User ID Password Remember User ID Open an Account Open an Account Forgot User ID/Password? Already have a SunTrust Account?Enroll in Online Banking User ID Password Forgot User ID/Password? Sign Up Now Truist Cares $25 million is on the way to provide aid for basic needs, medical supplies, and financial hardship across the nation. Learn More SIGN ON Online Banking Log In Link opens in New window. Small Business Log In Link opens in New window. Enroll in Online Banking Enroll in Online Banking Open an Account PRODUCTS AND SERVICES TO MAKE BANKING EASY * Personal Checking * Mortgage * Credit Cards & Consumer Loans * Investments & Retirement * Wealth Management * Corporate & Commercial CREDIT CARDS Enjoy unlimited cash back, travel rewards, or balance transfer savings with our cards. Learn More SMALL BUSINESS A great idea is the catalyst, but SunTrust products help improve cash flow and nurture growth. Learn More LIGHTSTREAM® LOANS Finance almost anything you want with a low-interest, fixed rate LightStream® Loan. Learn More CHECKING SunTrust offers a variety of checking accounts to fit your unique needs. Learn More SUNTRUST AND BB&T HAVE JOINED TO BECOME TRUIST. Most clients won't have their deposit account or routing numbers change as a result of the merger. Learn More > For information about divestitures, view summary of the Dept. of Justice Letter of Agreement with SunTrust & BB&T. TRUIST ANNOUNCES COVID-19 RELIEF MEASURES FOR COMMUNITIES, CLIENTS AND TEAMMATES Truist Financial Corporation announced its Truist Cares initiative to support short-term and long-term needs of communities, clients and teammates in response to the COVID-19 pandemic. A pledge of $25 million in philanthropic support will aid in supporting basic needs, medical supplies, and financial hardship. Read More > CONFIDENTLY FACE THE UNEXPECTED Whether it is a hurricane, the death of a loved one, or a job loss, SunTrust’s Client Emergency Resource page can help you prepare and respond to life’s unexpected moments. Find easy-to-use personal and financial resources that put emergency financial well-being mobile tools in the palm of your hands. Learn More > MOVE WITH CONFIDENCE. Banking on the go is easy with SunTrust Mobile Banking and the SunTrust Mobile App. Get The App FIND YOUR PATH TO FINANCIAL CONFIDENCE Browse the resources that are right for you— relevant articles, stories, and tools. Learn More OPEN AN ACCOUNT Easy, fast and secure. Open Now FIND A BRANCH OR ATM City, State, or Zip Click here to find your locations. Go CHECK TODAY'S RATES Select one Select one Select one Mortgage Rates Auto Loans * Privacy * Fraud & Security * Terms & Conditions * Accessibility * Sitemap About Us * About SunTrust * Facts About Banking * Investor Relations * Newsroom * Military & Veterans * Careers * onUp Support * Help Center * Client Emergency Resources * 800 SUNTRUST Find Us * Find ATMs & Branches Follow Us * Facebook Link opens a new window * Instagram Link opens a new window * LinkedIn Link opens a new window * Twitter Link opens a new window * Pinterest Link opens a new window * YouTube Link opens a new window SunTrust Bank, now Truist Bank, Member FDIC. ©2020 Truist Financial Corporation. SunTrust®, the SunTrust logo, and Truist are service marks of Truist Financial Corporation. All rights reserved. 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 Truist, SunTrust®, SunTrust PortfolioView, SunTrust Robinson Humphrey®, SunTrust Premier Program®, AMC Pinnacle®, AMC Premier®, Access 3®, Signature Advantage Brokerage, Custom Choice Loan®, SunTrust SummitView®, LightStream®, GFO Advisory Services®, BB&T®, BB&T Securities®, BB&T Sterling Advisors, Sterling Capital®, BB&T Investments, and BB&T Scott & Stringfellow® are service marks of Truist Financial Corporation. All rights reserved. All other trademarks are the property of their respective owners. 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 SunTrust Investment Services, Inc. and 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 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 Sterling Advisors, 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. "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; SunTrust 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; SunTrust Advisory Services, Inc., a SEC registered investment adviser which provides Investment Advisory services. 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, SunTrust Investment Services, Inc., and SunTrust Advisory Services, Inc. SunTrust Robinson Humphrey is the trade name for the corporate and investment banking services of Truist Financial Corporation and its subsidiaries, including SunTrust Robinson Humphrey, Inc., member FINRALink opens a new window and SIPCLink opens a new window. 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. CLOSE ✕ * Coronavirus Response * Be alert to fraud, and learn more about branch updates, payment relief requests Link opens in a new window, safer banking options, and our Coronavirus (COVID-19) pandemic relief efforts Link opens in a new window. × Opens a new window close modal