How to setup and use Treez v3 API authentication with self-signed JWTs
Treez v3 APIs use self-signed JWT (JSON Web Token) authentication. This authentication scheme requires a self-signed JWT to be included in the header of each request. The JWT must be signed by the integrator using a private key and other unique parameters. Upon receipt, the JWT is decrypted and validated using the corresponding public key, which the integrator provides to Treez during initial account setup.
With this scheme, an integrator can be granted access to any number of organizations and dispensaries with whom a relationship is shared. This flexible one-to-many design eliminates the need to assign a separate API key for each dispensary.
Steps:
Create a public/private key pair
Treez recommends using OpenSSL to create a public/private key pair. The command for key pair creation is the same across platforms. The command below creates a public key file (.crt) and a private key file (.key).
Important Security Note:
Your private key file should be treated as a secure credential and should not be shared with anyone.
Command to create a public/private key pair:
openssl req -new -newkey rsa:4096 -x509 -sha256 -days 365 -noenc -out public.crt -keyout private.key -verbose
Note for Microsoft Windows users
If using Windows, there is no standalone OpenSSL installer available, so you must use the OpenSSL executable included with the Git for Windows package, which can be downloaded here.
After installation, the openssl.exe file will be located in C:\Program Files\Git\usr\bin
Execute the command from the directory where you want your key files to be created. If you run the command from within the directory where openssl.exe is located, you will receive an error when the program attempts to create the output files.
Send the public key file (.crt) to Treez
Treez will store an integrator's public key to facilitate the decryption and validation of the self-signed JWT. The JWT that you send must be signed with the private key that corresponds to the public key that you send to Treez. Email the public key .crt file to [email protected].
Treez will provide you with a keyId
for the integrator record that's created in the authentication system. This integrator record holds your public key and the list of organizations and dispensaries to which you have access. Access to additional organizations and dispensaries can be added or revoked by updating this integrator record.
Sign requests with your private key
Use your keyId
and your private key to sign the JWT when making a call to Treez v3 APIs. The Treez authorizer will decode the JWT using your public key, and verify that you have access.
A newly signed JWT must be included with every API call. JWTs should have a TTL (Time To Live) of 30,000 milliseconds (30 seconds) to ensure security by providing timely token expiration.
Treez enforces a TTL of 30,000 milliseconds for a signed JWT
We do this to prevent unauthorized access. TTL value outside this range will return a 400 response.
Below are some code examples of for creating a self-signed JWT. Please note these are only examples and should not be considered production-ready code.
const express = require('express'),
app = express(),
port = process.env.PORT || 3000,
bodyParser = require('body-parser');
const crypto = require('crypto');
const fs = require('fs');
const maxTimeGap = 30000; // 30 seconds as milliseconds
app.use(bodyParser.urlencoded({ extended: true }));
app.use(bodyParser.json());
app.all('/:folder/:file', route);
app.listen(port);
// pull this in from env variable
const expectedHost = 'https://api.mso.treez.io/v3/data/query';
async function route(request, response) {
// if no header, 401
if (!request.headers.authorization) {
response.status(401).send();
return;
}
// if missing part of the header, 401
let [ token, signature ] = request.headers.authorization.split('.');
if (!token || !signature) {
response.status(401).send();
return;
}
// decode JWT which has partnerId and timestamp in it
let header = null;
try {
header = JSON.parse(Buffer.from(token, 'base64').toString());
} catch (ex) {
// if decoding fails, 401
response.status(401).send();
return;
}
// if JWT is missing any parts, 401
if (!header.aud || !header.exp || !header.iss || !header.iat || !header.oid) {
response.status(401).send();
return;
}
// if path doesn't match aud, 401
if (header.aud !== `${expectedHost}${request.path}`) {
response.status(401).send();
return;
}
// check signature against public key
try {
// get public key cert based on provided partnerId, not hard coding it
let publicKey = fs.readFileSync('./tlsDemo.crt', 'utf8');
let verify = crypto.createVerify('sha256');
verify.update(token);
let buffSign = Buffer.from(signature, 'base64');
// if signature check fails, 401
if (!verify.verify(publicKey, buffSign)) {
response.status(401).send();
return;
}
} catch(ex) {
// if we get an error reading or verifying crypto stuff, straight to 401
response.status(401).send();
return;
}
// if timestamps don't check out, believe it or not, 401
let now = Date.now();
if (!header.iat || header.iat > now || !header.exp || header.exp < now || header.iat + maxTimeGap < now) {
response.status(401).send();
return;
}
// if everything checks out, build request context and forward to down stream services
response.status(200).send('authentication successful');
}
import java.io.*;
import java.util.Base64;
import javax.servlet.*;
import javax.servlet.http.*;
import java.security.*;
import java.nio.charset.StandardCharsets;
import org.json.JSONObject;
public class AuthServlet extends HttpServlet {
private static final String expectedHost = "https://api.mso.treez.io/v3/data/query";
private static final long maxTimeGap = 30000; // 30 seconds as milliseconds
protected void service(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException {
String authHeader = request.getHeader("Authorization");
if (authHeader == null) {
response.setStatus(401);
return;
}
String[] parts = authHeader.split("\\.");
if (parts.length != 2) {
response.setStatus(401);
return;
}
String token = parts[0];
String signature = parts[1];
String decodedToken;
try {
decodedToken = new String(Base64.getDecoder().decode(token), StandardCharsets.UTF_8);
} catch (Exception ex) {
response.setStatus(401);
return;
}
JSONObject header = new JSONObject(decodedToken);
if (!header.has("aud") || !header.has("exp") || !header.has("iss") || !header.has("iat") || !header.has("oid")) {
response.setStatus(401);
return;
}
if (!expectedHost.concat(request.getPathInfo()).equals(header.getString("aud"))) {
response.setStatus(401);
return;
}
try {
String publicKey = new String(Files.readAllBytes(Paths.get("./tlsDemo.crt")), StandardCharsets.UTF_8);
Signature verify = Signature.getInstance("SHA256withRSA");
verify.initVerify(KeyFactory.getInstance("RSA").generatePublic(new X509EncodedKeySpec(Base64.getDecoder().decode(publicKey.getBytes(StandardCharsets.UTF_8)))));
verify.update(token.getBytes(StandardCharsets.UTF_8));
if (!verify.verify(Base64.getDecoder().decode(signature))) {
response.setStatus(401);
return;
}
} catch (Exception ex) {
response.setStatus(401);
return;
}
long now = System.currentTimeMillis();
if (header.getLong("iat") > now || header.getLong("exp") < now || header.getLong("iat") + maxTimeGap < now) {
response.setStatus(401);
return;
}
response.setStatus(200);
response.getWriter().write("authentication successful");
}
}
require 'sinatra'
require 'json'
require 'openssl'
require 'base64'
EXPECTED_HOST = 'https://api.mso.treez.io/v3/data/query'
MAX_TIME_GAP = 30000 # 30 seconds as milliseconds
before '/:folder/:file' do
auth_header = request.env['HTTP_AUTHORIZATION']
halt 401 unless auth_header
token, signature = auth_header.split('.')
halt 401 unless token && signature
begin
decoded_token = Base64.decode64(token)
header = JSON.parse(decoded_token)
rescue
halt 401
end
halt 401 unless header['aud'] && header['exp'] && header['iss'] && header['iat'] && header['oid']
halt 401 unless header['aud'] == "#{EXPECTED_HOST}#{request.path_info}"
begin
public_key_data = File.read('./tlsDemo.crt')
public_key = OpenSSL::PKey::RSA.new(public_key_data)
verify = OpenSSL::PKey::RSA.new
verified = verify.verify(OpenSSL::Digest::SHA256.new, Base64.decode64(signature), token)
halt 401 unless verified
rescue
halt 401
end
now = Time.now.to_i * 1000 # Convert to milliseconds
halt 401 unless header['iat'] && header['iat'] <= now && header['exp'] && header['exp'] >= now && (header['iat'] + MAX_TIME_GAP) >= now
status 200
body 'authentication successful'
end
set :port, 3000
package main
import (
"crypto/sha256"
"crypto/x509"
"encoding/base64"
"encoding/json"
"encoding/pem"
"fmt"
"io/ioutil"
"net/http"
"time"
"github.com/gorilla/mux"
)
const (
expectedHost = "https://api.mso.treez.io/v3/data/query"
maxTimeGap = 30000 // 30 seconds as milliseconds
)
func main() {
r := mux.NewRouter()
r.HandleFunc("/{folder}/{file}", routeHandler)
http.ListenAndServe(":3000", r)
}
func routeHandler(w http.ResponseWriter, r *http.Request) {
authHeader := r.Header.Get("Authorization")
if authHeader == "" {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
parts := splitOnce(authHeader, ".")
if len(parts) != 2 {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
token, signature := parts[0], parts[1]
decodedToken, err := base64.StdEncoding.DecodeString(token)
if err != nil {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
var header map[string]interface{}
err = json.Unmarshal(decodedToken, &header)
if err != nil {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
if header["aud"] != expectedHost+r.URL.Path {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
publicKeyData, err := ioutil.ReadFile("./tlsDemo.crt")
if err != nil {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
block, _ := pem.Decode(publicKeyData)
if block == nil {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
publicKey, err := x509.ParsePKIXPublicKey(block.Bytes)
if err != nil {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
rsaPublicKey, ok := publicKey.(*rsa.PublicKey)
if !ok {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
sig, err := base64.StdEncoding.DecodeString(signature)
if err != nil {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
hashed := sha256.Sum256([]byte(token))
err = rsa.VerifyPKCS1v15(rsaPublicKey, crypto.SHA256, hashed[:], sig)
if err != nil {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
now := time.Now().UnixNano() / 1e6 // Convert to milliseconds
if header["iat"].(float64) > float64(now) || header["exp"].(float64) < float64(now) || header["iat"].(float64)+maxTimeGap < float64(now) {
http.Error(w, "Unauthorized", http.StatusUnauthorized)
return
}
w.WriteHeader(http.StatusOK)
w.Write([]byte("authentication successful"))
}
// Splits a string at the first occurrence of sep
func splitOnce(s, sep string) []string {
loc := strings.Index(s, sep)
if loc == -1 {
return []string{s}
}
return []string{s[:loc], s[loc+1:]}
}
import requests
import json
import time
import base64
from Crypto.PublicKey import RSA
from Crypto.Signature import pkcs1_15
from Crypto.Hash import SHA256
def create_token_and_signature():
header = {
'aud': 'https://api.mso.treez.io/v3/data/query',
'exp': int(time.time() * 1000) + 30000, # 30 seconds as milliseconds
'iss': 'yourKeyId', # KeyId,
'iat': int(time.time() * 1000))
}
token = base64.urlsafe_b64encode(json.dumps(header).encode()).decode('utf-8')
private_key = RSA.import_key(open('./tlsDemo.key').read())
sign = pkcs1_15.new(private_key)
h = SHA256.new(token.encode())
signature = base64.urlsafe_b64encode(sign.sign(h)).decode('utf-8')
return token, signature
def main():
token, signature = create_token_and_signature()
print(f"Generated Token: {token}")
print(f"Generated Signature: {signature}")
try:
response = requests.post(
'https://api.mso.treez.io/v3/data/query',
json={'sql': 'SELECT * FROM data_api.{view_name} LIMIT 1000'},
headers={'Authorization': f'{token}.{signature}'}
)
print(f'status: {response.status_code}, body: {response.json()}')
except requests.exceptions.RequestException as ex:
print(ex)
if __name__ == "__main__":
main()
Postman
Click here to download a pre-configured Postman collection
- Sign JWTs using a Pre-request Script
- Make sure the Pre-request Script is in the root folder of the collection so that the single copy can be referenced by child items for convenience.
- Create and populate the following collection variables:
privateKey
- the contents of the private key (.key) file that was generated above. Use the full contents of the .key file, including the header and footer (-----BEGIN CERTIFICATE-----
and-----END CERTIFICATE-----
)keyId
- this value is provided to an integrator by Treezpmlib_code
- the value of this variable should be the entire contents of thebundle.js
file found at https://joolfe.github.io/postman-util-lib/. For reference, the entire file contents are also below in thebundle.js
tab.
// Base64 encoding function
function btoa(str) {
return Buffer.from(str, 'binary').toString('base64');
}
// Retrieve crypto library for signing
if (!pm.environment.get('pmlib_code')) {
console.log("Library code is not set in the environment.");
} else {
signrequest();
}
function signrequest() {
eval(pm.environment.get('pmlib_code'));
let aud = pm.request.url.toString(true); // The full URL with https://
aud = aud.replace(/^https?:\/\//, ''); // Trim "https://" or "http://" from the beginning
// Retrieve key from Postman parameters or from file or code or whatever
var privateKey = pm.variables.get('privateKey');
// Create the basic header shape
var header = {
aud: pm.request.url.toString(true),
iss: pm.variables.get('keyId'),
iat: Date.now(),
exp: Date.now() + 30000, //30 seconds as milliseconds
};
var strHeader = btoa(JSON.stringify(header));
// Create the signature
var signer = new pmlib.rs.Signature({
alg: 'SHA256withRSA'
});
signer.init(privateKey);
var hash = signer.signString(strHeader);
var signature = CryptoJS.enc.Base64.stringify(CryptoJS.enc.Hex.parse(hash));
// Set authorization header
pm.request.headers.add({
key: "Authorization",
value: `${strHeader}.${signature}`
});
// Log the value of the Authorization header to the Postman console
console.log(`${strHeader}.${signature}`);
}
! function(t) {
if ("object" == typeof exports && "undefined" != typeof module) module.exports = t();
else if ("function" == typeof define && define.amd) define([], t);
else {
("undefined" != typeof window ? window : "undefined" != typeof global ? global : "undefined" != typeof self ? self : this).pmlib = t()
}
}((function() {
for (var t, e, r = (t = function(t, n) {
(function(t) {
(function() {
"use strict";
function t(t) {
if (t > 2147483647) throw new RangeError('The value "' + t + '" is invalid for option "size"');
var e = new Uint8Array(t);
return e.__proto__ = r.prototype, e
}
function r(t, e, r) {
if ("number" == typeof t) {
if ("string" == typeof e) throw new TypeError('The "string" argument must be of type string. Received type number');
return o(t)
}
return s(t, e, r)
}
function s(e, i, n) {
if ("string" == typeof e) return function(e, i) {
if ("string" == typeof i && "" !== i || (i = "utf8"), !r.isEncoding(i)) throw new TypeError("Unknown encoding: " + i);
var n = 0 | c(e, i),
s = t(n),
a = s.write(e, i);
return a !== n && (s = s.slice(0, a)), s
}(e, i);
if (ArrayBuffer.isView(e)) return h(e);
if (null == e) throw TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof e);
if (V(e, ArrayBuffer) || e && V(e.buffer, ArrayBuffer)) return function(t, e, i) {
if (e < 0 || t.byteLength < e) throw new RangeError('"offset" is outside of buffer bounds');
if (t.byteLength < e + (i || 0)) throw new RangeError('"length" is outside of buffer bounds');
var n;
return (n = void 0 === e && void 0 === i ? new Uint8Array(t) : void 0 === i ? new Uint8Array(t, e) : new Uint8Array(t, e, i)).__proto__ = r.prototype, n
}(e, i, n);
if ("number" == typeof e) throw new TypeError('The "value" argument must not be of type number. Received type number');
var s = e.valueOf && e.valueOf();
if (null != s && s !== e) return r.from(s, i, n);
var a = function(e) {
if (r.isBuffer(e)) {
var i = 0 | u(e.length),
n = t(i);
return 0 === n.length || e.copy(n, 0, 0, i), n
}
return void 0 !== e.length ? "number" != typeof e.length || L(e.length) ? t(0) : h(e) : "Buffer" === e.type && Array.isArray(e.data) ? h(e.data) : void 0
}(e);
if (a) return a;
if ("undefined" != typeof Symbol && null != Symbol.toPrimitive && "function" == typeof e[Symbol.toPrimitive]) return r.from(e[Symbol.toPrimitive]("string"), i, n);
throw new TypeError("The first argument must be one of type string, Buffer, ArrayBuffer, Array, or Array-like Object. Received type " + typeof e)
}
function a(t) {
if ("number" != typeof t) throw new TypeError('"size" argument must be of type number');
if (t < 0) throw new RangeError('The value "' + t + '" is invalid for option "size"')
}
function o(e) {
return a(e), t(e < 0 ? 0 : 0 | u(e))
}
function h(e) {
for (var r = e.length < 0 ? 0 : 0 | u(e.length), i = t(r), n = 0; n < r; n += 1) i[n] = 255 & e[n];
return i
}
function u(t) {
if (t >= 2147483647) throw new RangeError("Attempt to allocate Buffer larger than maximum size: 0x" + 2147483647..toString(16) + " bytes");
return 0 | t
}
function c(t, e) {
if (r.isBuffer(t)) return t.length;
if (ArrayBuffer.isView(t) || V(t, ArrayBuffer)) return t.byteLength;
if ("string" != typeof t) throw new TypeError('The "string" argument must be one of type string, Buffer, or ArrayBuffer. Received type ' + typeof t);
var i = t.length,
n = arguments.length > 2 && !0 === arguments[2];
if (!n && 0 === i) return 0;
for (var s = !1;;) switch (e) {
case "ascii":
case "latin1":
case "binary":
return i;
case "utf8":
case "utf-8":
return N(t).length;
case "ucs2":
case "ucs-2":
case "utf16le":
case "utf-16le":
return 2 * i;
case "hex":
return i >>> 1;
case "base64":
return O(t).length;
default:
if (s) return n ? -1 : N(t).length;
e = ("" + e).toLowerCase(), s = !0
}
}
function l(t, e, r) {
var i = t[e];
t[e] = t[r], t[r] = i
}
function g(t, e, i, n, s) {
if (0 === t.length) return -1;
if ("string" == typeof i ? (n = i, i = 0) : i > 2147483647 ? i = 2147483647 : i < -2147483648 && (i = -2147483648), L(i = +i) && (i = s ? 0 : t.length - 1), i < 0 && (i = t.length + i), i >= t.length) {
if (s) return -1;
i = t.length - 1
} else if (i < 0) {
if (!s) return -1;
i = 0
}
if ("string" == typeof e && (e = r.from(e, n)), r.isBuffer(e)) return 0 === e.length ? -1 : p(t, e, i, n, s);
if ("number" == typeof e) return e &= 255, "function" == typeof Uint8Array.prototype.indexOf ? s ? Uint8Array.prototype.indexOf.call(t, e, i) : Uint8Array.prototype.lastIndexOf.call(t, e, i) : p(t, [e], i, n, s);
throw new TypeError("val must be string, number or Buffer")
}
function p(t, e, r, i, n) {
var s, a = 1,
o = t.length,
h = e.length;
if (void 0 !== i && ("ucs2" === (i = String(i).toLowerCase()) || "ucs-2" === i || "utf16le" === i || "utf-16le" === i)) {
if (t.length < 2 || e.length < 2) return -1;
a = 2, o /= 2, h /= 2, r /= 2
}
function u(t, e) {
return 1 === a ? t[e] : t.readUInt16BE(e * a)
}
if (n) {
var c = -1;
for (s = r; s < o; s++)
if (u(t, s) === u(e, -1 === c ? 0 : s - c)) {
if (-1 === c && (c = s), s - c + 1 === h) return c * a
} else -1 !== c && (s -= s - c), c = -1
} else
for (r + h > o && (r = o - h), s = r; s >= 0; s--) {
for (var l = !0, f = 0; f < h; f++)
if (u(t, s + f) !== u(e, f)) {
l = !1;
break
}
if (l) return s
}
return -1
}
function d(t, e, r, i) {
r = Number(r) || 0;
var n = t.length - r;
i ? (i = Number(i)) > n && (i = n) : i = n;
var s = e.length;
i > s / 2 && (i = s / 2);
for (var a = 0; a < i; ++a) {
var o = parseInt(e.substr(2 * a, 2), 16);
if (L(o)) return a;
t[r + a] = o
}
return a
}
function v(t, e, r, i) {
return j(N(e, t.length - r), t, r, i)
}
function y(t, e, r, i) {
return j(function(t) {
for (var e = [], r = 0; r < t.length; ++r) e.push(255 & t.charCodeAt(r));
return e
}(e), t, r, i)
}
function m(t, e, r, i) {
return y(t, e, r, i)
}
function S(t, e, r, i) {
return j(O(e), t, r, i)
}
function x(t, e, r, i) {
return j(function(t, e) {
for (var r, i, n, s = [], a = 0; a < t.length && !((e -= 2) < 0); ++a) i = (r = t.charCodeAt(a)) >> 8, n = r % 256, s.push(n), s.push(i);
return s
}(e, t.length - r), t, r, i)
}
function E(t, e, r) {
return 0 === e && r === t.length ? i.fromByteArray(t) : i.fromByteArray(t.slice(e, r))
}
function w(t, e, r) {
r = Math.min(t.length, r);
for (var i = [], n = e; n < r;) {
var s, a, o, h, u = t[n],
c = null,
l = u > 239 ? 4 : u > 223 ? 3 : u > 191 ? 2 : 1;
if (n + l <= r) switch (l) {
case 1:
u < 128 && (c = u);
break;
case 2:
128 == (192 & (s = t[n + 1])) && (h = (31 & u) << 6 | 63 & s) > 127 && (c = h);
break;
case 3:
s = t[n + 1], a = t[n + 2], 128 == (192 & s) && 128 == (192 & a) && (h = (15 & u) << 12 | (63 & s) << 6 | 63 & a) > 2047 && (h < 55296 || h > 57343) && (c = h);
break;
case 4:
s = t[n + 1], a = t[n + 2], o = t[n + 3], 128 == (192 & s) && 128 == (192 & a) && 128 == (192 & o) && (h = (15 & u) << 18 | (63 & s) << 12 | (63 & a) << 6 | 63 & o) > 65535 && h < 1114112 && (c = h)
}
null === c ? (c = 65533, l = 1) : c > 65535 && (c -= 65536, i.push(c >>> 10 & 1023 | 55296), c = 56320 | 1023 & c), i.push(c), n += l
}
return function(t) {
var e = t.length;
if (e <= b) return String.fromCharCode.apply(String, t);
for (var r = "", i = 0; i < e;) r += String.fromCharCode.apply(String, t.slice(i, i += b));
return r
}(i)
}
n.Buffer = r, n.INSPECT_MAX_BYTES = 50, r.TYPED_ARRAY_SUPPORT = function() {
try {
var t = new Uint8Array(1);
return t.__proto__ = {
__proto__: Uint8Array.prototype,
foo: function() {
return 42
}
}, 42 === t.foo()
} catch (e) {
return !1
}
}(), r.TYPED_ARRAY_SUPPORT || "undefined" == typeof console || "function" != typeof console.error || console.error("This browser lacks typed array (Uint8Array) support which is required by `buffer` v5.x. Use `buffer` v4.x if you require old browser support."), Object.defineProperty(r.prototype, "parent", {
enumerable: !0,
get: function() {
if (r.isBuffer(this)) return this.buffer
}
}), Object.defineProperty(r.prototype, "offset", {
enumerable: !0,
get: function() {
if (r.isBuffer(this)) return this.byteOffset
}
}), "undefined" != typeof Symbol && null != Symbol.species && r[Symbol.species] === r && Object.defineProperty(r, Symbol.species, {
value: null,
configurable: !0,
enumerable: !1,
writable: !1
}), r.poolSize = 8192, r.from = function(t, e, r) {
return s(t, e, r)
}, r.prototype.__proto__ = Uint8Array.prototype, r.__proto__ = Uint8Array, r.alloc = function(e, r, i) {
return function(e, r, i) {
return a(e), e <= 0 ? t(e) : void 0 !== r ? "string" == typeof i ? t(e).fill(r, i) : t(e).fill(r) : t(e)
}(e, r, i)
}, r.allocUnsafe = function(t) {
return o(t)
}, r.allocUnsafeSlow = function(t) {
return o(t)
}, r.isBuffer = function(t) {
return null != t && !0 === t._isBuffer && t !== r.prototype
}, r.compare = function(t, e) {
if (V(t, Uint8Array) && (t = r.from(t, t.offset, t.byteLength)), V(e, Uint8Array) && (e = r.from(e, e.offset, e.byteLength)), !r.isBuffer(t) || !r.isBuffer(e)) throw new TypeError('The "buf1", "buf2" arguments must be one of type Buffer or Uint8Array');
if (t === e) return 0;
for (var i = t.length, n = e.length, s = 0, a = Math.min(i, n); s < a; ++s)
if (t[s] !== e[s]) {
i = t[s], n = e[s];
break
}
return i < n ? -1 : n < i ? 1 : 0
}, r.isEncoding = function(t) {
switch (String(t).toLowerCase()) {
case "hex":
case "utf8":
case "utf-8":
case "ascii":
case "latin1":
case "binary":
case "base64":
case "ucs2":
case "ucs-2":
case "utf16le":
case "utf-16le":
return !0;
default:
return !1
}
}, r.concat = function(t, e) {
if (!Array.isArray(t)) throw new TypeError('"list" argument must be an Array of Buffers');
if (0 === t.length) return r.alloc(0);
var i;
if (void 0 === e)
for (e = 0, i = 0; i < t.length; ++i) e += t[i].length;
var n = r.allocUnsafe(e),
s = 0;
for (i = 0; i < t.length; ++i) {
var a = t[i];
if (V(a, Uint8Array) && (a = r.from(a)), !r.isBuffer(a)) throw new TypeError('"list" argument must be an Array of Buffers');
a.copy(n, s), s += a.length
}
return n
}, r.byteLength = c, r.prototype._isBuffer = !0, r.prototype.swap16 = function() {
var t = this.length;
if (t % 2 != 0) throw new RangeError("Buffer size must be a multiple of 16-bits");
for (var e = 0; e < t; e += 2) l(this, e, e + 1);
return this
}, r.prototype.swap32 = function() {
var t = this.length;
if (t % 4 != 0) throw new RangeError("Buffer size must be a multiple of 32-bits");
for (var e = 0; e < t; e += 4) l(this, e, e + 3), l(this, e + 1, e + 2);
return this
}, r.prototype.swap64 = function() {
var t = this.length;
if (t % 8 != 0) throw new RangeError("Buffer size must be a multiple of 64-bits");
for (var e = 0; e < t; e += 8) l(this, e, e + 7), l(this, e + 1, e + 6), l(this, e + 2, e + 5), l(this, e + 3, e + 4);
return this
}, r.prototype.toString = function() {
var t = this.length;
return 0 === t ? "" : 0 === arguments.length ? w(this, 0, t) : function(t, e, r) {
var i = !1;
if ((void 0 === e || e < 0) && (e = 0), e > this.length) return "";
if ((void 0 === r || r > this.length) && (r = this.length), r <= 0) return "";
if ((r >>>= 0) <= (e >>>= 0)) return "";
for (t || (t = "utf8");;) switch (t) {
case "hex":
return D(this, e, r);
case "utf8":
case "utf-8":
return w(this, e, r);
case "ascii":
return F(this, e, r);
case "latin1":
case "binary":
return A(this, e, r);
case "base64":
return E(this, e, r);
case "ucs2":
case "ucs-2":
case "utf16le":
case "utf-16le":
return I(this, e, r);
default:
if (i) throw new TypeError("Unknown encoding: " + t);
t = (t + "").toLowerCase(), i = !0
}
}.apply(this, arguments)
}, r.prototype.toLocaleString = r.prototype.toString, r.prototype.equals = function(t) {
if (!r.isBuffer(t)) throw new TypeError("Argument must be a Buffer");
return this === t || 0 === r.compare(this, t)
}, r.prototype.inspect = function() {
var t = "",
e = n.INSPECT_MAX_BYTES;
return t = this.toString("hex", 0, e).replace(/(.{2})/g, "$1 ").trim(), this.length > e && (t += " ... "), "<Buffer " + t + ">"
}, r.prototype.compare = function(t, e, i, n, s) {
if (V(t, Uint8Array) && (t = r.from(t, t.offset, t.byteLength)), !r.isBuffer(t)) throw new TypeError('The "target" argument must be one of type Buffer or Uint8Array. Received type ' + typeof t);
if (void 0 === e && (e = 0), void 0 === i && (i = t ? t.length : 0), void 0 === n && (n = 0), void 0 === s && (s = this.length), e < 0 || i > t.length || n < 0 || s > this.length) throw new RangeError("out of range index");
if (n >= s && e >= i) return 0;
if (n >= s) return -1;
if (e >= i) return 1;
if (this === t) return 0;
for (var a = (s >>>= 0) - (n >>>= 0), o = (i >>>= 0) - (e >>>= 0), h = Math.min(a, o), u = this.slice(n, s), c = t.slice(e, i), l = 0; l < h; ++l)
if (u[l] !== c[l]) {
a = u[l], o = c[l];
break
}
return a < o ? -1 : o < a ? 1 : 0
}, r.prototype.includes = function(t, e, r) {
return -1 !== this.indexOf(t, e, r)
}, r.prototype.indexOf = function(t, e, r) {
return g(this, t, e, r, !0)
}, r.prototype.lastIndexOf = function(t, e, r) {
return g(this, t, e, r, !1)
}, r.prototype.write = function(t, e, r, i) {
if (void 0 === e) i = "utf8", r = this.length, e = 0;
else if (void 0 === r && "string" == typeof e) i = e, r = this.length, e = 0;
else {
if (!isFinite(e)) throw new Error("Buffer.write(string, encoding, offset[, length]) is no longer supported");
e >>>= 0, isFinite(r) ? (r >>>= 0, void 0 === i && (i = "utf8")) : (i = r, r = void 0)
}
var n = this.length - e;
if ((void 0 === r || r > n) && (r = n), t.length > 0 && (r < 0 || e < 0) || e > this.length) throw new RangeError("Attempt to write outside buffer bounds");
i || (i = "utf8");
for (var s = !1;;) switch (i) {
case "hex":
return d(this, t, e, r);
case "utf8":
case "utf-8":
return v(this, t, e, r);
case "ascii":
return y(this, t, e, r);
case "latin1":
case "binary":
return m(this, t, e, r);
case "base64":
return S(this, t, e, r);
case "ucs2":
case "ucs-2":
case "utf16le":
case "utf-16le":
return x(this, t, e, r);
default:
if (s) throw new TypeError("Unknown encoding: " + i);
i = ("" + i).toLowerCase(), s = !0
}
}, r.prototype.toJSON = function() {
return {
type: "Buffer",
data: Array.prototype.slice.call(this._arr || this, 0)
}
};
var b = 4096;
function F(t, e, r) {
var i = "";
r = Math.min(t.length, r);
for (var n = e; n < r; ++n) i += String.fromCharCode(127 & t[n]);
return i
}
function A(t, e, r) {
var i = "";
r = Math.min(t.length, r);
for (var n = e; n < r; ++n) i += String.fromCharCode(t[n]);
return i
}
function D(t, e, r) {
var i, n = t.length;
(!e || e < 0) && (e = 0), (!r || r < 0 || r > n) && (r = n);
for (var s = "", a = e; a < r; ++a) s += (i = t[a]) < 16 ? "0" + i.toString(16) : i.toString(16);
return s
}
function I(t, e, r) {
for (var i = t.slice(e, r), n = "", s = 0; s < i.length; s += 2) n += String.fromCharCode(i[s] + 256 * i[s + 1]);
return n
}
function C(t, e, r) {
if (t % 1 != 0 || t < 0) throw new RangeError("offset is not uint");
if (t + e > r) throw new RangeError("Trying to access beyond buffer length")
}
function P(t, e, i, n, s, a) {
if (!r.isBuffer(t)) throw new TypeError('"buffer" argument must be a Buffer instance');
if (e > s || e < a) throw new RangeError('"value" argument is out of bounds');
if (i + n > t.length) throw new RangeError("Index out of range")
}
function R(t, e, r, i, n, s) {
if (r + i > t.length) throw new RangeError("Index out of range");
if (r < 0) throw new RangeError("Index out of range")
}
function T(t, e, r, i, n) {
return e = +e, r >>>= 0, n || R(t, 0, r, 4), f.write(t, e, r, i, 23, 4), r + 4
}
function B(t, e, r, i, n) {
return e = +e, r >>>= 0, n || R(t, 0, r, 8), f.write(t, e, r, i, 52, 8), r + 8
}
r.prototype.slice = function(t, e) {
var i = this.length;
(t = ~~t) < 0 ? (t += i) < 0 && (t = 0) : t > i && (t = i), (e = void 0 === e ? i : ~~e) < 0 ? (e += i) < 0 && (e = 0) : e > i && (e = i), e < t && (e = t);
var n = this.subarray(t, e);
return n.__proto__ = r.prototype, n
}, r.prototype.readUIntLE = function(t, e, r) {
t >>>= 0, e >>>= 0, r || C(t, e, this.length);
for (var i = this[t], n = 1, s = 0; ++s < e && (n *= 256);) i += this[t + s] * n;
return i
}, r.prototype.readUIntBE = function(t, e, r) {
t >>>= 0, e >>>= 0, r || C(t, e, this.length);
for (var i = this[t + --e], n = 1; e > 0 && (n *= 256);) i += this[t + --e] * n;
return i
}, r.prototype.readUInt8 = function(t, e) {
return t >>>= 0, e || C(t, 1, this.length), this[t]
}, r.prototype.readUInt16LE = function(t, e) {
return t >>>= 0, e || C(t, 2, this.length), this[t] | this[t + 1] << 8
}, r.prototype.readUInt16BE = function(t, e) {
return t >>>= 0, e || C(t, 2, this.length), this[t] << 8 | this[t + 1]
}, r.prototype.readUInt32LE = function(t, e) {
return t >>>= 0, e || C(t, 4, this.length), (this[t] | this[t + 1] << 8 | this[t + 2] << 16) + 16777216 * this[t + 3]
}, r.prototype.readUInt32BE = function(t, e) {
return t >>>= 0, e || C(t, 4, this.length), 16777216 * this[t] + (this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3])
}, r.prototype.readIntLE = function(t, e, r) {
t >>>= 0, e >>>= 0, r || C(t, e, this.length);
for (var i = this[t], n = 1, s = 0; ++s < e && (n *= 256);) i += this[t + s] * n;
return i >= (n *= 128) && (i -= Math.pow(2, 8 * e)), i
}, r.prototype.readIntBE = function(t, e, r) {
t >>>= 0, e >>>= 0, r || C(t, e, this.length);
for (var i = e, n = 1, s = this[t + --i]; i > 0 && (n *= 256);) s += this[t + --i] * n;
return s >= (n *= 128) && (s -= Math.pow(2, 8 * e)), s
}, r.prototype.readInt8 = function(t, e) {
return t >>>= 0, e || C(t, 1, this.length), 128 & this[t] ? -1 * (255 - this[t] + 1) : this[t]
}, r.prototype.readInt16LE = function(t, e) {
t >>>= 0, e || C(t, 2, this.length);
var r = this[t] | this[t + 1] << 8;
return 32768 & r ? 4294901760 | r : r
}, r.prototype.readInt16BE = function(t, e) {
t >>>= 0, e || C(t, 2, this.length);
var r = this[t + 1] | this[t] << 8;
return 32768 & r ? 4294901760 | r : r
}, r.prototype.readInt32LE = function(t, e) {
return t >>>= 0, e || C(t, 4, this.length), this[t] | this[t + 1] << 8 | this[t + 2] << 16 | this[t + 3] << 24
}, r.prototype.readInt32BE = function(t, e) {
return t >>>= 0, e || C(t, 4, this.length), this[t] << 24 | this[t + 1] << 16 | this[t + 2] << 8 | this[t + 3]
}, r.prototype.readFloatLE = function(t, e) {
return t >>>= 0, e || C(t, 4, this.length), f.read(this, t, !0, 23, 4)
}, r.prototype.readFloatBE = function(t, e) {
return t >>>= 0, e || C(t, 4, this.length), f.read(this, t, !1, 23, 4)
}, r.prototype.readDoubleLE = function(t, e) {
return t >>>= 0, e || C(t, 8, this.length), f.read(this, t, !0, 52, 8)
}, r.prototype.readDoubleBE = function(t, e) {
return t >>>= 0, e || C(t, 8, this.length), f.read(this, t, !1, 52, 8)
}, r.prototype.writeUIntLE = function(t, e, r, i) {
t = +t, e >>>= 0, r >>>= 0, i || P(this, t, e, r, Math.pow(2, 8 * r) - 1, 0);
var n = 1,
s = 0;
for (this[e] = 255 & t; ++s < r && (n *= 256);) this[e + s] = t / n & 255;
return e + r
}, r.prototype.writeUIntBE = function(t, e, r, i) {
t = +t, e >>>= 0, r >>>= 0, i || P(this, t, e, r, Math.pow(2, 8 * r) - 1, 0);
var n = r - 1,
s = 1;
for (this[e + n] = 255 & t; --n >= 0 && (s *= 256);) this[e + n] = t / s & 255;
return e + r
}, r.prototype.writeUInt8 = function(t, e, r) {
return t = +t, e >>>= 0, r || P(this, t, e, 1, 255, 0), this[e] = 255 & t, e + 1
}, r.prototype.writeUInt16LE = function(t, e, r) {
return t = +t, e >>>= 0, r || P(this, t, e, 2, 65535, 0), this[e] = 255 & t, this[e + 1] = t >>> 8, e + 2
}, r.prototype.writeUInt16BE = function(t, e, r) {
return t = +t, e >>>= 0, r || P(this, t, e, 2, 65535, 0), this[e] = t >>> 8, this[e + 1] = 255 & t, e + 2
}, r.prototype.writeUInt32LE = function(t, e, r) {
return t = +t, e >>>= 0, r || P(this, t, e, 4, 4294967295, 0), this[e + 3] = t >>> 24, this[e + 2] = t >>> 16, this[e + 1] = t >>> 8, this[e] = 255 & t, e + 4
}, r.prototype.writeUInt32BE = function(t, e, r) {
return t = +t, e >>>= 0, r || P(this, t, e, 4, 4294967295, 0), this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t, e + 4
}, r.prototype.writeIntLE = function(t, e, r, i) {
if (t = +t, e >>>= 0, !i) {
var n = Math.pow(2, 8 * r - 1);
P(this, t, e, r, n - 1, -n)
}
var s = 0,
a = 1,
o = 0;
for (this[e] = 255 & t; ++s < r && (a *= 256);) t < 0 && 0 === o && 0 !== this[e + s - 1] && (o = 1), this[e + s] = (t / a >> 0) - o & 255;
return e + r
}, r.prototype.writeIntBE = function(t, e, r, i) {
if (t = +t, e >>>= 0, !i) {
var n = Math.pow(2, 8 * r - 1);
P(this, t, e, r, n - 1, -n)
}
var s = r - 1,
a = 1,
o = 0;
for (this[e + s] = 255 & t; --s >= 0 && (a *= 256);) t < 0 && 0 === o && 0 !== this[e + s + 1] && (o = 1), this[e + s] = (t / a >> 0) - o & 255;
return e + r
}, r.prototype.writeInt8 = function(t, e, r) {
return t = +t, e >>>= 0, r || P(this, t, e, 1, 127, -128), t < 0 && (t = 255 + t + 1), this[e] = 255 & t, e + 1
}, r.prototype.writeInt16LE = function(t, e, r) {
return t = +t, e >>>= 0, r || P(this, t, e, 2, 32767, -32768), this[e] = 255 & t, this[e + 1] = t >>> 8, e + 2
}, r.prototype.writeInt16BE = function(t, e, r) {
return t = +t, e >>>= 0, r || P(this, t, e, 2, 32767, -32768), this[e] = t >>> 8, this[e + 1] = 255 & t, e + 2
}, r.prototype.writeInt32LE = function(t, e, r) {
return t = +t, e >>>= 0, r || P(this, t, e, 4, 2147483647, -2147483648), this[e] = 255 & t, this[e + 1] = t >>> 8, this[e + 2] = t >>> 16, this[e + 3] = t >>> 24, e + 4
}, r.prototype.writeInt32BE = function(t, e, r) {
return t = +t, e >>>= 0, r || P(this, t, e, 4, 2147483647, -2147483648), t < 0 && (t = 4294967295 + t + 1), this[e] = t >>> 24, this[e + 1] = t >>> 16, this[e + 2] = t >>> 8, this[e + 3] = 255 & t, e + 4
}, r.prototype.writeFloatLE = function(t, e, r) {
return T(this, t, e, !0, r)
}, r.prototype.writeFloatBE = function(t, e, r) {
return T(this, t, e, !1, r)
}, r.prototype.writeDoubleLE = function(t, e, r) {
return B(this, t, e, !0, r)
}, r.prototype.writeDoubleBE = function(t, e, r) {
return B(this, t, e, !1, r)
}, r.prototype.copy = function(t, e, i, n) {
if (!r.isBuffer(t)) throw new TypeError("argument should be a Buffer");
if (i || (i = 0), n || 0 === n || (n = this.length), e >= t.length && (e = t.length), e || (e = 0), n > 0 && n < i && (n = i), n === i) return 0;
if (0 === t.length || 0 === this.length) return 0;
if (e < 0) throw new RangeError("targetStart out of bounds");
if (i < 0 || i >= this.length) throw new RangeError("Index out of range");
if (n < 0) throw new RangeError("sourceEnd out of bounds");
n > this.length && (n = this.length), t.length - e < n - i && (n = t.length - e + i);
var s = n - i;
if (this === t && "function" == typeof Uint8Array.prototype.copyWithin) this.copyWithin(e, i, n);
else if (this === t && i < e && e < n)
for (var a = s - 1; a >= 0; --a) t[a + e] = this[a + i];
else Uint8Array.prototype.set.call(t, this.subarray(i, n), e);
return s
}, r.prototype.fill = function(t, e, i, n) {
if ("string" == typeof t) {
if ("string" == typeof e ? (n = e, e = 0, i = this.length) : "string" == typeof i && (n = i, i = this.length), void 0 !== n && "string" != typeof n) throw new TypeError("encoding must be a string");
if ("string" == typeof n && !r.isEncoding(n)) throw new TypeError("Unknown encoding: " + n);
if (1 === t.length) {
var s = t.charCodeAt(0);
("utf8" === n && s < 128 || "latin1" === n) && (t = s)
}
} else "number" == typeof t && (t &= 255);
if (e < 0 || this.length < e || this.length < i) throw new RangeError("Out of range index");
if (i <= e) return this;
var a;
if (e >>>= 0, i = void 0 === i ? this.length : i >>> 0, t || (t = 0), "number" == typeof t)
for (a = e; a < i; ++a) this[a] = t;
else {
var o = r.isBuffer(t) ? t : r.from(t, n),
h = o.length;
if (0 === h) throw new TypeError('The value "' + t + '" is invalid for argument "value"');
for (a = 0; a < i - e; ++a) this[a + e] = o[a % h]
}
return this
};
var H = /[^+/0-9A-Za-z-_]/g;
function N(t, e) {
var r;
e = e || 1 / 0;
for (var i = t.length, n = null, s = [], a = 0; a < i; ++a) {
if ((r = t.charCodeAt(a)) > 55295 && r < 57344) {
if (!n) {
if (r > 56319) {
(e -= 3) > -1 && s.push(239, 191, 189);
continue
}
if (a + 1 === i) {
(e -= 3) > -1 && s.push(239, 191, 189);
continue
}
n = r;
continue
}
if (r < 56320) {
(e -= 3) > -1 && s.push(239, 191, 189), n = r;
continue
}
r = 65536 + (n - 55296 << 10 | r - 56320)
} else n && (e -= 3) > -1 && s.push(239, 191, 189);
if (n = null, r < 128) {
if ((e -= 1) < 0) break;
s.push(r)
} else if (r < 2048) {
if ((e -= 2) < 0) break;
s.push(r >> 6 | 192, 63 & r | 128)
} else if (r < 65536) {
if ((e -= 3) < 0) break;
s.push(r >> 12 | 224, r >> 6 & 63 | 128, 63 & r | 128)
} else {
if (!(r < 1114112)) throw new Error("Invalid code point");
if ((e -= 4) < 0) break;
s.push(r >> 18 | 240, r >> 12 & 63 | 128, r >> 6 & 63 | 128, 63 & r | 128)
}
}
return s
}
function O(t) {
return i.toByteArray(function(t) {
if ((t = (t = t.split("=")[0]).trim().replace(H, "")).length < 2) return "";
for (; t.length % 4 != 0;) t += "=";
return t
}(t))
}
function j(t, e, r, i) {
for (var n = 0; n < i && !(n + r >= e.length || n >= t.length); ++n) e[n + r] = t[n];
return n
}
function V(t, e) {
return t instanceof e || null != t && null != t.constructor && null != t.constructor.name && t.constructor.name === e.name
}
function L(t) {
return t != t
}
}).call(this)
}).call(this, r({}).Buffer)
}, function(r) {
return e || t(e = {
exports: {},
parent: r
}, e.exports), e.exports
}), i = {
toByteArray: function(t) {
var e, r, i = c(t),
n = i[0],
o = i[1],
h = new a(function(t, e, r) {
return 3 * (e + r) / 4 - r
}(0, n, o)),
u = 0,
l = o > 0 ? n - 4 : n;
for (r = 0; r < l; r += 4) e = s[t.charCodeAt(r)] << 18 | s[t.charCodeAt(r + 1)] << 12 | s[t.charCodeAt(r + 2)] << 6 | s[t.charCodeAt(r + 3)], h[u++] = e >> 16 & 255, h[u++] = e >> 8 & 255, h[u++] = 255 & e;
return 2 === o && (e = s[t.charCodeAt(r)] << 2 | s[t.charCodeAt(r + 1)] >> 4, h[u++] = 255 & e), 1 === o && (e = s[t.charCodeAt(r)] << 10 | s[t.charCodeAt(r + 1)] << 4 | s[t.charCodeAt(r + 2)] >> 2, h[u++] = e >> 8 & 255, h[u++] = 255 & e), h
},
fromByteArray: function(t) {
for (var e, r = t.length, i = r % 3, s = [], a = 0, o = r - i; a < o; a += 16383) s.push(l(t, a, a + 16383 > o ? o : a + 16383));
return 1 === i ? (e = t[r - 1], s.push(n[e >> 2] + n[e << 4 & 63] + "==")) : 2 === i && (e = (t[r - 2] << 8) + t[r - 1], s.push(n[e >> 10] + n[e >> 4 & 63] + n[e << 2 & 63] + "=")), s.join("")
}
}, n = [], s = [], a = "undefined" != typeof Uint8Array ? Uint8Array : Array, o = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/", h = 0, u = o.length; h < u; ++h) n[h] = o[h], s[o.charCodeAt(h)] = h;
function c(t) {
var e = t.length;
if (e % 4 > 0) throw new Error("Invalid string. Length must be a multiple of 4");
var r = t.indexOf("=");
return -1 === r && (r = e), [r, r === e ? 0 : 4 - r % 4]
}
function l(t, e, r) {
for (var i, s, a = [], o = e; o < r; o += 3) i = (t[o] << 16 & 16711680) + (t[o + 1] << 8 & 65280) + (255 & t[o + 2]), a.push(n[(s = i) >> 18 & 63] + n[s >> 12 & 63] + n[s >> 6 & 63] + n[63 & s]);
return a.join("")
}
s["-".charCodeAt(0)] = 62, s["_".charCodeAt(0)] = 63;
var f = {
read: function(t, e, r, i, n) {
var s, a, o = 8 * n - i - 1,
h = (1 << o) - 1,
u = h >> 1,
c = -7,
l = r ? n - 1 : 0,
f = r ? -1 : 1,
g = t[e + l];
for (l += f, s = g & (1 << -c) - 1, g >>= -c, c += o; c > 0; s = 256 * s + t[e + l], l += f, c -= 8);
for (a = s & (1 << -c) - 1, s >>= -c, c += i; c > 0; a = 256 * a + t[e + l], l += f, c -= 8);
if (0 === s) s = 1 - u;
else {
if (s === h) return a ? NaN : 1 / 0 * (g ? -1 : 1);
a += Math.pow(2, i), s -= u
}
return (g ? -1 : 1) * a * Math.pow(2, s - i)
},
write: function(t, e, r, i, n, s) {
var a, o, h, u = 8 * s - n - 1,
c = (1 << u) - 1,
l = c >> 1,
f = 23 === n ? Math.pow(2, -24) - Math.pow(2, -77) : 0,
g = i ? 0 : s - 1,
p = i ? 1 : -1,
d = e < 0 || 0 === e && 1 / e < 0 ? 1 : 0;
for (e = Math.abs(e), isNaN(e) || e === 1 / 0 ? (o = isNaN(e) ? 1 : 0, a = c) : (a = Math.floor(Math.log(e) / Math.LN2), e * (h = Math.pow(2, -a)) < 1 && (a--, h *= 2), (e += a + l >= 1 ? f / h : f * Math.pow(2, 1 - l)) * h >= 2 && (a++, h /= 2), a + l >= c ? (o = 0, a = c) : a + l >= 1 ? (o = (e * h - 1) * Math.pow(2, n), a += l) : (o = e * Math.pow(2, l - 1) * Math.pow(2, n), a = 0)); n >= 8; t[r + g] = 255 & o, g += p, o /= 256, n -= 8);
for (a = a << n | o, u += n; u > 0; t[r + g] = 255 & a, g += p, a /= 256, u -= 8);
t[r + g - p] |= 128 * d
}
},
g = {};
(function(t) {
(function() {
var e, r, i, n, s, a, o, h, u, c, l, f = {
userAgent: !1
},
p = {},
d = d || (e = Math, i = (r = {}).lib = {}, n = i.Base = function() {
function t() {}
return {
extend: function(e) {
t.prototype = this;
var r = new t;
return e && r.mixIn(e), r.hasOwnProperty("init") || (r.init = function() {
r.$super.init.apply(this, arguments)
}), r.init.prototype = r, r.$super = this, r
},
create: function() {
var t = this.extend();
return t.init.apply(t, arguments), t
},
init: function() {},
mixIn: function(t) {
for (var e in t) t.hasOwnProperty(e) && (this[e] = t[e]);
t.hasOwnProperty("toString") && (this.toString = t.toString)
},
clone: function() {
return this.init.prototype.extend(this)
}
}
}(), s = i.WordArray = n.extend({
init: function(t, e) {
t = this.words = t || [], this.sigBytes = null != e ? e : 4 * t.length
},
toString: function(t) {
return (t || o).stringify(this)
},
concat: function(t) {
var e = this.words,
r = t.words,
i = this.sigBytes,
n = t.sigBytes;
if (this.clamp(), i % 4)
for (var s = 0; s < n; s++) {
var a = r[s >>> 2] >>> 24 - s % 4 * 8 & 255;
e[i + s >>> 2] |= a << 24 - (i + s) % 4 * 8
} else
for (s = 0; s < n; s += 4) e[i + s >>> 2] = r[s >>> 2];
return this.sigBytes += n, this
},
clamp: function() {
var t = this.words,
r = this.sigBytes;
t[r >>> 2] &= 4294967295 << 32 - r % 4 * 8, t.length = e.ceil(r / 4)
},
clone: function() {
var t = n.clone.call(this);
return t.words = this.words.slice(0), t
},
random: function(t) {
for (var r = [], i = 0; i < t; i += 4) r.push(4294967296 * e.random() | 0);
return new s.init(r, t)
}
}), a = r.enc = {}, o = a.Hex = {
stringify: function(t) {
for (var e = t.words, r = t.sigBytes, i = [], n = 0; n < r; n++) {
var s = e[n >>> 2] >>> 24 - n % 4 * 8 & 255;
i.push((s >>> 4).toString(16)), i.push((15 & s).toString(16))
}
return i.join("")
},
parse: function(t) {
for (var e = t.length, r = [], i = 0; i < e; i += 2) r[i >>> 3] |= parseInt(t.substr(i, 2), 16) << 24 - i % 8 * 4;
return new s.init(r, e / 2)
}
}, h = a.Latin1 = {
stringify: function(t) {
for (var e = t.words, r = t.sigBytes, i = [], n = 0; n < r; n++) {
var s = e[n >>> 2] >>> 24 - n % 4 * 8 & 255;
i.push(String.fromCharCode(s))
}
return i.join("")
},
parse: function(t) {
for (var e = t.length, r = [], i = 0; i < e; i++) r[i >>> 2] |= (255 & t.charCodeAt(i)) << 24 - i % 4 * 8;
return new s.init(r, e)
}
}, u = a.Utf8 = {
stringify: function(t) {
try {
return decodeURIComponent(escape(h.stringify(t)))
} catch (e) {
throw new Error("Malformed UTF-8 data")
}
},
parse: function(t) {
return h.parse(unescape(encodeURIComponent(t)))
}
}, c = i.BufferedBlockAlgorithm = n.extend({
reset: function() {
this._data = new s.init, this._nDataBytes = 0
},
_append: function(t) {
"string" == typeof t && (t = u.parse(t)), this._data.concat(t), this._nDataBytes += t.sigBytes
},
_process: function(t) {
var r = this._data,
i = r.words,
n = r.sigBytes,
a = this.blockSize,
o = n / (4 * a),
h = (o = t ? e.ceil(o) : e.max((0 | o) - this._minBufferSize, 0)) * a,
u = e.min(4 * h, n);
if (h) {
for (var c = 0; c < h; c += a) this._doProcessBlock(i, c);
var l = i.splice(0, h);
r.sigBytes -= u
}
return new s.init(l, u)
},
clone: function() {
var t = n.clone.call(this);
return t._data = this._data.clone(), t
},
_minBufferSize: 0
}), i.Hasher = c.extend({
cfg: n.extend(),
init: function(t) {
this.cfg = this.cfg.extend(t), this.reset()
},
reset: function() {
c.reset.call(this), this._doReset()
},
update: function(t) {
return this._append(t), this._process(), this
},
finalize: function(t) {
return t && this._append(t), this._doFinalize()
},
blockSize: 16,
_createHelper: function(t) {
return function(e, r) {
return new t.init(r).finalize(e)
}
},
_createHmacHelper: function(t) {
return function(e, r) {
return new l.HMAC.init(t, r).finalize(e)
}
}
}), l = r.algo = {}, r);
! function(t) {
var e, r = (e = d).lib,
i = r.Base,
n = r.WordArray;
(e = e.x64 = {}).Word = i.extend({
init: function(t, e) {
this.high = t, this.low = e
}
}), e.WordArray = i.extend({
init: function(t, e) {
t = this.words = t || [], this.sigBytes = null != e ? e : 8 * t.length
},
toX32: function() {
for (var t = this.words, e = t.length, r = [], i = 0; i < e; i++) {
var s = t[i];
r.push(s.high), r.push(s.low)
}
return n.create(r, this.sigBytes)
},
clone: function() {
for (var t = i.clone.call(this), e = t.words = this.words.slice(0), r = e.length, n = 0; n < r; n++) e[n] = e[n].clone();
return t
}
})
}(), d.lib.Cipher || function(t) {
var e = (g = d).lib,
r = e.Base,
i = e.WordArray,
n = e.BufferedBlockAlgorithm,
s = g.enc.Base64,
a = g.algo.EvpKDF,
o = e.Cipher = n.extend({
cfg: r.extend(),
createEncryptor: function(t, e) {
return this.create(this._ENC_XFORM_MODE, t, e)
},
createDecryptor: function(t, e) {
return this.create(this._DEC_XFORM_MODE, t, e)
},
init: function(t, e, r) {
this.cfg = this.cfg.extend(r), this._xformMode = t, this._key = e, this.reset()
},
reset: function() {
n.reset.call(this), this._doReset()
},
process: function(t) {
return this._append(t), this._process()
},
finalize: function(t) {
return t && this._append(t), this._doFinalize()
},
keySize: 4,
ivSize: 4,
_ENC_XFORM_MODE: 1,
_DEC_XFORM_MODE: 2,
_createHelper: function(t) {
return {
encrypt: function(e, r, i) {
return ("string" == typeof r ? p : f).encrypt(t, e, r, i)
},
decrypt: function(e, r, i) {
return ("string" == typeof r ? p : f).decrypt(t, e, r, i)
}
}
}
});
e.StreamCipher = o.extend({
_doFinalize: function() {
return this._process(!0)
},
blockSize: 1
});
var h = g.mode = {},
u = function(t, e, r) {
var i = this._iv;
i ? this._iv = void 0 : i = this._prevBlock;
for (var n = 0; n < r; n++) t[e + n] ^= i[n]
},
c = (e.BlockCipherMode = r.extend({
createEncryptor: function(t, e) {
return this.Encryptor.create(t, e)
},
createDecryptor: function(t, e) {
return this.Decryptor.create(t, e)
},
init: function(t, e) {
this._cipher = t, this._iv = e
}
})).extend();
c.Encryptor = c.extend({
processBlock: function(t, e) {
var r = this._cipher,
i = r.blockSize;
u.call(this, t, e, i), r.encryptBlock(t, e), this._prevBlock = t.slice(e, e + i)
}
}), c.Decryptor = c.extend({
processBlock: function(t, e) {
var r = this._cipher,
i = r.blockSize,
n = t.slice(e, e + i);
r.decryptBlock(t, e), u.call(this, t, e, i), this._prevBlock = n
}
}), h = h.CBC = c, c = (g.pad = {}).Pkcs7 = {
pad: function(t, e) {
for (var r, n = (r = (r = 4 * e) - t.sigBytes % r) << 24 | r << 16 | r << 8 | r, s = [], a = 0; a < r; a += 4) s.push(n);
r = i.create(s, r), t.concat(r)
},
unpad: function(t) {
t.sigBytes -= 255 & t.words[t.sigBytes - 1 >>> 2]
}
}, e.BlockCipher = o.extend({
cfg: o.cfg.extend({
mode: h,
padding: c
}),
reset: function() {
o.reset.call(this);
var t = (e = this.cfg).iv,
e = e.mode;
if (this._xformMode == this._ENC_XFORM_MODE) var r = e.createEncryptor;
else r = e.createDecryptor, this._minBufferSize = 1;
this._mode = r.call(e, this, t && t.words)
},
_doProcessBlock: function(t, e) {
this._mode.processBlock(t, e)
},
_doFinalize: function() {
var t = this.cfg.padding;
if (this._xformMode == this._ENC_XFORM_MODE) {
t.pad(this._data, this.blockSize);
var e = this._process(!0)
} else e = this._process(!0), t.unpad(e);
return e
},
blockSize: 4
});
var l = e.CipherParams = r.extend({
init: function(t) {
this.mixIn(t)
},
toString: function(t) {
return (t || this.formatter).stringify(this)
}
}),
f = (h = (g.format = {}).OpenSSL = {
stringify: function(t) {
var e = t.ciphertext;
return ((t = t.salt) ? i.create([1398893684, 1701076831]).concat(t).concat(e) : e).toString(s)
},
parse: function(t) {
var e = (t = s.parse(t)).words;
if (1398893684 == e[0] && 1701076831 == e[1]) {
var r = i.create(e.slice(2, 4));
e.splice(0, 4), t.sigBytes -= 16
}
return l.create({
ciphertext: t,
salt: r
})
}
}, e.SerializableCipher = r.extend({
cfg: r.extend({
format: h
}),
encrypt: function(t, e, r, i) {
i = this.cfg.extend(i);
var n = t.createEncryptor(r, i);
return e = n.finalize(e), n = n.cfg, l.create({
ciphertext: e,
key: r,
iv: n.iv,
algorithm: t,
mode: n.mode,
padding: n.padding,
blockSize: t.blockSize,
formatter: i.format
})
},
decrypt: function(t, e, r, i) {
return i = this.cfg.extend(i), e = this._parse(e, i.format), t.createDecryptor(r, i).finalize(e.ciphertext)
},
_parse: function(t, e) {
return "string" == typeof t ? e.parse(t, this) : t
}
})),
g = (g.kdf = {}).OpenSSL = {
execute: function(t, e, r, n) {
return n || (n = i.random(8)), t = a.create({
keySize: e + r
}).compute(t, n), r = i.create(t.words.slice(e), 4 * r), t.sigBytes = 4 * e, l.create({
key: t,
iv: r,
salt: n
})
}
},
p = e.PasswordBasedCipher = f.extend({
cfg: f.cfg.extend({
kdf: g
}),
encrypt: function(t, e, r, i) {
return r = (i = this.cfg.extend(i)).kdf.execute(r, t.keySize, t.ivSize), i.iv = r.iv, (t = f.encrypt.call(this, t, e, r.key, i)).mixIn(r), t
},
decrypt: function(t, e, r, i) {
return i = this.cfg.extend(i), e = this._parse(e, i.format), r = i.kdf.execute(r, t.keySize, t.ivSize, e.salt), i.iv = r.iv, f.decrypt.call(this, t, e, r.key, i)
}
})
}(),
function() {
for (var t = d, e = t.lib.BlockCipher, r = t.algo, i = [], n = [], s = [], a = [], o = [], h = [], u = [], c = [], l = [], f = [], g = [], p = 0; 256 > p; p++) g[p] = 128 > p ? p << 1 : p << 1 ^ 283;
var v = 0,
y = 0;
for (p = 0; 256 > p; p++) {
var m = (m = y ^ y << 1 ^ y << 2 ^ y << 3 ^ y << 4) >>> 8 ^ 255 & m ^ 99;
i[v] = m, n[m] = v;
var S = g[v],
x = g[S],
E = g[x],
w = 257 * g[m] ^ 16843008 * m;
s[v] = w << 24 | w >>> 8, a[v] = w << 16 | w >>> 16, o[v] = w << 8 | w >>> 24, h[v] = w, w = 16843009 * E ^ 65537 * x ^ 257 * S ^ 16843008 * v, u[m] = w << 24 | w >>> 8, c[m] = w << 16 | w >>> 16, l[m] = w << 8 | w >>> 24, f[m] = w, v ? (v = S ^ g[g[g[E ^ S]]], y ^= g[g[y]]) : v = y = 1
}
var b = [0, 1, 2, 4, 8, 16, 32, 64, 128, 27, 54];
r = r.AES = e.extend({
_doReset: function() {
for (var t = (r = this._key).words, e = r.sigBytes / 4, r = 4 * ((this._nRounds = e + 6) + 1), n = this._keySchedule = [], s = 0; s < r; s++)
if (s < e) n[s] = t[s];
else {
var a = n[s - 1];
s % e ? 6 < e && 4 == s % e && (a = i[a >>> 24] << 24 | i[a >>> 16 & 255] << 16 | i[a >>> 8 & 255] << 8 | i[255 & a]) : (a = i[(a = a << 8 | a >>> 24) >>> 24] << 24 | i[a >>> 16 & 255] << 16 | i[a >>> 8 & 255] << 8 | i[255 & a], a ^= b[s / e | 0] << 24), n[s] = n[s - e] ^ a
}
for (t = this._invKeySchedule = [], e = 0; e < r; e++) s = r - e, a = e % 4 ? n[s] : n[s - 4], t[e] = 4 > e || 4 >= s ? a : u[i[a >>> 24]] ^ c[i[a >>> 16 & 255]] ^ l[i[a >>> 8 & 255]] ^ f[i[255 & a]]
},
encryptBlock: function(t, e) {
this._doCryptBlock(t, e, this._keySchedule, s, a, o, h, i)
},
decryptBlock: function(t, e) {
var r = t[e + 1];
t[e + 1] = t[e + 3], t[e + 3] = r, this._doCryptBlock(t, e, this._invKeySchedule, u, c, l, f, n), r = t[e + 1], t[e + 1] = t[e + 3], t[e + 3] = r
},
_doCryptBlock: function(t, e, r, i, n, s, a, o) {
for (var h = this._nRounds, u = t[e] ^ r[0], c = t[e + 1] ^ r[1], l = t[e + 2] ^ r[2], f = t[e + 3] ^ r[3], g = 4, p = 1; p < h; p++) {
var d = i[u >>> 24] ^ n[c >>> 16 & 255] ^ s[l >>> 8 & 255] ^ a[255 & f] ^ r[g++],
v = i[c >>> 24] ^ n[l >>> 16 & 255] ^ s[f >>> 8 & 255] ^ a[255 & u] ^ r[g++],
y = i[l >>> 24] ^ n[f >>> 16 & 255] ^ s[u >>> 8 & 255] ^ a[255 & c] ^ r[g++];
f = i[f >>> 24] ^ n[u >>> 16 & 255] ^ s[c >>> 8 & 255] ^ a[255 & l] ^ r[g++], u = d, c = v, l = y
}
d = (o[u >>> 24] << 24 | o[c >>> 16 & 255] << 16 | o[l >>> 8 & 255] << 8 | o[255 & f]) ^ r[g++], v = (o[c >>> 24] << 24 | o[l >>> 16 & 255] << 16 | o[f >>> 8 & 255] << 8 | o[255 & u]) ^ r[g++], y = (o[l >>> 24] << 24 | o[f >>> 16 & 255] << 16 | o[u >>> 8 & 255] << 8 | o[255 & c]) ^ r[g++], f = (o[f >>> 24] << 24 | o[u >>> 16 & 255] << 16 | o[c >>> 8 & 255] << 8 | o[255 & l]) ^ r[g++], t[e] = d, t[e + 1] = v, t[e + 2] = y, t[e + 3] = f
},
keySize: 8
}), t.AES = e._createHelper(r)
}(),
function() {
function t(t, e) {
var r = (this._lBlock >>> t ^ this._rBlock) & e;
this._rBlock ^= r, this._lBlock ^= r << t
}
function e(t, e) {
var r = (this._rBlock >>> t ^ this._lBlock) & e;
this._lBlock ^= r, this._rBlock ^= r << t
}
var r = d,
i = (n = r.lib).WordArray,
n = n.BlockCipher,
s = r.algo,
a = [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],
o = [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],
h = [1, 2, 4, 6, 8, 10, 12, 14, 15, 17, 19, 21, 23, 25, 27, 28],
u = [{
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
}],
c = [4160749569, 528482304, 33030144, 2064384, 129024, 8064, 504, 2147483679],
l = s.DES = n.extend({
_doReset: function() {
for (var t = this._key.words, e = [], r = 0; 56 > r; r++) {
var i = a[r] - 1;
e[r] = t[i >>> 5] >>> 31 - i % 32 & 1
}
for (t = this._subKeys = [], i = 0; 16 > i; i++) {
var n = t[i] = [],
s = h[i];
for (r = 0; 24 > r; r++) n[r / 6 | 0] |= e[(o[r] - 1 + s) % 28] << 31 - r % 6, n[4 + (r / 6 | 0)] |= e[28 + (o[r + 24] - 1 + s) % 28] << 31 - r % 6;
for (n[0] = n[0] << 1 | n[0] >>> 31, r = 1; 7 > r; r++) n[r] >>>= 4 * (r - 1) + 3;
n[7] = n[7] << 5 | n[7] >>> 27
}
for (e = this._invSubKeys = [], r = 0; 16 > r; r++) e[r] = t[15 - r]
},
encryptBlock: function(t, e) {
this._doCryptBlock(t, e, this._subKeys)
},
decryptBlock: function(t, e) {
this._doCryptBlock(t, e, this._invSubKeys)
},
_doCryptBlock: function(r, i, n) {
this._lBlock = r[i], this._rBlock = r[i + 1], t.call(this, 4, 252645135), t.call(this, 16, 65535), e.call(this, 2, 858993459), e.call(this, 8, 16711935), t.call(this, 1, 1431655765);
for (var s = 0; 16 > s; s++) {
for (var a = n[s], o = this._lBlock, h = this._rBlock, l = 0, f = 0; 8 > f; f++) l |= u[f][((h ^ a[f]) & c[f]) >>> 0];
this._lBlock = h, this._rBlock = o ^ l
}
n = this._lBlock, this._lBlock = this._rBlock, this._rBlock = n, t.call(this, 1, 1431655765), e.call(this, 8, 16711935), e.call(this, 2, 858993459), t.call(this, 16, 65535), t.call(this, 4, 252645135), r[i] = this._lBlock, r[i + 1] = this._rBlock
},
keySize: 2,
ivSize: 2,
blockSize: 2
});
r.DES = n._createHelper(l), s = s.TripleDES = n.extend({
_doReset: function() {
var t = this._key.words;
this._des1 = l.createEncryptor(i.create(t.slice(0, 2))), this._des2 = l.createEncryptor(i.create(t.slice(2, 4))), this._des3 = l.createEncryptor(i.create(t.slice(4, 6)))
},
encryptBlock: function(t, e) {
this._des1.encryptBlock(t, e), this._des2.decryptBlock(t, e), this._des3.encryptBlock(t, e)
},
decryptBlock: function(t, e) {
this._des3.decryptBlock(t, e), this._des2.encryptBlock(t, e), this._des1.decryptBlock(t, e)
},
keySize: 6,
ivSize: 2,
blockSize: 2
}), r.TripleDES = n._createHelper(s)
}(),
function() {
var t = d,
e = t.lib.WordArray;
t.enc.Base64 = {
stringify: function(t) {
var e = t.words,
r = t.sigBytes,
i = this._map;
t.clamp(), t = [];
for (var n = 0; n < r; n += 3)
for (var s = (e[n >>> 2] >>> 24 - n % 4 * 8 & 255) << 16 | (e[n + 1 >>> 2] >>> 24 - (n + 1) % 4 * 8 & 255) << 8 | e[n + 2 >>> 2] >>> 24 - (n + 2) % 4 * 8 & 255, a = 0; 4 > a && n + .75 * a < r; a++) t.push(i.charAt(s >>> 6 * (3 - a) & 63));
if (e = i.charAt(64))
for (; t.length % 4;) t.push(e);
return t.join("")
},
parse: function(t) {
var r = t.length,
i = this._map;
(n = i.charAt(64)) && -1 != (n = t.indexOf(n)) && (r = n);
for (var n = [], s = 0, a = 0; a < r; a++)
if (a % 4) {
var o = i.indexOf(t.charAt(a - 1)) << a % 4 * 2,
h = i.indexOf(t.charAt(a)) >>> 6 - a % 4 * 2;
n[s >>> 2] |= (o | h) << 24 - s % 4 * 8, s++
}
return e.create(n, s)
},
_map: "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/="
}
}(),
function(t) {
function e(t, e, r, i, n, s, a) {
return ((t = t + (e & r | ~e & i) + n + a) << s | t >>> 32 - s) + e
}
function r(t, e, r, i, n, s, a) {
return ((t = t + (e & i | r & ~i) + n + a) << s | t >>> 32 - s) + e
}
function i(t, e, r, i, n, s, a) {
return ((t = t + (e ^ r ^ i) + n + a) << s | t >>> 32 - s) + e
}
function n(t, e, r, i, n, s, a) {
return ((t = t + (r ^ (e | ~i)) + n + a) << s | t >>> 32 - s) + e
}
for (var s = d, a = (h = s.lib).WordArray, o = h.Hasher, h = s.algo, u = [], c = 0; 64 > c; c++) u[c] = 4294967296 * t.abs(t.sin(c + 1)) | 0;
h = h.MD5 = o.extend({
_doReset: function() {
this._hash = new a.init([1732584193, 4023233417, 2562383102, 271733878])
},
_doProcessBlock: function(t, s) {
for (var a = 0; 16 > a; a++) {
var o = t[h = s + a];
t[h] = 16711935 & (o << 8 | o >>> 24) | 4278255360 & (o << 24 | o >>> 8)
}
a = this._hash.words;
var h = t[s + 0],
c = (o = t[s + 1], t[s + 2]),
l = t[s + 3],
f = t[s + 4],
g = t[s + 5],
p = t[s + 6],
d = t[s + 7],
v = t[s + 8],
y = t[s + 9],
m = t[s + 10],
S = t[s + 11],
x = t[s + 12],
E = t[s + 13],
w = t[s + 14],
b = t[s + 15],
F = e(F = a[0], I = a[1], D = a[2], A = a[3], h, 7, u[0]),
A = e(A, F, I, D, o, 12, u[1]),
D = e(D, A, F, I, c, 17, u[2]),
I = e(I, D, A, F, l, 22, u[3]);
F = e(F, I, D, A, f, 7, u[4]), A = e(A, F, I, D, g, 12, u[5]), D = e(D, A, F, I, p, 17, u[6]), I = e(I, D, A, F, d, 22, u[7]), F = e(F, I, D, A, v, 7, u[8]), A = e(A, F, I, D, y, 12, u[9]), D = e(D, A, F, I, m, 17, u[10]), I = e(I, D, A, F, S, 22, u[11]), F = e(F, I, D, A, x, 7, u[12]), A = e(A, F, I, D, E, 12, u[13]), D = e(D, A, F, I, w, 17, u[14]), F = r(F, I = e(I, D, A, F, b, 22, u[15]), D, A, o, 5, u[16]), A = r(A, F, I, D, p, 9, u[17]), D = r(D, A, F, I, S, 14, u[18]), I = r(I, D, A, F, h, 20, u[19]), F = r(F, I, D, A, g, 5, u[20]), A = r(A, F, I, D, m, 9, u[21]), D = r(D, A, F, I, b, 14, u[22]), I = r(I, D, A, F, f, 20, u[23]), F = r(F, I, D, A, y, 5, u[24]), A = r(A, F, I, D, w, 9, u[25]), D = r(D, A, F, I, l, 14, u[26]), I = r(I, D, A, F, v, 20, u[27]), F = r(F, I, D, A, E, 5, u[28]), A = r(A, F, I, D, c, 9, u[29]), D = r(D, A, F, I, d, 14, u[30]), F = i(F, I = r(I, D, A, F, x, 20, u[31]), D, A, g, 4, u[32]), A = i(A, F, I, D, v, 11, u[33]), D = i(D, A, F, I, S, 16, u[34]), I = i(I, D, A, F, w, 23, u[35]), F = i(F, I, D, A, o, 4, u[36]), A = i(A, F, I, D, f, 11, u[37]), D = i(D, A, F, I, d, 16, u[38]), I = i(I, D, A, F, m, 23, u[39]), F = i(F, I, D, A, E, 4, u[40]), A = i(A, F, I, D, h, 11, u[41]), D = i(D, A, F, I, l, 16, u[42]), I = i(I, D, A, F, p, 23, u[43]), F = i(F, I, D, A, y, 4, u[44]), A = i(A, F, I, D, x, 11, u[45]), D = i(D, A, F, I, b, 16, u[46]), F = n(F, I = i(I, D, A, F, c, 23, u[47]), D, A, h, 6, u[48]), A = n(A, F, I, D, d, 10, u[49]), D = n(D, A, F, I, w, 15, u[50]), I = n(I, D, A, F, g, 21, u[51]), F = n(F, I, D, A, x, 6, u[52]), A = n(A, F, I, D, l, 10, u[53]), D = n(D, A, F, I, m, 15, u[54]), I = n(I, D, A, F, o, 21, u[55]), F = n(F, I, D, A, v, 6, u[56]), A = n(A, F, I, D, b, 10, u[57]), D = n(D, A, F, I, p, 15, u[58]), I = n(I, D, A, F, E, 21, u[59]), F = n(F, I, D, A, f, 6, u[60]), A = n(A, F, I, D, S, 10, u[61]), D = n(D, A, F, I, c, 15, u[62]), I = n(I, D, A, F, y, 21, u[63]), a[0] = a[0] + F | 0, a[1] = a[1] + I | 0, a[2] = a[2] + D | 0, a[3] = a[3] + A | 0
},
_doFinalize: function() {
var e = this._data,
r = e.words,
i = 8 * this._nDataBytes,
n = 8 * e.sigBytes;
r[n >>> 5] |= 128 << 24 - n % 32;
var s = t.floor(i / 4294967296);
for (r[15 + (n + 64 >>> 9 << 4)] = 16711935 & (s << 8 | s >>> 24) | 4278255360 & (s << 24 | s >>> 8), r[14 + (n + 64 >>> 9 << 4)] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8), e.sigBytes = 4 * (r.length + 1), this._process(), r = (e = this._hash).words, i = 0; 4 > i; i++) n = r[i], r[i] = 16711935 & (n << 8 | n >>> 24) | 4278255360 & (n << 24 | n >>> 8);
return e
},
clone: function() {
var t = o.clone.call(this);
return t._hash = this._hash.clone(), t
}
}), s.MD5 = o._createHelper(h), s.HmacMD5 = o._createHmacHelper(h)
}(Math),
function() {
var t = d,
e = (n = t.lib).WordArray,
r = n.Hasher,
i = [],
n = t.algo.SHA1 = r.extend({
_doReset: function() {
this._hash = new e.init([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
},
_doProcessBlock: function(t, e) {
for (var r = this._hash.words, n = r[0], s = r[1], a = r[2], o = r[3], h = r[4], u = 0; 80 > u; u++) {
if (16 > u) i[u] = 0 | t[e + u];
else {
var c = i[u - 3] ^ i[u - 8] ^ i[u - 14] ^ i[u - 16];
i[u] = c << 1 | c >>> 31
}
c = (n << 5 | n >>> 27) + h + i[u], c = 20 > u ? c + (1518500249 + (s & a | ~s & o)) : 40 > u ? c + (1859775393 + (s ^ a ^ o)) : 60 > u ? c + ((s & a | s & o | a & o) - 1894007588) : c + ((s ^ a ^ o) - 899497514), h = o, o = a, a = s << 30 | s >>> 2, s = n, n = c
}
r[0] = r[0] + n | 0, r[1] = r[1] + s | 0, r[2] = r[2] + a | 0, r[3] = r[3] + o | 0, r[4] = r[4] + h | 0
},
_doFinalize: function() {
var t = this._data,
e = t.words,
r = 8 * this._nDataBytes,
i = 8 * t.sigBytes;
return e[i >>> 5] |= 128 << 24 - i % 32, e[14 + (i + 64 >>> 9 << 4)] = Math.floor(r / 4294967296), e[15 + (i + 64 >>> 9 << 4)] = r, t.sigBytes = 4 * e.length, this._process(), this._hash
},
clone: function() {
var t = r.clone.call(this);
return t._hash = this._hash.clone(), t
}
});
t.SHA1 = r._createHelper(n), t.HmacSHA1 = r._createHmacHelper(n)
}(),
function(t) {
for (var e = d, r = (n = e.lib).WordArray, i = n.Hasher, n = e.algo, s = [], a = [], o = function(t) {
return 4294967296 * (t - (0 | t)) | 0
}, h = 2, u = 0; 64 > u;) {
var c;
t: {
c = h;
for (var l = t.sqrt(c), f = 2; f <= l; f++)
if (!(c % f)) {
c = !1;
break t
}
c = !0
}
c && (8 > u && (s[u] = o(t.pow(h, .5))), a[u] = o(t.pow(h, 1 / 3)), u++), h++
}
var g = [];
n = n.SHA256 = i.extend({
_doReset: function() {
this._hash = new r.init(s.slice(0))
},
_doProcessBlock: function(t, e) {
for (var r = this._hash.words, i = r[0], n = r[1], s = r[2], o = r[3], h = r[4], u = r[5], c = r[6], l = r[7], f = 0; 64 > f; f++) {
if (16 > f) g[f] = 0 | t[e + f];
else {
var p = g[f - 15],
d = g[f - 2];
g[f] = ((p << 25 | p >>> 7) ^ (p << 14 | p >>> 18) ^ p >>> 3) + g[f - 7] + ((d << 15 | d >>> 17) ^ (d << 13 | d >>> 19) ^ d >>> 10) + g[f - 16]
}
p = l + ((h << 26 | h >>> 6) ^ (h << 21 | h >>> 11) ^ (h << 7 | h >>> 25)) + (h & u ^ ~h & c) + a[f] + g[f], d = ((i << 30 | i >>> 2) ^ (i << 19 | i >>> 13) ^ (i << 10 | i >>> 22)) + (i & n ^ i & s ^ n & s), l = c, c = u, u = h, h = o + p | 0, o = s, s = n, n = i, i = p + d | 0
}
r[0] = r[0] + i | 0, r[1] = r[1] + n | 0, r[2] = r[2] + s | 0, r[3] = r[3] + o | 0, r[4] = r[4] + h | 0, r[5] = r[5] + u | 0, r[6] = r[6] + c | 0, r[7] = r[7] + l | 0
},
_doFinalize: function() {
var e = this._data,
r = e.words,
i = 8 * this._nDataBytes,
n = 8 * e.sigBytes;
return r[n >>> 5] |= 128 << 24 - n % 32, r[14 + (n + 64 >>> 9 << 4)] = t.floor(i / 4294967296), r[15 + (n + 64 >>> 9 << 4)] = i, e.sigBytes = 4 * r.length, this._process(), this._hash
},
clone: function() {
var t = i.clone.call(this);
return t._hash = this._hash.clone(), t
}
}), e.SHA256 = i._createHelper(n), e.HmacSHA256 = i._createHmacHelper(n)
}(Math),
function() {
var t = d,
e = t.lib.WordArray,
r = (i = t.algo).SHA256,
i = i.SHA224 = r.extend({
_doReset: function() {
this._hash = new e.init([3238371032, 914150663, 812702999, 4144912697, 4290775857, 1750603025, 1694076839, 3204075428])
},
_doFinalize: function() {
var t = r._doFinalize.call(this);
return t.sigBytes -= 4, t
}
});
t.SHA224 = r._createHelper(i), t.HmacSHA224 = r._createHmacHelper(i)
}(),
function() {
function t() {
return i.create.apply(i, arguments)
}
for (var e = d, r = e.lib.Hasher, i = (s = e.x64).Word, n = s.WordArray, s = e.algo, a = [t(1116352408, 3609767458), t(1899447441, 602891725), t(3049323471, 3964484399), t(3921009573, 2173295548), t(961987163, 4081628472), t(1508970993, 3053834265), t(2453635748, 2937671579), t(2870763221, 3664609560), t(3624381080, 2734883394), t(310598401, 1164996542), t(607225278, 1323610764), t(1426881987, 3590304994), t(1925078388, 4068182383), t(2162078206, 991336113), t(2614888103, 633803317), t(3248222580, 3479774868), t(3835390401, 2666613458), t(4022224774, 944711139), t(264347078, 2341262773), t(604807628, 2007800933), t(770255983, 1495990901), t(1249150122, 1856431235), t(1555081692, 3175218132), t(1996064986, 2198950837), t(2554220882, 3999719339), t(2821834349, 766784016), t(2952996808, 2566594879), t(3210313671, 3203337956), t(3336571891, 1034457026), t(3584528711, 2466948901), t(113926993, 3758326383), t(338241895, 168717936), t(666307205, 1188179964), t(773529912, 1546045734), t(1294757372, 1522805485), t(1396182291, 2643833823), t(1695183700, 2343527390), t(1986661051, 1014477480), t(2177026350, 1206759142), t(2456956037, 344077627), t(2730485921, 1290863460), t(2820302411, 3158454273), t(3259730800, 3505952657), t(3345764771, 106217008), t(3516065817, 3606008344), t(3600352804, 1432725776), t(4094571909, 1467031594), t(275423344, 851169720), t(430227734, 3100823752), t(506948616, 1363258195), t(659060556, 3750685593), t(883997877, 3785050280), t(958139571, 3318307427), t(1322822218, 3812723403), t(1537002063, 2003034995), t(1747873779, 3602036899), t(1955562222, 1575990012), t(2024104815, 1125592928), t(2227730452, 2716904306), t(2361852424, 442776044), t(2428436474, 593698344), t(2756734187, 3733110249), t(3204031479, 2999351573), t(3329325298, 3815920427), t(3391569614, 3928383900), t(3515267271, 566280711), t(3940187606, 3454069534), t(4118630271, 4000239992), t(116418474, 1914138554), t(174292421, 2731055270), t(289380356, 3203993006), t(460393269, 320620315), t(685471733, 587496836), t(852142971, 1086792851), t(1017036298, 365543100), t(1126000580, 2618297676), t(1288033470, 3409855158), t(1501505948, 4234509866), t(1607167915, 987167468), t(1816402316, 1246189591)], o = [], h = 0; 80 > h; h++) o[h] = t();
s = s.SHA512 = r.extend({
_doReset: function() {
this._hash = new n.init([new i.init(1779033703, 4089235720), new i.init(3144134277, 2227873595), new i.init(1013904242, 4271175723), new i.init(2773480762, 1595750129), new i.init(1359893119, 2917565137), new i.init(2600822924, 725511199), new i.init(528734635, 4215389547), new i.init(1541459225, 327033209)])
},
_doProcessBlock: function(t, e) {
for (var r = (l = this._hash.words)[0], i = l[1], n = l[2], s = l[3], h = l[4], u = l[5], c = l[6], l = l[7], f = r.high, g = r.low, p = i.high, d = i.low, v = n.high, y = n.low, m = s.high, S = s.low, x = h.high, E = h.low, w = u.high, b = u.low, F = c.high, A = c.low, D = l.high, I = l.low, C = f, P = g, R = p, T = d, B = v, H = y, N = m, O = S, j = x, V = E, L = w, K = b, k = F, M = A, _ = D, q = I, U = 0; 80 > U; U++) {
var z = o[U];
if (16 > U) var G = z.high = 0 | t[e + 2 * U],
W = z.low = 0 | t[e + 2 * U + 1];
else {
G = ((W = (G = o[U - 15]).high) >>> 1 | (J = G.low) << 31) ^ (W >>> 8 | J << 24) ^ W >>> 7;
var J = (J >>> 1 | W << 31) ^ (J >>> 8 | W << 24) ^ (J >>> 7 | W << 25),
X = ((W = (X = o[U - 2]).high) >>> 19 | ($ = X.low) << 13) ^ (W << 3 | $ >>> 29) ^ W >>> 6,
$ = ($ >>> 19 | W << 13) ^ ($ << 3 | W >>> 29) ^ ($ >>> 6 | W << 26),
Y = (W = o[U - 7]).high,
Z = (Q = o[U - 16]).high,
Q = Q.low;
G = (G = (G = G + Y + ((W = J + W.low) >>> 0 < J >>> 0 ? 1 : 0)) + X + ((W += $) >>> 0 < $ >>> 0 ? 1 : 0)) + Z + ((W += Q) >>> 0 < Q >>> 0 ? 1 : 0), z.high = G, z.low = W
}
Y = j & L ^ ~j & k, Q = V & K ^ ~V & M, z = C & R ^ C & B ^ R & B;
var tt = P & T ^ P & H ^ T & H,
et = (J = (C >>> 28 | P << 4) ^ (C << 30 | P >>> 2) ^ (C << 25 | P >>> 7), X = (P >>> 28 | C << 4) ^ (P << 30 | C >>> 2) ^ (P << 25 | C >>> 7), ($ = a[U]).high),
rt = $.low;
Z = _ + ((j >>> 14 | V << 18) ^ (j >>> 18 | V << 14) ^ (j << 23 | V >>> 9)) + (($ = q + ((V >>> 14 | j << 18) ^ (V >>> 18 | j << 14) ^ (V << 23 | j >>> 9))) >>> 0 < q >>> 0 ? 1 : 0), _ = k, q = M, k = L, M = K, L = j, K = V, j = N + (Z = (Z = (Z = Z + Y + (($ += Q) >>> 0 < Q >>> 0 ? 1 : 0)) + et + (($ += rt) >>> 0 < rt >>> 0 ? 1 : 0)) + G + (($ += W) >>> 0 < W >>> 0 ? 1 : 0)) + ((V = O + $ | 0) >>> 0 < O >>> 0 ? 1 : 0) | 0, N = B, O = H, B = R, H = T, R = C, T = P, C = Z + (z = J + z + ((W = X + tt) >>> 0 < X >>> 0 ? 1 : 0)) + ((P = $ + W | 0) >>> 0 < $ >>> 0 ? 1 : 0) | 0
}
g = r.low = g + P, r.high = f + C + (g >>> 0 < P >>> 0 ? 1 : 0), d = i.low = d + T, i.high = p + R + (d >>> 0 < T >>> 0 ? 1 : 0), y = n.low = y + H, n.high = v + B + (y >>> 0 < H >>> 0 ? 1 : 0), S = s.low = S + O, s.high = m + N + (S >>> 0 < O >>> 0 ? 1 : 0), E = h.low = E + V, h.high = x + j + (E >>> 0 < V >>> 0 ? 1 : 0), b = u.low = b + K, u.high = w + L + (b >>> 0 < K >>> 0 ? 1 : 0), A = c.low = A + M, c.high = F + k + (A >>> 0 < M >>> 0 ? 1 : 0), I = l.low = I + q, l.high = D + _ + (I >>> 0 < q >>> 0 ? 1 : 0)
},
_doFinalize: function() {
var t = this._data,
e = t.words,
r = 8 * this._nDataBytes,
i = 8 * t.sigBytes;
return e[i >>> 5] |= 128 << 24 - i % 32, e[30 + (i + 128 >>> 10 << 5)] = Math.floor(r / 4294967296), e[31 + (i + 128 >>> 10 << 5)] = r, t.sigBytes = 4 * e.length, this._process(), this._hash.toX32()
},
clone: function() {
var t = r.clone.call(this);
return t._hash = this._hash.clone(), t
},
blockSize: 32
}), e.SHA512 = r._createHelper(s), e.HmacSHA512 = r._createHmacHelper(s)
}(),
function() {
var t = d,
e = (n = t.x64).Word,
r = n.WordArray,
i = (n = t.algo).SHA512,
n = n.SHA384 = i.extend({
_doReset: function() {
this._hash = new r.init([new e.init(3418070365, 3238371032), new e.init(1654270250, 914150663), new e.init(2438529370, 812702999), new e.init(355462360, 4144912697), new e.init(1731405415, 4290775857), new e.init(2394180231, 1750603025), new e.init(3675008525, 1694076839), new e.init(1203062813, 3204075428)])
},
_doFinalize: function() {
var t = i._doFinalize.call(this);
return t.sigBytes -= 16, t
}
});
t.SHA384 = i._createHelper(n), t.HmacSHA384 = i._createHmacHelper(n)
}(),
function() {
var t = d,
e = (i = t.lib).WordArray,
r = i.Hasher,
i = t.algo,
n = e.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]),
s = e.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]),
a = e.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]),
o = e.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]),
h = e.create([0, 1518500249, 1859775393, 2400959708, 2840853838]),
u = e.create([1352829926, 1548603684, 1836072691, 2053994217, 0]);
i = i.RIPEMD160 = r.extend({
_doReset: function() {
this._hash = e.create([1732584193, 4023233417, 2562383102, 271733878, 3285377520])
},
_doProcessBlock: function(t, e) {
for (var r = 0; 16 > r; r++) {
var i = t[E = e + r];
t[E] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8)
}
var c, l, f, g, p, d, v, y, m, S, x, E = this._hash.words,
w = (i = h.words, u.words),
b = n.words,
F = s.words,
A = a.words,
D = o.words;
for (d = c = E[0], v = l = E[1], y = f = E[2], m = g = E[3], S = p = E[4], r = 0; 80 > r; r += 1) x = c + t[e + b[r]] | 0, x = 16 > r ? x + ((l ^ f ^ g) + i[0]) : 32 > r ? x + ((l & f | ~l & g) + i[1]) : 48 > r ? x + (((l | ~f) ^ g) + i[2]) : 64 > r ? x + ((l & g | f & ~g) + i[3]) : x + ((l ^ (f | ~g)) + i[4]), x = (x = (x |= 0) << A[r] | x >>> 32 - A[r]) + p | 0, c = p, p = g, g = f << 10 | f >>> 22, f = l, l = x, x = d + t[e + F[r]] | 0, x = 16 > r ? x + ((v ^ (y | ~m)) + w[0]) : 32 > r ? x + ((v & m | y & ~m) + w[1]) : 48 > r ? x + (((v | ~y) ^ m) + w[2]) : 64 > r ? x + ((v & y | ~v & m) + w[3]) : x + ((v ^ y ^ m) + w[4]), x = (x = (x |= 0) << D[r] | x >>> 32 - D[r]) + S | 0, d = S, S = m, m = y << 10 | y >>> 22, y = v, v = x;
x = E[1] + f + m | 0, E[1] = E[2] + g + S | 0, E[2] = E[3] + p + d | 0, E[3] = E[4] + c + v | 0, E[4] = E[0] + l + y | 0, E[0] = x
},
_doFinalize: function() {
var t = this._data,
e = t.words,
r = 8 * this._nDataBytes,
i = 8 * t.sigBytes;
for (e[i >>> 5] |= 128 << 24 - i % 32, e[14 + (i + 64 >>> 9 << 4)] = 16711935 & (r << 8 | r >>> 24) | 4278255360 & (r << 24 | r >>> 8), t.sigBytes = 4 * (e.length + 1), this._process(), e = (t = this._hash).words, r = 0; 5 > r; r++) i = e[r], e[r] = 16711935 & (i << 8 | i >>> 24) | 4278255360 & (i << 24 | i >>> 8);
return t
},
clone: function() {
var t = r.clone.call(this);
return t._hash = this._hash.clone(), t
}
}), t.RIPEMD160 = r._createHelper(i), t.HmacRIPEMD160 = r._createHmacHelper(i)
}(Math),
function() {
var t = d,
e = t.enc.Utf8;
t.algo.HMAC = t.lib.Base.extend({
init: function(t, r) {
t = this._hasher = new t.init, "string" == typeof r && (r = e.parse(r));
var i = t.blockSize,
n = 4 * i;
r.sigBytes > n && (r = t.finalize(r)), r.clamp();
for (var s = this._oKey = r.clone(), a = this._iKey = r.clone(), o = s.words, h = a.words, u = 0; u < i; u++) o[u] ^= 1549556828, h[u] ^= 909522486;
s.sigBytes = a.sigBytes = n, this.reset()
},
reset: function() {
var t = this._hasher;
t.reset(), t.update(this._iKey)
},
update: function(t) {
return this._hasher.update(t), this
},
finalize: function(t) {
var e = this._hasher;
return t = e.finalize(t), e.reset(), e.finalize(this._oKey.clone().concat(t))
}
})
}(),
function() {
var t, e = d,
r = (t = e.lib).Base,
i = t.WordArray,
n = (t = e.algo).HMAC,
s = t.PBKDF2 = r.extend({
cfg: r.extend({
keySize: 4,
hasher: t.SHA1,
iterations: 1
}),
init: function(t) {
this.cfg = this.cfg.extend(t)
},
compute: function(t, e) {
var r = this.cfg,
s = n.create(r.hasher, t),
a = i.create(),
o = i.create([1]),
h = a.words,
u = o.words,
c = r.keySize;
for (r = r.iterations; h.length < c;) {
var l = s.update(e).finalize(o);
s.reset();
for (var f = l.words, g = f.length, p = l, d = 1; d < r; d++) {
p = s.finalize(p), s.reset();
for (var v = p.words, y = 0; y < g; y++) f[y] ^= v[y]
}
a.concat(l), u[0]++
}
return a.sigBytes = 4 * c, a
}
});
e.PBKDF2 = function(t, e, r) {
return s.create(r).compute(t, e)
}
}();
var v, y = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/";
function m(t) {
var e, r, i = "";
for (e = 0; e + 3 <= t.length; e += 3) r = parseInt(t.substring(e, e + 3), 16), i += y.charAt(r >> 6) + y.charAt(63 & r);
for (e + 1 == t.length ? (r = parseInt(t.substring(e, e + 1), 16), i += y.charAt(r << 2)) : e + 2 == t.length && (r = parseInt(t.substring(e, e + 2), 16), i += y.charAt(r >> 2) + y.charAt((3 & r) << 4)), "=";
(3 & i.length) > 0;) i += "=";
return i
}
function S(t) {
var e, r, i, n = "",
s = 0;
for (e = 0; e < t.length && "=" != t.charAt(e); ++e)(i = y.indexOf(t.charAt(e))) < 0 || (0 == s ? (n += D(i >> 2), r = 3 & i, s = 1) : 1 == s ? (n += D(r << 2 | i >> 4), r = 15 & i, s = 2) : 2 == s ? (n += D(r), n += D(i >> 2), r = 3 & i, s = 3) : (n += D(r << 2 | i >> 4), n += D(15 & i), s = 0));
return 1 == s && (n += D(r << 2)), n
}
function x(t) {
var e, r = S(t),
i = new Array;
for (e = 0; 2 * e < r.length; ++e) i[e] = parseInt(r.substring(2 * e, 2 * e + 2), 16);
return i
}
function E(t, e, r) {
null != t && ("number" == typeof t ? this.fromNumber(t, e, r) : null == e && "string" != typeof t ? this.fromString(t, 256) : this.fromString(t, e))
}
function w() {
return new E(null)
}
"Microsoft Internet Explorer" == f.appName ? (E.prototype.am = function(t, e, r, i, n, s) {
for (var a = 32767 & e, o = e >> 15; --s >= 0;) {
var h = 32767 & this[t],
u = this[t++] >> 15,
c = o * h + u * a;
n = ((h = a * h + ((32767 & c) << 15) + r[i] + (1073741823 & n)) >>> 30) + (c >>> 15) + o * u + (n >>> 30), r[i++] = 1073741823 & h
}
return n
}, v = 30) : "Netscape" != f.appName ? (E.prototype.am = function(t, e, r, i, n, s) {
for (; --s >= 0;) {
var a = e * this[t++] + r[i] + n;
n = Math.floor(a / 67108864), r[i++] = 67108863 & a
}
return n
}, v = 26) : (E.prototype.am = function(t, e, r, i, n, s) {
for (var a = 16383 & e, o = e >> 14; --s >= 0;) {
var h = 16383 & this[t],
u = this[t++] >> 14,
c = o * h + u * a;
n = ((h = a * h + ((16383 & c) << 14) + r[i] + n) >> 28) + (c >> 14) + o * u, r[i++] = 268435455 & h
}
return n
}, v = 28), E.prototype.DB = v, E.prototype.DM = (1 << v) - 1, E.prototype.DV = 1 << v, E.prototype.FV = Math.pow(2, 52), E.prototype.F1 = 52 - v, E.prototype.F2 = 2 * v - 52;
var b, F, A = new Array;
for (b = "0".charCodeAt(0), F = 0; F <= 9; ++F) A[b++] = F;
for (b = "a".charCodeAt(0), F = 10; F < 36; ++F) A[b++] = F;
for (b = "A".charCodeAt(0), F = 10; F < 36; ++F) A[b++] = F;
function D(t) {
return "0123456789abcdefghijklmnopqrstuvwxyz".charAt(t)
}
function I(t, e) {
var r = A[t.charCodeAt(e)];
return null == r ? -1 : r
}
function C(t) {
var e = w();
return e.fromInt(t), e
}
function P(t) {
var e, r = 1;
return 0 != (e = t >>> 16) && (t = e, r += 16), 0 != (e = t >> 8) && (t = e, r += 8), 0 != (e = t >> 4) && (t = e, r += 4), 0 != (e = t >> 2) && (t = e, r += 2), 0 != (e = t >> 1) && (t = e, r += 1), r
}
function R(t) {
this.m = t
}
function T(t) {
this.m = t, this.mp = t.invDigit(), this.mpl = 32767 & this.mp, this.mph = this.mp >> 15, this.um = (1 << t.DB - 15) - 1, this.mt2 = 2 * t.t
}
function B(t, e) {
return t & e
}
function H(t, e) {
return t | e
}
function N(t, e) {
return t ^ e
}
function O(t, e) {
return t & ~e
}
function j(t) {
if (0 == t) return -1;
var e = 0;
return 0 == (65535 & t) && (t >>= 16, e += 16), 0 == (255 & t) && (t >>= 8, e += 8), 0 == (15 & t) && (t >>= 4, e += 4), 0 == (3 & t) && (t >>= 2, e += 2), 0 == (1 & t) && ++e, e
}
function V(t) {
for (var e = 0; 0 != t;) t &= t - 1, ++e;
return e
}
function L() {}
function K(t) {
return t
}
function k(t) {
this.r2 = w(), this.q3 = w(), E.ONE.dlShiftTo(2 * t.t, this.r2), this.mu = this.r2.divide(t), this.m = t
}
R.prototype.convert = function(t) {
return t.s < 0 || t.compareTo(this.m) >= 0 ? t.mod(this.m) : t
}, R.prototype.revert = function(t) {
return t
}, R.prototype.reduce = function(t) {
t.divRemTo(this.m, null, t)
}, R.prototype.mulTo = function(t, e, r) {
t.multiplyTo(e, r), this.reduce(r)
}, R.prototype.sqrTo = function(t, e) {
t.squareTo(e), this.reduce(e)
}, T.prototype.convert = function(t) {
var e = w();
return t.abs().dlShiftTo(this.m.t, e), e.divRemTo(this.m, null, e), t.s < 0 && e.compareTo(E.ZERO) > 0 && this.m.subTo(e, e), e
}, T.prototype.revert = function(t) {
var e = w();
return t.copyTo(e), this.reduce(e), e
}, T.prototype.reduce = function(t) {
for (; t.t <= this.mt2;) t[t.t++] = 0;
for (var e = 0; e < this.m.t; ++e) {
var r = 32767 & t[e],
i = r * this.mpl + ((r * this.mph + (t[e] >> 15) * this.mpl & this.um) << 15) & t.DM;
for (t[r = e + this.m.t] += this.m.am(0, i, t, e, 0, this.m.t); t[r] >= t.DV;) t[r] -= t.DV, t[++r]++
}
t.clamp(), t.drShiftTo(this.m.t, t), t.compareTo(this.m) >= 0 && t.subTo(this.m, t)
}, T.prototype.mulTo = function(t, e, r) {
t.multiplyTo(e, r), this.reduce(r)
}, T.prototype.sqrTo = function(t, e) {
t.squareTo(e), this.reduce(e)
}, E.prototype.copyTo = function(t) {
for (var e = this.t - 1; e >= 0; --e) t[e] = this[e];
t.t = this.t, t.s = this.s
}, E.prototype.fromInt = function(t) {
this.t = 1, this.s = t < 0 ? -1 : 0, t > 0 ? this[0] = t : t < -1 ? this[0] = t + this.DV : this.t = 0
}, E.prototype.fromString = function(t, e) {
var r;
if (16 == e) r = 4;
else if (8 == e) r = 3;
else if (256 == e) r = 8;
else if (2 == e) r = 1;
else if (32 == e) r = 5;
else {
if (4 != e) return void this.fromRadix(t, e);
r = 2
}
this.t = 0, this.s = 0;
for (var i = t.length, n = !1, s = 0; --i >= 0;) {
var a = 8 == r ? 255 & t[i] : I(t, i);
a < 0 ? "-" == t.charAt(i) && (n = !0) : (n = !1, 0 == s ? this[this.t++] = a : s + r > this.DB ? (this[this.t - 1] |= (a & (1 << this.DB - s) - 1) << s, this[this.t++] = a >> this.DB - s) : this[this.t - 1] |= a << s, (s += r) >= this.DB && (s -= this.DB))
}
8 == r && 0 != (128 & t[0]) && (this.s = -1, s > 0 && (this[this.t - 1] |= (1 << this.DB - s) - 1 << s)), this.clamp(), n && E.ZERO.subTo(this, this)
}, E.prototype.clamp = function() {
for (var t = this.s & this.DM; this.t > 0 && this[this.t - 1] == t;) --this.t
}, E.prototype.dlShiftTo = function(t, e) {
var r;
for (r = this.t - 1; r >= 0; --r) e[r + t] = this[r];
for (r = t - 1; r >= 0; --r) e[r] = 0;
e.t = this.t + t, e.s = this.s
}, E.prototype.drShiftTo = function(t, e) {
for (var r = t; r < this.t; ++r) e[r - t] = this[r];
e.t = Math.max(this.t - t, 0), e.s = this.s
}, E.prototype.lShiftTo = function(t, e) {
var r, i = t % this.DB,
n = this.DB - i,
s = (1 << n) - 1,
a = Math.floor(t / this.DB),
o = this.s << i & this.DM;
for (r = this.t - 1; r >= 0; --r) e[r + a + 1] = this[r] >> n | o, o = (this[r] & s) << i;
for (r = a - 1; r >= 0; --r) e[r] = 0;
e[a] = o, e.t = this.t + a + 1, e.s = this.s, e.clamp()
}, E.prototype.rShiftTo = function(t, e) {
e.s = this.s;
var r = Math.floor(t / this.DB);
if (r >= this.t) e.t = 0;
else {
var i = t % this.DB,
n = this.DB - i,
s = (1 << i) - 1;
e[0] = this[r] >> i;
for (var a = r + 1; a < this.t; ++a) e[a - r - 1] |= (this[a] & s) << n, e[a - r] = this[a] >> i;
i > 0 && (e[this.t - r - 1] |= (this.s & s) << n), e.t = this.t - r, e.clamp()
}
}, E.prototype.subTo = function(t, e) {
for (var r = 0, i = 0, n = Math.min(t.t, this.t); r < n;) i += this[r] - t[r], e[r++] = i & this.DM, i >>= this.DB;
if (t.t < this.t) {
for (i -= t.s; r < this.t;) i += this[r], e[r++] = i & this.DM, i >>= this.DB;
i += this.s
} else {
for (i += this.s; r < t.t;) i -= t[r], e[r++] = i & this.DM, i >>= this.DB;
i -= t.s
}
e.s = i < 0 ? -1 : 0, i < -1 ? e[r++] = this.DV + i : i > 0 && (e[r++] = i), e.t = r, e.clamp()
}, E.prototype.multiplyTo = function(t, e) {
var r = this.abs(),
i = t.abs(),
n = r.t;
for (e.t = n + i.t; --n >= 0;) e[n] = 0;
for (n = 0; n < i.t; ++n) e[n + r.t] = r.am(0, i[n], e, n, 0, r.t);
e.s = 0, e.clamp(), this.s != t.s && E.ZERO.subTo(e, e)
}, E.prototype.squareTo = function(t) {
for (var e = this.abs(), r = t.t = 2 * e.t; --r >= 0;) t[r] = 0;
for (r = 0; r < e.t - 1; ++r) {
var i = e.am(r, e[r], t, 2 * r, 0, 1);
(t[r + e.t] += e.am(r + 1, 2 * e[r], t, 2 * r + 1, i, e.t - r - 1)) >= e.DV && (t[r + e.t] -= e.DV, t[r + e.t + 1] = 1)
}
t.t > 0 && (t[t.t - 1] += e.am(r, e[r], t, 2 * r, 0, 1)), t.s = 0, t.clamp()
}, E.prototype.divRemTo = function(t, e, r) {
var i = t.abs();
if (!(i.t <= 0)) {
var n = this.abs();
if (n.t < i.t) return null != e && e.fromInt(0), void(null != r && this.copyTo(r));
null == r && (r = w());
var s = w(),
a = this.s,
o = t.s,
h = this.DB - P(i[i.t - 1]);
h > 0 ? (i.lShiftTo(h, s), n.lShiftTo(h, r)) : (i.copyTo(s), n.copyTo(r));
var u = s.t,
c = s[u - 1];
if (0 != c) {
var l = c * (1 << this.F1) + (u > 1 ? s[u - 2] >> this.F2 : 0),
f = this.FV / l,
g = (1 << this.F1) / l,
p = 1 << this.F2,
d = r.t,
v = d - u,
y = null == e ? w() : e;
for (s.dlShiftTo(v, y), r.compareTo(y) >= 0 && (r[r.t++] = 1, r.subTo(y, r)), E.ONE.dlShiftTo(u, y), y.subTo(s, s); s.t < u;) s[s.t++] = 0;
for (; --v >= 0;) {
var m = r[--d] == c ? this.DM : Math.floor(r[d] * f + (r[d - 1] + p) * g);
if ((r[d] += s.am(0, m, r, v, 0, u)) < m)
for (s.dlShiftTo(v, y), r.subTo(y, r); r[d] < --m;) r.subTo(y, r)
}
null != e && (r.drShiftTo(u, e), a != o && E.ZERO.subTo(e, e)), r.t = u, r.clamp(), h > 0 && r.rShiftTo(h, r), a < 0 && E.ZERO.subTo(r, r)
}
}
}, E.prototype.invDigit = function() {
if (this.t < 1) return 0;
var t = this[0];
if (0 == (1 & t)) return 0;
var e = 3 & t;
return (e = (e = (e = (e = e * (2 - (15 & t) * e) & 15) * (2 - (255 & t) * e) & 255) * (2 - ((65535 & t) * e & 65535)) & 65535) * (2 - t * e % this.DV) % this.DV) > 0 ? this.DV - e : -e
}, E.prototype.isEven = function() {
return 0 == (this.t > 0 ? 1 & this[0] : this.s)
}, E.prototype.exp = function(t, e) {
if (t > 4294967295 || t < 1) return E.ONE;
var r = w(),
i = w(),
n = e.convert(this),
s = P(t) - 1;
for (n.copyTo(r); --s >= 0;)
if (e.sqrTo(r, i), (t & 1 << s) > 0) e.mulTo(i, n, r);
else {
var a = r;
r = i, i = a
}
return e.revert(r)
}, E.prototype.toString = function(t) {
if (this.s < 0) return "-" + this.negate().toString(t);
var e;
if (16 == t) e = 4;
else if (8 == t) e = 3;
else if (2 == t) e = 1;
else if (32 == t) e = 5;
else {
if (4 != t) return this.toRadix(t);
e = 2
}
var r, i = (1 << e) - 1,
n = !1,
s = "",
a = this.t,
o = this.DB - a * this.DB % e;
if (a-- > 0)
for (o < this.DB && (r = this[a] >> o) > 0 && (n = !0, s = D(r)); a >= 0;) o < e ? (r = (this[a] & (1 << o) - 1) << e - o, r |= this[--a] >> (o += this.DB - e)) : (r = this[a] >> (o -= e) & i, o <= 0 && (o += this.DB, --a)), r > 0 && (n = !0), n && (s += D(r));
return n ? s : "0"
}, E.prototype.negate = function() {
var t = w();
return E.ZERO.subTo(this, t), t
}, E.prototype.abs = function() {
return this.s < 0 ? this.negate() : this
}, E.prototype.compareTo = function(t) {
var e = this.s - t.s;
if (0 != e) return e;
var r = this.t;
if (0 != (e = r - t.t)) return this.s < 0 ? -e : e;
for (; --r >= 0;)
if (0 != (e = this[r] - t[r])) return e;
return 0
}, E.prototype.bitLength = function() {
return this.t <= 0 ? 0 : this.DB * (this.t - 1) + P(this[this.t - 1] ^ this.s & this.DM)
}, E.prototype.mod = function(t) {
var e = w();
return this.abs().divRemTo(t, null, e), this.s < 0 && e.compareTo(E.ZERO) > 0 && t.subTo(e, e), e
}, E.prototype.modPowInt = function(t, e) {
var r;
return r = t < 256 || e.isEven() ? new R(e) : new T(e), this.exp(t, r)
}, E.ZERO = C(0), E.ONE = C(1), L.prototype.convert = K, L.prototype.revert = K, L.prototype.mulTo = function(t, e, r) {
t.multiplyTo(e, r)
}, L.prototype.sqrTo = function(t, e) {
t.squareTo(e)
}, k.prototype.convert = function(t) {
if (t.s < 0 || t.t > 2 * this.m.t) return t.mod(this.m);
if (t.compareTo(this.m) < 0) return t;
var e = w();
return t.copyTo(e), this.reduce(e), e
}, k.prototype.revert = function(t) {
return t
}, k.prototype.reduce = function(t) {
for (t.drShiftTo(this.m.t - 1, this.r2), t.t > this.m.t + 1 && (t.t = this.m.t + 1, t.clamp()), this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3), this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); t.compareTo(this.r2) < 0;) t.dAddOffset(1, this.m.t + 1);
for (t.subTo(this.r2, t); t.compareTo(this.m) >= 0;) t.subTo(this.m, t)
}, k.prototype.mulTo = function(t, e, r) {
t.multiplyTo(e, r), this.reduce(r)
}, k.prototype.sqrTo = function(t, e) {
t.squareTo(e), this.reduce(e)
};
var M = [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],
_ = (1 << 26) / M[M.length - 1];
function q() {
this.i = 0, this.j = 0, this.S = new Array
}
E.prototype.chunkSize = function(t) {
return Math.floor(Math.LN2 * this.DB / Math.log(t))
}, E.prototype.toRadix = function(t) {
if (null == t && (t = 10), 0 == this.signum() || t < 2 || t > 36) return "0";
var e = this.chunkSize(t),
r = Math.pow(t, e),
i = C(r),
n = w(),
s = w(),
a = "";
for (this.divRemTo(i, n, s); n.signum() > 0;) a = (r + s.intValue()).toString(t).substr(1) + a, n.divRemTo(i, n, s);
return s.intValue().toString(t) + a
}, E.prototype.fromRadix = function(t, e) {
this.fromInt(0), null == e && (e = 10);
for (var r = this.chunkSize(e), i = Math.pow(e, r), n = !1, s = 0, a = 0, o = 0; o < t.length; ++o) {
var h = I(t, o);
h < 0 ? "-" == t.charAt(o) && 0 == this.signum() && (n = !0) : (a = e * a + h, ++s >= r && (this.dMultiply(i), this.dAddOffset(a, 0), s = 0, a = 0))
}
s > 0 && (this.dMultiply(Math.pow(e, s)), this.dAddOffset(a, 0)), n && E.ZERO.subTo(this, this)
}, E.prototype.fromNumber = function(t, e, r) {
if ("number" == typeof e)
if (t < 2) this.fromInt(1);
else
for (this.fromNumber(t, r), this.testBit(t - 1) || this.bitwiseTo(E.ONE.shiftLeft(t - 1), H, this), this.isEven() && this.dAddOffset(1, 0); !this.isProbablePrime(e);) this.dAddOffset(2, 0), this.bitLength() > t && this.subTo(E.ONE.shiftLeft(t - 1), this);
else {
var i = new Array,
n = 7 & t;
i.length = 1 + (t >> 3), e.nextBytes(i), n > 0 ? i[0] &= (1 << n) - 1 : i[0] = 0, this.fromString(i, 256)
}
}, E.prototype.bitwiseTo = function(t, e, r) {
var i, n, s = Math.min(t.t, this.t);
for (i = 0; i < s; ++i) r[i] = e(this[i], t[i]);
if (t.t < this.t) {
for (n = t.s & this.DM, i = s; i < this.t; ++i) r[i] = e(this[i], n);
r.t = this.t
} else {
for (n = this.s & this.DM, i = s; i < t.t; ++i) r[i] = e(n, t[i]);
r.t = t.t
}
r.s = e(this.s, t.s), r.clamp()
}, E.prototype.changeBit = function(t, e) {
var r = E.ONE.shiftLeft(t);
return this.bitwiseTo(r, e, r), r
}, E.prototype.addTo = function(t, e) {
for (var r = 0, i = 0, n = Math.min(t.t, this.t); r < n;) i += this[r] + t[r], e[r++] = i & this.DM, i >>= this.DB;
if (t.t < this.t) {
for (i += t.s; r < this.t;) i += this[r], e[r++] = i & this.DM, i >>= this.DB;
i += this.s
} else {
for (i += this.s; r < t.t;) i += t[r], e[r++] = i & this.DM, i >>= this.DB;
i += t.s
}
e.s = i < 0 ? -1 : 0, i > 0 ? e[r++] = i : i < -1 && (e[r++] = this.DV + i), e.t = r, e.clamp()
}, E.prototype.dMultiply = function(t) {
this[this.t] = this.am(0, t - 1, this, 0, 0, this.t), ++this.t, this.clamp()
}, E.prototype.dAddOffset = function(t, e) {
if (0 != t) {
for (; this.t <= e;) this[this.t++] = 0;
for (this[e] += t; this[e] >= this.DV;) this[e] -= this.DV, ++e >= this.t && (this[this.t++] = 0), ++this[e]
}
}, E.prototype.multiplyLowerTo = function(t, e, r) {
var i, n = Math.min(this.t + t.t, e);
for (r.s = 0, r.t = n; n > 0;) r[--n] = 0;
for (i = r.t - this.t; n < i; ++n) r[n + this.t] = this.am(0, t[n], r, n, 0, this.t);
for (i = Math.min(t.t, e); n < i; ++n) this.am(0, t[n], r, n, 0, e - n);
r.clamp()
}, E.prototype.multiplyUpperTo = function(t, e, r) {
--e;
var i = r.t = this.t + t.t - e;
for (r.s = 0; --i >= 0;) r[i] = 0;
for (i = Math.max(e - this.t, 0); i < t.t; ++i) r[this.t + i - e] = this.am(e - i, t[i], r, 0, 0, this.t + i - e);
r.clamp(), r.drShiftTo(1, r)
}, E.prototype.modInt = function(t) {
if (t <= 0) return 0;
var e = this.DV % t,
r = this.s < 0 ? t - 1 : 0;
if (this.t > 0)
if (0 == e) r = this[0] % t;
else
for (var i = this.t - 1; i >= 0; --i) r = (e * r + this[i]) % t;
return r
}, E.prototype.millerRabin = function(t) {
var e = this.subtract(E.ONE),
r = e.getLowestSetBit();
if (r <= 0) return !1;
var i = e.shiftRight(r);
(t = t + 1 >> 1) > M.length && (t = M.length);
for (var n = w(), s = 0; s < t; ++s) {
n.fromInt(M[Math.floor(Math.random() * M.length)]);
var a = n.modPow(i, this);
if (0 != a.compareTo(E.ONE) && 0 != a.compareTo(e)) {
for (var o = 1; o++ < r && 0 != a.compareTo(e);)
if (0 == (a = a.modPowInt(2, this)).compareTo(E.ONE)) return !1;
if (0 != a.compareTo(e)) return !1
}
}
return !0
}, E.prototype.clone = function() {
var t = w();
return this.copyTo(t), t
}, E.prototype.intValue = function() {
if (this.s < 0) {
if (1 == this.t) return this[0] - this.DV;
if (0 == this.t) return -1
} else {
if (1 == this.t) return this[0];
if (0 == this.t) return 0
}
return (this[1] & (1 << 32 - this.DB) - 1) << this.DB | this[0]
}, E.prototype.byteValue = function() {
return 0 == this.t ? this.s : this[0] << 24 >> 24
}, E.prototype.shortValue = function() {
return 0 == this.t ? this.s : this[0] << 16 >> 16
}, E.prototype.signum = function() {
return this.s < 0 ? -1 : this.t <= 0 || 1 == this.t && this[0] <= 0 ? 0 : 1
}, E.prototype.toByteArray = function() {
var t = this.t,
e = new Array;
e[0] = this.s;
var r, i = this.DB - t * this.DB % 8,
n = 0;
if (t-- > 0)
for (i < this.DB && (r = this[t] >> i) != (this.s & this.DM) >> i && (e[n++] = r | this.s << this.DB - i); t >= 0;) i < 8 ? (r = (this[t] & (1 << i) - 1) << 8 - i, r |= this[--t] >> (i += this.DB - 8)) : (r = this[t] >> (i -= 8) & 255, i <= 0 && (i += this.DB, --t)), 0 != (128 & r) && (r |= -256), 0 == n && (128 & this.s) != (128 & r) && ++n, (n > 0 || r != this.s) && (e[n++] = r);
return e
}, E.prototype.equals = function(t) {
return 0 == this.compareTo(t)
}, E.prototype.min = function(t) {
return this.compareTo(t) < 0 ? this : t
}, E.prototype.max = function(t) {
return this.compareTo(t) > 0 ? this : t
}, E.prototype.and = function(t) {
var e = w();
return this.bitwiseTo(t, B, e), e
}, E.prototype.or = function(t) {
var e = w();
return this.bitwiseTo(t, H, e), e
}, E.prototype.xor = function(t) {
var e = w();
return this.bitwiseTo(t, N, e), e
}, E.prototype.andNot = function(t) {
var e = w();
return this.bitwiseTo(t, O, e), e
}, E.prototype.not = function() {
for (var t = w(), e = 0; e < this.t; ++e) t[e] = this.DM & ~this[e];
return t.t = this.t, t.s = ~this.s, t
}, E.prototype.shiftLeft = function(t) {
var e = w();
return t < 0 ? this.rShiftTo(-t, e) : this.lShiftTo(t, e), e
}, E.prototype.shiftRight = function(t) {
var e = w();
return t < 0 ? this.lShiftTo(-t, e) : this.rShiftTo(t, e), e
}, E.prototype.getLowestSetBit = function() {
for (var t = 0; t < this.t; ++t)
if (0 != this[t]) return t * this.DB + j(this[t]);
return this.s < 0 ? this.t * this.DB : -1
}, E.prototype.bitCount = function() {
for (var t = 0, e = this.s & this.DM, r = 0; r < this.t; ++r) t += V(this[r] ^ e);
return t
}, E.prototype.testBit = function(t) {
var e = Math.floor(t / this.DB);
return e >= this.t ? 0 != this.s : 0 != (this[e] & 1 << t % this.DB)
}, E.prototype.setBit = function(t) {
return this.changeBit(t, H)
}, E.prototype.clearBit = function(t) {
return this.changeBit(t, O)
}, E.prototype.flipBit = function(t) {
return this.changeBit(t, N)
}, E.prototype.add = function(t) {
var e = w();
return this.addTo(t, e), e
}, E.prototype.subtract = function(t) {
var e = w();
return this.subTo(t, e), e
}, E.prototype.multiply = function(t) {
var e = w();
return this.multiplyTo(t, e), e
}, E.prototype.divide = function(t) {
var e = w();
return this.divRemTo(t, e, null), e
}, E.prototype.remainder = function(t) {
var e = w();
return this.divRemTo(t, null, e), e
}, E.prototype.divideAndRemainder = function(t) {
var e = w(),
r = w();
return this.divRemTo(t, e, r), new Array(e, r)
}, E.prototype.modPow = function(t, e) {
var r, i, n = t.bitLength(),
s = C(1);
if (n <= 0) return s;
r = n < 18 ? 1 : n < 48 ? 3 : n < 144 ? 4 : n < 768 ? 5 : 6, i = n < 8 ? new R(e) : e.isEven() ? new k(e) : new T(e);
var a = new Array,
o = 3,
h = r - 1,
u = (1 << r) - 1;
if (a[1] = i.convert(this), r > 1) {
var c = w();
for (i.sqrTo(a[1], c); o <= u;) a[o] = w(), i.mulTo(c, a[o - 2], a[o]), o += 2
}
var l, f, g = t.t - 1,
p = !0,
d = w();
for (n = P(t[g]) - 1; g >= 0;) {
for (n >= h ? l = t[g] >> n - h & u : (l = (t[g] & (1 << n + 1) - 1) << h - n, g > 0 && (l |= t[g - 1] >> this.DB + n - h)), o = r; 0 == (1 & l);) l >>= 1, --o;
if ((n -= o) < 0 && (n += this.DB, --g), p) a[l].copyTo(s), p = !1;
else {
for (; o > 1;) i.sqrTo(s, d), i.sqrTo(d, s), o -= 2;
o > 0 ? i.sqrTo(s, d) : (f = s, s = d, d = f), i.mulTo(d, a[l], s)
}
for (; g >= 0 && 0 == (t[g] & 1 << n);) i.sqrTo(s, d), f = s, s = d, d = f, --n < 0 && (n = this.DB - 1, --g)
}
return i.revert(s)
}, E.prototype.modInverse = function(t) {
var e = t.isEven();
if (this.isEven() && e || 0 == t.signum()) return E.ZERO;
for (var r = t.clone(), i = this.clone(), n = C(1), s = C(0), a = C(0), o = C(1); 0 != r.signum();) {
for (; r.isEven();) r.rShiftTo(1, r), e ? (n.isEven() && s.isEven() || (n.addTo(this, n), s.subTo(t, s)), n.rShiftTo(1, n)) : s.isEven() || s.subTo(t, s), s.rShiftTo(1, s);
for (; i.isEven();) i.rShiftTo(1, i), e ? (a.isEven() && o.isEven() || (a.addTo(this, a), o.subTo(t, o)), a.rShiftTo(1, a)) : o.isEven() || o.subTo(t, o), o.rShiftTo(1, o);
r.compareTo(i) >= 0 ? (r.subTo(i, r), e && n.subTo(a, n), s.subTo(o, s)) : (i.subTo(r, i), e && a.subTo(n, a), o.subTo(s, o))
}
return 0 != i.compareTo(E.ONE) ? E.ZERO : o.compareTo(t) >= 0 ? o.subtract(t) : o.signum() < 0 ? (o.addTo(t, o), o.signum() < 0 ? o.add(t) : o) : o
}, E.prototype.pow = function(t) {
return this.exp(t, new L)
}, E.prototype.gcd = function(t) {
var e = this.s < 0 ? this.negate() : this.clone(),
r = t.s < 0 ? t.negate() : t.clone();
if (e.compareTo(r) < 0) {
var i = e;
e = r, r = i
}
var n = e.getLowestSetBit(),
s = r.getLowestSetBit();
if (s < 0) return e;
for (n < s && (s = n), s > 0 && (e.rShiftTo(s, e), r.rShiftTo(s, r)); e.signum() > 0;)(n = e.getLowestSetBit()) > 0 && e.rShiftTo(n, e), (n = r.getLowestSetBit()) > 0 && r.rShiftTo(n, r), e.compareTo(r) >= 0 ? (e.subTo(r, e), e.rShiftTo(1, e)) : (r.subTo(e, r), r.rShiftTo(1, r));
return s > 0 && r.lShiftTo(s, r), r
}, E.prototype.isProbablePrime = function(t) {
var e, r = this.abs();
if (1 == r.t && r[0] <= M[M.length - 1]) {
for (e = 0; e < M.length; ++e)
if (r[0] == M[e]) return !0;
return !1
}
if (r.isEven()) return !1;
for (e = 1; e < M.length;) {
for (var i = M[e], n = e + 1; n < M.length && i < _;) i *= M[n++];
for (i = r.modInt(i); e < n;)
if (i % M[e++] == 0) return !1
}
return r.millerRabin(t)
}, E.prototype.square = function() {
var t = w();
return this.squareTo(t), t
}, q.prototype.init = function(t) {
var e, r, i;
for (e = 0; e < 256; ++e) this.S[e] = e;
for (r = 0, e = 0; e < 256; ++e) r = r + this.S[e] + t[e % t.length] & 255, i = this.S[e], this.S[e] = this.S[r], this.S[r] = i;
this.i = 0, this.j = 0
}, q.prototype.next = function() {
var t;
return this.i = this.i + 1 & 255, this.j = this.j + this.S[this.i] & 255, t = this.S[this.i], this.S[this.i] = this.S[this.j], this.S[this.j] = t, this.S[t + this.S[this.i] & 255]
};
var U, z, G;
function W() {
var t;
t = (new Date).getTime(), z[G++] ^= 255 & t, z[G++] ^= t >> 8 & 255, z[G++] ^= t >> 16 & 255, z[G++] ^= t >> 24 & 255, G >= 256 && (G -= 256)
}
if (null == z) {
var J;
if (z = new Array, G = 0, void 0 !== p && (void 0 !== p.crypto || void 0 !== p.msCrypto)) {
var X = p.crypto || p.msCrypto;
if (X.getRandomValues) {
var $ = new Uint8Array(32);
for (X.getRandomValues($), J = 0; J < 32; ++J) z[G++] = $[J]
} else if ("Netscape" == f.appName && f.appVersion < "5") {
var Y = p.crypto.random(32);
for (J = 0; J < Y.length; ++J) z[G++] = 255 & Y.charCodeAt(J)
}
}
for (; G < 256;) J = Math.floor(65536 * Math.random()), z[G++] = J >>> 8, z[G++] = 255 & J;
G = 0, W()
}
function Z() {
if (null == U) {
for (W(), (U = new q).init(z), G = 0; G < z.length; ++G) z[G] = 0;
G = 0
}
return U.next()
}
function Q() {}
function tt(t, e) {
return new E(t, e)
}
function et(t, e, r) {
for (var i = "", n = 0; i.length < e;) i += r(String.fromCharCode.apply(String, t.concat([(4278190080 & n) >> 24, (16711680 & n) >> 16, (65280 & n) >> 8, 255 & n]))), n += 1;
return i
}
function rt() {
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 it(t, e, r) {
for (var i = "", n = 0; i.length < e;) i += r(t + String.fromCharCode.apply(String, [(4278190080 & n) >> 24, (16711680 & n) >> 16, (65280 & n) >> 8, 255 & n])), n += 1;
return i
}
function nt(t, e) {
this.x = e, this.q = t
}
function st(t, e, r, i) {
this.curve = t, this.x = e, this.y = r, this.z = null == i ? E.ONE : i, this.zinv = null
}
function at(t, e, r) {
this.q = t, this.a = this.fromBigInteger(e), this.b = this.fromBigInteger(r), this.infinity = new st(this, null, null)
}
Q.prototype.nextBytes = function(t) {
var e;
for (e = 0; e < t.length; ++e) t[e] = Z()
}, rt.prototype.doPublic = function(t) {
return t.modPowInt(this.e, this.n)
}, rt.prototype.setPublic = function(t, e) {
if (this.isPublic = !0, this.isPrivate = !1, "string" != typeof t) this.n = t, this.e = e;
else {
if (!(null != t && null != e && t.length > 0 && e.length > 0)) throw "Invalid RSA public key";
this.n = tt(t, 16), this.e = parseInt(e, 16)
}
}, rt.prototype.encrypt = function(t) {
var e = function(t, e) {
if (e < t.length + 11) throw "Message too long for RSA";
for (var r = new Array, i = t.length - 1; i >= 0 && e > 0;) {
var n = t.charCodeAt(i--);
n < 128 ? r[--e] = n : n > 127 && n < 2048 ? (r[--e] = 63 & n | 128, r[--e] = n >> 6 | 192) : (r[--e] = 63 & n | 128, r[--e] = n >> 6 & 63 | 128, r[--e] = n >> 12 | 224)
}
r[--e] = 0;
for (var s = new Q, a = new Array; e > 2;) {
for (a[0] = 0; 0 == a[0];) s.nextBytes(a);
r[--e] = a[0]
}
return r[--e] = 2, r[--e] = 0, new E(r)
}(t, this.n.bitLength() + 7 >> 3);
if (null == e) return null;
var r = this.doPublic(e);
if (null == r) return null;
var i = r.toString(16);
return 0 == (1 & i.length) ? i : "0" + i
}, rt.prototype.encryptOAEP = function(t, e, r) {
var i = function(t, e, r, i) {
var n = ht.crypto.MessageDigest,
s = ht.crypto.Util,
a = null;
if (r || (r = "sha1"), "string" == typeof r && (a = n.getCanonicalAlgName(r), i = n.getHashLength(a), r = function(t) {
return wt(s.hashHex(bt(t), a))
}), t.length + 2 * i + 2 > e) throw "Message too long for RSA";
var o, h = "";
for (o = 0; o < e - t.length - 2 * i - 2; o += 1) h += "\0";
var u = r("") + h + "\x01" + t,
c = new Array(i);
(new Q).nextBytes(c);
var l = et(c, u.length, r),
f = [];
for (o = 0; o < u.length; o += 1) f[o] = u.charCodeAt(o) ^ l.charCodeAt(o);
var g = et(f, c.length, r),
p = [0];
for (o = 0; o < c.length; o += 1) p[o + 1] = c[o] ^ g.charCodeAt(o);
return new E(p.concat(f))
}(t, this.n.bitLength() + 7 >> 3, e, r);
if (null == i) return null;
var n = this.doPublic(i);
if (null == n) return null;
var s = n.toString(16);
return 0 == (1 & s.length) ? s : "0" + s
}, rt.prototype.type = "RSA", rt.prototype.doPrivate = function(t) {
if (null == this.p || null == this.q) return t.modPow(this.d, this.n);
for (var e = t.mod(this.p).modPow(this.dmp1, this.p), r = t.mod(this.q).modPow(this.dmq1, this.q); e.compareTo(r) < 0;) e = e.add(this.p);
return e.subtract(r).multiply(this.coeff).mod(this.p).multiply(this.q).add(r)
}, rt.prototype.setPrivate = function(t, e, r) {
if (this.isPrivate = !0, "string" != typeof t) this.n = t, this.e = e, this.d = r;
else {
if (!(null != t && null != e && t.length > 0 && e.length > 0)) throw "Invalid RSA private key";
this.n = tt(t, 16), this.e = parseInt(e, 16), this.d = tt(r, 16)
}
}, rt.prototype.setPrivateEx = function(t, e, r, i, n, s, a, o) {
if (this.isPrivate = !0, this.isPublic = !1, null == t) throw "RSASetPrivateEx N == null";
if (null == e) throw "RSASetPrivateEx E == null";
if (0 == t.length) throw "RSASetPrivateEx N.length == 0";
if (0 == e.length) throw "RSASetPrivateEx E.length == 0";
if (!(null != t && null != e && t.length > 0 && e.length > 0)) throw "Invalid RSA private key in RSASetPrivateEx";
this.n = tt(t, 16), this.e = parseInt(e, 16), this.d = tt(r, 16), this.p = tt(i, 16), this.q = tt(n, 16), this.dmp1 = tt(s, 16), this.dmq1 = tt(a, 16), this.coeff = tt(o, 16)
}, rt.prototype.generate = function(t, e) {
var r = new Q,
i = t >> 1;
this.e = parseInt(e, 16);
for (var n = new E(e, 16);;) {
for (; this.p = new E(t - i, 1, r), 0 != this.p.subtract(E.ONE).gcd(n).compareTo(E.ONE) || !this.p.isProbablePrime(10););
for (; this.q = new E(i, 1, r), 0 != this.q.subtract(E.ONE).gcd(n).compareTo(E.ONE) || !this.q.isProbablePrime(10););
if (this.p.compareTo(this.q) <= 0) {
var s = this.p;
this.p = this.q, this.q = s
}
var a = this.p.subtract(E.ONE),
o = this.q.subtract(E.ONE),
h = a.multiply(o);
if (0 == h.gcd(n).compareTo(E.ONE) && (this.n = this.p.multiply(this.q), this.n.bitLength() == t)) {
this.d = n.modInverse(h), this.dmp1 = this.d.mod(a), this.dmq1 = this.d.mod(o), this.coeff = this.q.modInverse(this.p);
break
}
}
this.isPrivate = !0
}, rt.prototype.decrypt = function(t) {
if (t.length != Math.ceil(this.n.bitLength() / 4)) throw new Error("wrong ctext length");
var e = tt(t, 16),
r = this.doPrivate(e);
return null == r ? null : function(t, e) {
for (var r = t.toByteArray(), i = 0; i < r.length && 0 == r[i];) ++i;
if (r.length - i != e - 1 || 2 != r[i]) return null;
for (++i; 0 != r[i];)
if (++i >= r.length) return null;
for (var n = ""; ++i < r.length;) {
var s = 255 & r[i];
s < 128 ? n += String.fromCharCode(s) : s > 191 && s < 224 ? (n += String.fromCharCode((31 & s) << 6 | 63 & r[i + 1]), ++i) : (n += String.fromCharCode((15 & s) << 12 | (63 & r[i + 1]) << 6 | 63 & r[i + 2]), i += 2)
}
return n
}(r, this.n.bitLength() + 7 >> 3)
}, rt.prototype.decryptOAEP = function(t, e, r) {
if (t.length != Math.ceil(this.n.bitLength() / 4)) throw new Error("wrong ctext length");
var i = tt(t, 16),
n = this.doPrivate(i);
return null == n ? null : function(t, e, r, i) {
var n = ht.crypto.MessageDigest,
s = ht.crypto.Util,
a = null;
for (r || (r = "sha1"), "string" == typeof r && (a = n.getCanonicalAlgName(r), i = n.getHashLength(a), r = function(t) {
return wt(s.hashHex(bt(t), a))
}), t = t.toByteArray(), o = 0; o < t.length; o += 1) t[o] &= 255;
for (; t.length < e;) t.unshift(0);
if ((t = String.fromCharCode.apply(String, t)).length < 2 * i + 2) throw "Cipher too short";
var o, h = t.substr(1, i),
u = t.substr(i + 1),
c = it(u, i, r),
l = [];
for (o = 0; o < h.length; o += 1) l[o] = h.charCodeAt(o) ^ c.charCodeAt(o);
var f = it(String.fromCharCode.apply(String, l), t.length - i, r),
g = [];
for (o = 0; o < u.length; o += 1) g[o] = u.charCodeAt(o) ^ f.charCodeAt(o);
if ((g = String.fromCharCode.apply(String, g)).substr(0, i) !== r("")) throw "Hash mismatch";
var p = (g = g.substr(i)).indexOf("\x01");
if ((-1 != p ? g.substr(0, p).lastIndexOf("\0") : -1) + 1 != p) throw "Malformed data";
return g.substr(p + 1)
}(n, this.n.bitLength() + 7 >> 3, e, r)
}, nt.prototype.equals = function(t) {
return t == this || this.q.equals(t.q) && this.x.equals(t.x)
}, nt.prototype.toBigInteger = function() {
return this.x
}, nt.prototype.negate = function() {
return new nt(this.q, this.x.negate().mod(this.q))
}, nt.prototype.add = function(t) {
return new nt(this.q, this.x.add(t.toBigInteger()).mod(this.q))
}, nt.prototype.subtract = function(t) {
return new nt(this.q, this.x.subtract(t.toBigInteger()).mod(this.q))
}, nt.prototype.multiply = function(t) {
return new nt(this.q, this.x.multiply(t.toBigInteger()).mod(this.q))
}, nt.prototype.square = function() {
return new nt(this.q, this.x.square().mod(this.q))
}, nt.prototype.divide = function(t) {
return new nt(this.q, this.x.multiply(t.toBigInteger().modInverse(this.q)).mod(this.q))
}, st.prototype.getX = function() {
return null == this.zinv && (this.zinv = this.z.modInverse(this.curve.q)), this.curve.fromBigInteger(this.x.toBigInteger().multiply(this.zinv).mod(this.curve.q))
}, st.prototype.getY = function() {
return null == this.zinv && (this.zinv = this.z.modInverse(this.curve.q)), this.curve.fromBigInteger(this.y.toBigInteger().multiply(this.zinv).mod(this.curve.q))
}, st.prototype.equals = function(t) {
return t == this || (this.isInfinity() ? t.isInfinity() : t.isInfinity() ? this.isInfinity() : !!t.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(t.z)).mod(this.curve.q).equals(E.ZERO) && t.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(t.z)).mod(this.curve.q).equals(E.ZERO))
}, st.prototype.isInfinity = function() {
return null == this.x && null == this.y || this.z.equals(E.ZERO) && !this.y.toBigInteger().equals(E.ZERO)
}, st.prototype.negate = function() {
return new st(this.curve, this.x, this.y.negate(), this.z)
}, st.prototype.add = function(t) {
if (this.isInfinity()) return t;
if (t.isInfinity()) return this;
var e = t.y.toBigInteger().multiply(this.z).subtract(this.y.toBigInteger().multiply(t.z)).mod(this.curve.q),
r = t.x.toBigInteger().multiply(this.z).subtract(this.x.toBigInteger().multiply(t.z)).mod(this.curve.q);
if (E.ZERO.equals(r)) return E.ZERO.equals(e) ? this.twice() : this.curve.getInfinity();
var i = new E("3"),
n = this.x.toBigInteger(),
s = this.y.toBigInteger(),
a = (t.x.toBigInteger(), t.y.toBigInteger(), r.square()),
o = a.multiply(r),
h = n.multiply(a),
u = e.square().multiply(this.z),
c = u.subtract(h.shiftLeft(1)).multiply(t.z).subtract(o).multiply(r).mod(this.curve.q),
l = h.multiply(i).multiply(e).subtract(s.multiply(o)).subtract(u.multiply(e)).multiply(t.z).add(e.multiply(o)).mod(this.curve.q),
f = o.multiply(this.z).multiply(t.z).mod(this.curve.q);
return new st(this.curve, this.curve.fromBigInteger(c), this.curve.fromBigInteger(l), f)
}, st.prototype.twice = function() {
if (this.isInfinity()) return this;
if (0 == this.y.toBigInteger().signum()) return this.curve.getInfinity();
var t = new E("3"),
e = this.x.toBigInteger(),
r = this.y.toBigInteger(),
i = r.multiply(this.z),
n = i.multiply(r).mod(this.curve.q),
s = this.curve.a.toBigInteger(),
a = e.square().multiply(t);
E.ZERO.equals(s) || (a = a.add(this.z.square().multiply(s)));
var o = (a = a.mod(this.curve.q)).square().subtract(e.shiftLeft(3).multiply(n)).shiftLeft(1).multiply(i).mod(this.curve.q),
h = a.multiply(t).multiply(e).subtract(n.shiftLeft(1)).shiftLeft(2).multiply(n).subtract(a.square().multiply(a)).mod(this.curve.q),
u = i.square().multiply(i).shiftLeft(3).mod(this.curve.q);
return new st(this.curve, this.curve.fromBigInteger(o), this.curve.fromBigInteger(h), u)
}, st.prototype.multiply = function(t) {
if (this.isInfinity()) return this;
if (0 == t.signum()) return this.curve.getInfinity();
var e, r = t,
i = r.multiply(new E("3")),
n = this.negate(),
s = this,
a = this.curve.q.subtract(t),
o = a.multiply(new E("3")),
h = new st(this.curve, this.x, this.y),
u = h.negate();
for (e = i.bitLength() - 2; e > 0; --e) {
s = s.twice();
var c = i.testBit(e);
c != r.testBit(e) && (s = s.add(c ? this : n))
}
for (e = o.bitLength() - 2; e > 0; --e) {
h = h.twice();
var l = o.testBit(e);
l != a.testBit(e) && (h = h.add(l ? h : u))
}
return s
}, st.prototype.multiplyTwo = function(t, e, r) {
var i;
i = t.bitLength() > r.bitLength() ? t.bitLength() - 1 : r.bitLength() - 1;
for (var n = this.curve.getInfinity(), s = this.add(e); i >= 0;) n = n.twice(), t.testBit(i) ? n = r.testBit(i) ? n.add(s) : n.add(this) : r.testBit(i) && (n = n.add(e)), --i;
return n
}, at.prototype.getQ = function() {
return this.q
}, at.prototype.getA = function() {
return this.a
}, at.prototype.getB = function() {
return this.b
}, at.prototype.equals = function(t) {
return t == this || this.q.equals(t.q) && this.a.equals(t.a) && this.b.equals(t.b)
}, at.prototype.getInfinity = function() {
return this.infinity
}, at.prototype.fromBigInteger = function(t) {
return new nt(this.q, t)
}, at.prototype.decodePointHex = function(t) {
switch (parseInt(t.substr(0, 2), 16)) {
case 0:
return this.infinity;
case 2:
case 3:
return null;
case 4:
case 6:
case 7:
var e = (t.length - 2) / 2,
r = t.substr(2, e),
i = t.substr(e + 2, e);
return new st(this, this.fromBigInteger(new E(r, 16)), this.fromBigInteger(new E(i, 16)));
default:
return null
}
}, nt.prototype.getByteLength = function() {
return Math.floor((this.toBigInteger().bitLength() + 7) / 8)
}, st.prototype.getEncoded = function(t) {
var e = function(t, e) {
var r = t.toByteArrayUnsigned();
if (e < r.length) r = r.slice(r.length - e);
else
for (; e > r.length;) r.unshift(0);
return r
},
r = this.getX().toBigInteger(),
i = this.getY().toBigInteger(),
n = e(r, 32);
return t ? i.isEven() ? n.unshift(2) : n.unshift(3) : (n.unshift(4), n = n.concat(e(i, 32))), n
}, st.decodeFrom = function(t, e) {
e[0];
var r = e.length - 1,
i = e.slice(1, 1 + r / 2),
n = e.slice(1 + r / 2, 1 + r);
i.unshift(0), n.unshift(0);
var s = new E(i),
a = new E(n);
return new st(t, t.fromBigInteger(s), t.fromBigInteger(a))
}, st.decodeFromHex = function(t, e) {
e.substr(0, 2);
var r = e.length - 2,
i = e.substr(2, r / 2),
n = e.substr(2 + r / 2, r / 2),
s = new E(i, 16),
a = new E(n, 16);
return new st(t, t.fromBigInteger(s), t.fromBigInteger(a))
}, st.prototype.add2D = function(t) {
if (this.isInfinity()) return t;
if (t.isInfinity()) return this;
if (this.x.equals(t.x)) return this.y.equals(t.y) ? this.twice() : this.curve.getInfinity();
var e = t.x.subtract(this.x),
r = t.y.subtract(this.y).divide(e),
i = r.square().subtract(this.x).subtract(t.x),
n = r.multiply(this.x.subtract(i)).subtract(this.y);
return new st(this.curve, i, n)
}, st.prototype.twice2D = function() {
if (this.isInfinity()) return this;
if (0 == this.y.toBigInteger().signum()) return this.curve.getInfinity();
var t = this.curve.fromBigInteger(E.valueOf(2)),
e = this.curve.fromBigInteger(E.valueOf(3)),
r = this.x.square().multiply(e).add(this.curve.a).divide(this.y.multiply(t)),
i = r.square().subtract(this.x.multiply(t)),
n = r.multiply(this.x.subtract(i)).subtract(this.y);
return new st(this.curve, i, n)
}, st.prototype.multiply2D = function(t) {
if (this.isInfinity()) return this;
if (0 == t.signum()) return this.curve.getInfinity();
var e, r = t,
i = r.multiply(new E("3")),
n = this.negate(),
s = this;
for (e = i.bitLength() - 2; e > 0; --e) {
s = s.twice();
var a = i.testBit(e);
a != r.testBit(e) && (s = s.add2D(a ? this : n))
}
return s
}, st.prototype.isOnCurve = function() {
var t = this.getX().toBigInteger(),
e = this.getY().toBigInteger(),
r = this.curve.getA().toBigInteger(),
i = this.curve.getB().toBigInteger(),
n = this.curve.getQ(),
s = e.multiply(e).mod(n),
a = t.multiply(t).multiply(t).add(r.multiply(t)).add(i).mod(n);
return s.equals(a)
}, st.prototype.toString = function() {
return "(" + this.getX().toBigInteger().toString() + "," + this.getY().toBigInteger().toString() + ")"
}, st.prototype.validate = function() {
var t = this.curve.getQ();
if (this.isInfinity()) throw new Error("Point is at infinity.");
var e = this.getX().toBigInteger(),
r = this.getY().toBigInteger();
if (e.compareTo(E.ONE) < 0 || e.compareTo(t.subtract(E.ONE)) > 0) throw new Error("x coordinate out of bounds");
if (r.compareTo(E.ONE) < 0 || r.compareTo(t.subtract(E.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(t).isInfinity()) throw new Error("Point is not a scalar multiple of G.");
return !0
};
var ot = function() {
var t = new RegExp('(?:false|true|null|[\\{\\}\\[\\]]|(?:-?\\b(?:0|[1-9][0-9]*)(?:\\.[0-9]+)?(?:[eE][+-]?[0-9]+)?\\b)|(?:"(?:[^\\0-\\x08\\x0a-\\x1f"\\\\]|\\\\(?:["/\\\\bfnrt]|u[0-9A-Fa-f]{4}))*"))', "g"),
e = new RegExp("\\\\(?:([^u])|u(.{4}))", "g"),
r = {
'"': '"',
"/": "/",
"\\": "\\",
b: "\b",
f: "\f",
n: "\n",
r: "\r",
t: "\t"
};
function i(t, e, i) {
return e ? r[e] : String.fromCharCode(parseInt(i, 16))
}
var n = new String(""),
s = Object.hasOwnProperty;
return function(r, a) {
var o, h, u = r.match(t),
c = u[0],
l = !1;
"{" === c ? o = {} : "[" === c ? o = [] : (o = [], l = !0);
for (var f = [o], g = 1 - l, p = u.length; g < p; ++g) {
var d;
switch ((c = u[g]).charCodeAt(0)) {
default: (d = f[0])[h || d.length] = +c,
h = void 0;
break;
case 34:
if (-1 !== (c = c.substring(1, c.length - 1)).indexOf("\\") && (c = c.replace(e, i)), d = f[0], !h) {
if (!(d instanceof Array)) {
h = c || n;
break
}
h = d.length
}d[h] = c,
h = void 0;
break;
case 91:
d = f[0],
f.unshift(d[h || d.length] = []),
h = void 0;
break;
case 93:
f.shift();
break;
case 102:
(d = f[0])[h || d.length] = !1,
h = void 0;
break;
case 110:
(d = f[0])[h || d.length] = null,
h = void 0;
break;
case 116:
(d = f[0])[h || d.length] = !0,
h = void 0;
break;
case 123:
d = f[0],
f.unshift(d[h || d.length] = {}),
h = void 0;
break;
case 125:
f.shift()
}
}
if (l) {
if (1 !== f.length) throw new Error;
o = o[0]
} else if (f.length) throw new Error;
if (a) {
var v = function(t, e) {
var r = t[e];
if (r && "object" == typeof r) {
var i = null;
for (var n in r)
if (s.call(r, n) && r !== t) {
var o = v(r, n);
void 0 !== o ? r[n] = o : (i || (i = []), i.push(n))
}
if (i)
for (var h = i.length; --h >= 0;) delete r[i[h]]
}
return a.call(t, e, r)
};
o = v({
"": o
}, "")
}
return o
}
}();
void 0 !== ht && ht || (ht = {}), void 0 !== ht.asn1 && ht.asn1 || (ht.asn1 = {}), ht.asn1.ASN1Util = new function() {
this.integerToByteHex = function(t) {
var e = t.toString(16);
return e.length % 2 == 1 && (e = "0" + e), e
}, this.bigIntToMinTwosComplementsHex = function(t) {
var e = t.toString(16);
if ("-" != e.substr(0, 1)) e.length % 2 == 1 ? e = "0" + e : e.match(/^[0-7]/) || (e = "00" + e);
else {
var r = e.substr(1).length;
r % 2 == 1 ? r += 1 : e.match(/^[0-7]/) || (r += 2);
for (var i = "", n = 0; n < r; n++) i += "f";
e = new E(i, 16).xor(t).add(E.ONE).toString(16).replace(/^-/, "")
}
return e
}, this.getPEMStringFromHex = function(t, e) {
return It(t, e)
}, this.newObject = function(t) {
var e = ht.asn1,
r = e.ASN1Object,
i = e.DERBoolean,
n = e.DERInteger,
s = e.DERBitString,
a = e.DEROctetString,
o = e.DERNull,
h = e.DERObjectIdentifier,
u = e.DEREnumerated,
c = e.DERUTF8String,
l = e.DERNumericString,
f = e.DERPrintableString,
g = e.DERTeletexString,
p = e.DERIA5String,
d = e.DERUTCTime,
v = e.DERGeneralizedTime,
y = e.DERVisibleString,
m = e.DERBMPString,
S = e.DERSequence,
x = e.DERSet,
E = e.DERTaggedObject,
w = e.ASN1Util.newObject;
if (t instanceof e.ASN1Object) return t;
var b = Object.keys(t);
if (1 != b.length) throw new Error("key of param shall be only one.");
var F = b[0];
if (-1 == ":asn1:bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:visstr:bmpstr:seq:set:tag:".indexOf(":" + F + ":")) throw new Error("undefined key: " + F);
if ("bool" == F) return new i(t[F]);
if ("int" == F) return new n(t[F]);
if ("bitstr" == F) return new s(t[F]);
if ("octstr" == F) return new a(t[F]);
if ("null" == F) return new o(t[F]);
if ("oid" == F) return new h(t[F]);
if ("enum" == F) return new u(t[F]);
if ("utf8str" == F) return new c(t[F]);
if ("numstr" == F) return new l(t[F]);
if ("prnstr" == F) return new f(t[F]);
if ("telstr" == F) return new g(t[F]);
if ("ia5str" == F) return new p(t[F]);
if ("utctime" == F) return new d(t[F]);
if ("gentime" == F) return new v(t[F]);
if ("visstr" == F) return new y(t[F]);
if ("bmpstr" == F) return new m(t[F]);
if ("asn1" == F) return new r(t[F]);
if ("seq" == F) {
for (var A = t[F], D = [], I = 0; I < A.length; I++) {
var C = w(A[I]);
D.push(C)
}
return new S({
array: D
})
}
if ("set" == F) {
for (A = t[F], D = [], I = 0; I < A.length; I++) C = w(A[I]), D.push(C);
return new x({
array: D
})
}
if ("tag" == F) {
var P = t[F];
if ("[object Array]" === Object.prototype.toString.call(P) && 3 == P.length) {
var R = w(P[2]);
return new E({
tag: P[0],
explicit: P[1],
obj: R
})
}
return new E(P)
}
}, this.jsonToASN1HEX = function(t) {
return this.newObject(t).getEncodedHex()
}
}, ht.asn1.ASN1Util.oidHexToInt = function(t) {
for (var e = "", r = parseInt(t.substr(0, 2), 16), i = (e = Math.floor(r / 40) + "." + r % 40, ""), n = 2; n < t.length; n += 2) {
var s = ("00000000" + parseInt(t.substr(n, 2), 16).toString(2)).slice(-8);
i += s.substr(1, 7), "0" == s.substr(0, 1) && (e = e + "." + new E(i, 2).toString(10), i = "")
}
return e
}, ht.asn1.ASN1Util.oidIntToHex = function(t) {
var e = function(t) {
var e = t.toString(16);
return 1 == e.length && (e = "0" + e), e
},
r = function(t) {
var r = "",
i = new E(t, 10).toString(2),
n = 7 - i.length % 7;
7 == n && (n = 0);
for (var s = "", a = 0; a < n; a++) s += "0";
for (i = s + i, a = 0; a < i.length - 1; a += 7) {
var o = i.substr(a, 7);
a != i.length - 7 && (o = "1" + o), r += e(parseInt(o, 2))
}
return r
};
if (!t.match(/^[0-9.]+$/)) throw "malformed oid string: " + t;
var i = "",
n = t.split("."),
s = 40 * parseInt(n[0]) + parseInt(n[1]);
i += e(s), n.splice(0, 2);
for (var a = 0; a < n.length; a++) i += r(n[a]);
return i
}, ht.asn1.ASN1Object = function(t) {
this.params = null, this.getLengthHexFromValue = function() {
if (void 0 === this.hV || null == this.hV) throw new Error("this.hV is null or undefined");
if (this.hV.length % 2 == 1) throw new Error("value hex must be even length: n=" + "".length + ",v=" + this.hV);
var t = this.hV.length / 2,
e = t.toString(16);
if (e.length % 2 == 1 && (e = "0" + e), t < 128) return e;
var r = e.length / 2;
if (r > 15) throw "ASN.1 length too long to represent by 8x: n = " + t.toString(16);
return (128 + r).toString(16) + e
}, this.getEncodedHex = function() {
return (null == this.hTLV || this.isModified) && (this.hV = this.getFreshValueHex(), this.hL = this.getLengthHexFromValue(), this.hTLV = this.hT + this.hL + this.hV, this.isModified = !1), this.hTLV
}, this.getValueHex = function() {
return this.getEncodedHex(), this.hV
}, this.getFreshValueHex = function() {
return ""
}, this.setByParam = function(t) {
this.params = t
}, null != t && null != t.tlv && (this.hTLV = t.tlv, this.isModified = !1)
}, ht.asn1.DERAbstractString = function(t) {
ht.asn1.DERAbstractString.superclass.constructor.call(this), this.getString = function() {
return this.s
}, this.setString = function(t) {
this.hTLV = null, this.isModified = !0, this.s = t, this.hV = xt(this.s).toLowerCase()
}, this.setStringHex = function(t) {
this.hTLV = null, this.isModified = !0, this.s = null, this.hV = t
}, this.getFreshValueHex = function() {
return this.hV
}, void 0 !== t && ("string" == typeof t ? this.setString(t) : void 0 !== t.str ? this.setString(t.str) : void 0 !== t.hex && this.setStringHex(t.hex))
}, zt(ht.asn1.DERAbstractString, ht.asn1.ASN1Object), ht.asn1.DERAbstractTime = function(t) {
ht.asn1.DERAbstractTime.superclass.constructor.call(this), this.localDateToUTC = function(t) {
var e = t.getTime() + 6e4 * t.getTimezoneOffset();
return new Date(e)
}, this.formatDate = function(t, e, r) {
var i = this.zeroPadding,
n = this.localDateToUTC(t),
s = String(n.getFullYear());
"utc" == e && (s = s.substr(2, 2));
var a = s + i(String(n.getMonth() + 1), 2) + i(String(n.getDate()), 2) + i(String(n.getHours()), 2) + i(String(n.getMinutes()), 2) + i(String(n.getSeconds()), 2);
if (!0 === r) {
var o = n.getMilliseconds();
if (0 != o) {
var h = i(String(o), 3);
a = a + "." + (h = h.replace(/[0]+$/, ""))
}
}
return a + "Z"
}, this.zeroPadding = function(t, e) {
return t.length >= e ? t : new Array(e - t.length + 1).join("0") + t
}, this.setByParam = function(t) {
this.hV = null, this.hTLV = null, this.params = t
}, this.getString = function() {}, this.setString = function(t) {
this.hTLV = null, this.isModified = !0, null == this.params && (this.params = {}), this.params.str = t
}, this.setByDate = function(t) {
this.hTLV = null, this.isModified = !0, null == this.params && (this.params = {}), this.params.date = t
}, this.setByDateValue = function(t, e, r, i, n, s) {
var a = new Date(Date.UTC(t, e - 1, r, i, n, s, 0));
this.setByDate(a)
}, this.getFreshValueHex = function() {
return this.hV
}
}, zt(ht.asn1.DERAbstractTime, ht.asn1.ASN1Object), ht.asn1.DERAbstractStructured = function(t) {
ht.asn1.DERAbstractString.superclass.constructor.call(this), this.setByASN1ObjectArray = function(t) {
this.hTLV = null, this.isModified = !0, this.asn1Array = t
}, this.appendASN1Object = function(t) {
this.hTLV = null, this.isModified = !0, this.asn1Array.push(t)
}, this.asn1Array = new Array, void 0 !== t && void 0 !== t.array && (this.asn1Array = t.array)
}, zt(ht.asn1.DERAbstractStructured, ht.asn1.ASN1Object), ht.asn1.DERBoolean = function(t) {
ht.asn1.DERBoolean.superclass.constructor.call(this), this.hT = "01", this.hTLV = 0 == t ? "010100" : "0101ff"
}, zt(ht.asn1.DERBoolean, ht.asn1.ASN1Object), ht.asn1.DERInteger = function(t) {
ht.asn1.DERInteger.superclass.constructor.call(this), this.hT = "02", this.setByBigInteger = function(t) {
this.hTLV = null, this.isModified = !0, this.hV = ht.asn1.ASN1Util.bigIntToMinTwosComplementsHex(t)
}, this.setByInteger = function(t) {
var e = new E(String(t), 10);
this.setByBigInteger(e)
}, this.setValueHex = function(t) {
this.hV = t
}, this.getFreshValueHex = function() {
return this.hV
}, void 0 !== t && (void 0 !== t.bigint ? this.setByBigInteger(t.bigint) : void 0 !== t.int ? this.setByInteger(t.int) : "number" == typeof t ? this.setByInteger(t) : void 0 !== t.hex && this.setValueHex(t.hex))
}, zt(ht.asn1.DERInteger, ht.asn1.ASN1Object), ht.asn1.DERBitString = function(t) {
if (void 0 !== t && void 0 !== t.obj) {
var e = ht.asn1.ASN1Util.newObject(t.obj);
t.hex = "00" + e.getEncodedHex()
}
ht.asn1.DERBitString.superclass.constructor.call(this), this.hT = "03", this.setHexValueIncludingUnusedBits = function(t) {
this.hTLV = null, this.isModified = !0, this.hV = t
}, this.setUnusedBitsAndHexValue = function(t, e) {
if (t < 0 || 7 < t) throw "unused bits shall be from 0 to 7: u = " + t;
var r = "0" + t;
this.hTLV = null, this.isModified = !0, this.hV = r + e
}, this.setByBinaryString = function(t) {
var e = 8 - (t = t.replace(/0+$/, "")).length % 8;
8 == e && (e = 0);
for (var r = 0; r <= e; r++) t += "0";
var i = "";
for (r = 0; r < t.length - 1; r += 8) {
var n = t.substr(r, 8),
s = parseInt(n, 2).toString(16);
1 == s.length && (s = "0" + s), i += s
}
this.hTLV = null, this.isModified = !0, this.hV = "0" + e + i
}, this.setByBooleanArray = function(t) {
for (var e = "", r = 0; r < t.length; r++) 1 == t[r] ? e += "1" : e += "0";
this.setByBinaryString(e)
}, this.newFalseArray = function(t) {
for (var e = new Array(t), r = 0; r < t; r++) e[r] = !1;
return e
}, this.getFreshValueHex = function() {
return this.hV
}, void 0 !== t && ("string" == typeof t && t.toLowerCase().match(/^[0-9a-f]+$/) ? this.setHexValueIncludingUnusedBits(t) : void 0 !== t.hex ? this.setHexValueIncludingUnusedBits(t.hex) : void 0 !== t.bin ? this.setByBinaryString(t.bin) : void 0 !== t.array && this.setByBooleanArray(t.array))
}, zt(ht.asn1.DERBitString, ht.asn1.ASN1Object), ht.asn1.DEROctetString = function(t) {
if (void 0 !== t && void 0 !== t.obj) {
var e = ht.asn1.ASN1Util.newObject(t.obj);
t.hex = e.getEncodedHex()
}
ht.asn1.DEROctetString.superclass.constructor.call(this, t), this.hT = "04"
}, zt(ht.asn1.DEROctetString, ht.asn1.DERAbstractString), ht.asn1.DERNull = function() {
ht.asn1.DERNull.superclass.constructor.call(this), this.hT = "05", this.hTLV = "0500"
}, zt(ht.asn1.DERNull, ht.asn1.ASN1Object), ht.asn1.DERObjectIdentifier = function(t) {
ht.asn1.DERObjectIdentifier.superclass.constructor.call(this), this.hT = "06", this.setValueHex = function(t) {
this.hTLV = null, this.isModified = !0, this.s = null, this.hV = t
}, this.setValueOidString = function(t) {
var e = Mt(t);
if (null == e) throw new Error("malformed oid string: " + t);
this.hTLV = null, this.isModified = !0, this.s = null, this.hV = e
}, this.setValueName = function(t) {
var e = ht.asn1.x509.OID.name2oid(t);
if ("" === e) throw new Error("DERObjectIdentifier oidName undefined: " + t);
this.setValueOidString(e)
}, this.setValueNameOrOid = function(t) {
t.match(/^[0-2].[0-9.]+$/) ? this.setValueOidString(t) : this.setValueName(t)
}, this.getFreshValueHex = function() {
return this.hV
}, this.setByParam = function(t) {
"string" == typeof t ? this.setValueNameOrOid(t) : void 0 !== t.oid ? this.setValueNameOrOid(t.oid) : void 0 !== t.name ? this.setValueNameOrOid(t.name) : void 0 !== t.hex && this.setValueHex(t.hex)
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.DERObjectIdentifier, ht.asn1.ASN1Object), ht.asn1.DEREnumerated = function(t) {
ht.asn1.DEREnumerated.superclass.constructor.call(this), this.hT = "0a", this.setByBigInteger = function(t) {
this.hTLV = null, this.isModified = !0, this.hV = ht.asn1.ASN1Util.bigIntToMinTwosComplementsHex(t)
}, this.setByInteger = function(t) {
var e = new E(String(t), 10);
this.setByBigInteger(e)
}, this.setValueHex = function(t) {
this.hV = t
}, this.getFreshValueHex = function() {
return this.hV
}, void 0 !== t && (void 0 !== t.int ? this.setByInteger(t.int) : "number" == typeof t ? this.setByInteger(t) : void 0 !== t.hex && this.setValueHex(t.hex))
}, zt(ht.asn1.DEREnumerated, ht.asn1.ASN1Object), ht.asn1.DERUTF8String = function(t) {
ht.asn1.DERUTF8String.superclass.constructor.call(this, t), this.hT = "0c"
}, zt(ht.asn1.DERUTF8String, ht.asn1.DERAbstractString), ht.asn1.DERNumericString = function(t) {
ht.asn1.DERNumericString.superclass.constructor.call(this, t), this.hT = "12"
}, zt(ht.asn1.DERNumericString, ht.asn1.DERAbstractString), ht.asn1.DERPrintableString = function(t) {
ht.asn1.DERPrintableString.superclass.constructor.call(this, t), this.hT = "13"
}, zt(ht.asn1.DERPrintableString, ht.asn1.DERAbstractString), ht.asn1.DERTeletexString = function(t) {
ht.asn1.DERTeletexString.superclass.constructor.call(this, t), this.hT = "14"
}, zt(ht.asn1.DERTeletexString, ht.asn1.DERAbstractString), ht.asn1.DERIA5String = function(t) {
ht.asn1.DERIA5String.superclass.constructor.call(this, t), this.hT = "16"
}, zt(ht.asn1.DERIA5String, ht.asn1.DERAbstractString), ht.asn1.DERVisibleString = function(t) {
ht.asn1.DERIA5String.superclass.constructor.call(this, t), this.hT = "1a"
}, zt(ht.asn1.DERVisibleString, ht.asn1.DERAbstractString), ht.asn1.DERBMPString = function(t) {
ht.asn1.DERBMPString.superclass.constructor.call(this, t), this.hT = "1e"
}, zt(ht.asn1.DERBMPString, ht.asn1.DERAbstractString), ht.asn1.DERUTCTime = function(t) {
ht.asn1.DERUTCTime.superclass.constructor.call(this, t), this.hT = "17", this.params = void 0, this.getFreshValueHex = function() {
var t = this.params;
if (null == this.params && (t = {
date: new Date
}), "string" == typeof t) {
if (!t.match(/^[0-9]{12}Z$/) && !t.match(/^[0-9]{12}\.[0-9]+Z$/)) throw new Error("malformed string for GeneralizedTime: " + t);
this.hV = dt(t)
} else if (null != t.str) this.hV = dt(t.str);
else if (null == t.date && 1 == t.millis) {
var e = new Date;
this.hV = dt(this.formatDate(e, "utc", !0))
} else if (null != t.date && t.date instanceof Date) {
var r = !0 === t.millis;
this.hV = dt(this.formatDate(t.date, "utc", r))
} else t instanceof Date && (this.hV = dt(this.formatDate(t, "utc")));
if (null == this.hV) throw new Error("parameter not specified properly for UTCTime");
return this.hV
}, null != t && this.setByParam(t)
}, zt(ht.asn1.DERUTCTime, ht.asn1.DERAbstractTime), ht.asn1.DERGeneralizedTime = function(t) {
ht.asn1.DERGeneralizedTime.superclass.constructor.call(this, t), this.hT = "18", this.params = t, this.getFreshValueHex = function() {
var t = this.params;
if (null == this.params && (t = {
date: new Date
}), "string" == typeof t) {
if (!t.match(/^[0-9]{14}Z$/) && !t.match(/^[0-9]{14}\.[0-9]+Z$/)) throw new Error("malformed string for GeneralizedTime: " + t);
this.hV = dt(t)
} else if (null != t.str) this.hV = dt(t.str);
else if (null == t.date && 1 == t.millis) {
var e = new Date;
this.hV = dt(this.formatDate(e, "gen", !0))
} else if (null != t.date && t.date instanceof Date) {
var r = !0 === t.millis;
this.hV = dt(this.formatDate(t.date, "gen", r))
} else t instanceof Date && (this.hV = dt(this.formatDate(t, "gen")));
if (null == this.hV) throw new Error("parameter not specified properly for GeneralizedTime");
return this.hV
}, null != t && this.setByParam(t)
}, zt(ht.asn1.DERGeneralizedTime, ht.asn1.DERAbstractTime), ht.asn1.DERSequence = function(t) {
ht.asn1.DERSequence.superclass.constructor.call(this, t), this.hT = "30", this.getFreshValueHex = function() {
for (var t = "", e = 0; e < this.asn1Array.length; e++) t += this.asn1Array[e].getEncodedHex();
return this.hV = t, this.hV
}
}, zt(ht.asn1.DERSequence, ht.asn1.DERAbstractStructured), ht.asn1.DERSet = function(t) {
ht.asn1.DERSet.superclass.constructor.call(this, t), this.hT = "31", this.sortFlag = !0, this.getFreshValueHex = function() {
for (var t = new Array, e = 0; e < this.asn1Array.length; e++) {
var r = this.asn1Array[e];
t.push(r.getEncodedHex())
}
return 1 == this.sortFlag && t.sort(), this.hV = t.join(""), this.hV
}, void 0 !== t && void 0 !== t.sortflag && 0 == t.sortflag && (this.sortFlag = !1)
}, zt(ht.asn1.DERSet, ht.asn1.DERAbstractStructured), ht.asn1.DERTaggedObject = function(t) {
ht.asn1.DERTaggedObject.superclass.constructor.call(this);
var e = ht.asn1;
this.hT = "a0", this.hV = "", this.isExplicit = !0, this.asn1Object = null, this.setASN1Object = function(t, e, r) {
this.hT = e, this.isExplicit = t, this.asn1Object = r, this.isExplicit ? (this.hV = this.asn1Object.getEncodedHex(), this.hTLV = null, this.isModified = !0) : (this.hV = null, this.hTLV = r.getEncodedHex(), this.hTLV = this.hTLV.replace(/^../, e), this.isModified = !1)
}, this.getFreshValueHex = function() {
return this.hV
}, this.setByParam = function(t) {
null != t.tag && (this.hT = t.tag), null != t.explicit && (this.isExplicit = t.explicit), null != t.tage && (this.hT = t.tage, this.isExplicit = !0), null != t.tagi && (this.hT = t.tagi, this.isExplicit = !1), null != t.obj && (t.obj instanceof e.ASN1Object ? (this.asn1Object = t.obj, this.setASN1Object(this.isExplicit, this.hT, this.asn1Object)) : "object" == typeof t.obj && (this.asn1Object = e.ASN1Util.newObject(t.obj), this.setASN1Object(this.isExplicit, this.hT, this.asn1Object)))
}, null != t && this.setByParam(t)
}, zt(ht.asn1.DERTaggedObject, ht.asn1.ASN1Object);
var ht, ut, ct, lt = new function() {};
function ft(t) {
for (var e = new Array, r = 0; r < t.length; r++) e[r] = t.charCodeAt(r);
return e
}
function gt(t) {
for (var e = "", r = 0; r < t.length; r++) e += String.fromCharCode(t[r]);
return e
}
function pt(t) {
for (var e = "", r = 0; r < t.length; r++) {
var i = t[r].toString(16);
1 == i.length && (i = "0" + i), e += i
}
return e
}
function dt(t) {
return pt(ft(t))
}
function vt(t) {
return (t = (t = t.replace(/\=/g, "")).replace(/\+/g, "-")).replace(/\//g, "_")
}
function yt(t) {
return t.length % 4 == 2 ? t += "==" : t.length % 4 == 3 && (t += "="), (t = t.replace(/-/g, "+")).replace(/_/g, "/")
}
function mt(t) {
return t.length % 2 == 1 && (t = "0" + t), vt(m(t))
}
function St(t) {
return S(yt(t))
}
function xt(t) {
return Tt(Vt(t))
}
function Et(t) {
return decodeURIComponent(Bt(t))
}
function wt(t) {
for (var e = "", r = 0; r < t.length - 1; r += 2) e += String.fromCharCode(parseInt(t.substr(r, 2), 16));
return e
}
function bt(t) {
for (var e = "", r = 0; r < t.length; r++) e += ("0" + t.charCodeAt(r).toString(16)).slice(-2);
return e
}
function Ft(t) {
return m(t)
}
function At(t) {
var e = Ft(t).replace(/(.{64})/g, "$1\r\n");
return e.replace(/\r\n$/, "")
}
function Dt(t) {
return S(t.replace(/[^0-9A-Za-z\/+=]*/g, ""))
}
function It(t, e) {
return "-----BEGIN " + e + "-----\r\n" + At(t) + "\r\n-----END " + e + "-----\r\n"
}
function Ct(t, e) {
if (-1 == t.indexOf("-----BEGIN ")) throw "can't find PEM header: " + e;
return Dt(t = void 0 !== e ? (t = t.replace(new RegExp("^[^]*-----BEGIN " + e + "-----"), "")).replace(new RegExp("-----END " + e + "-----[^]*$"), "") : (t = t.replace(/^[^]*-----BEGIN [^-]+-----/, "")).replace(/-----END [^-]+-----[^]*$/, ""))
}
function Pt(t) {
var e, r, i, n, s, a, o, h, u, c, l;
if (l = t.match(/^(\d{2}|\d{4})(\d\d)(\d\d)(\d\d)(\d\d)(\d\d)(|\.\d+)Z$/)) return h = l[1], e = parseInt(h), 2 === h.length && (50 <= e && e < 100 ? e = 1900 + e : 0 <= e && e < 50 && (e = 2e3 + e)), r = parseInt(l[2]) - 1, i = parseInt(l[3]), n = parseInt(l[4]), s = parseInt(l[5]), a = parseInt(l[6]), o = 0, "" !== (u = l[7]) && (c = (u.substr(1) + "00").substr(0, 3), o = parseInt(c)), Date.UTC(e, r, i, n, s, a, o);
throw "unsupported zulu format: " + t
}
function Rt(t) {
return ~~(Pt(t) / 1e3)
}
function Tt(t) {
return t.replace(/%/g, "")
}
function Bt(t) {
return t.replace(/(..)/g, "%$1")
}
function Ht(t) {
var e = "malformed IPv6 address";
if (!t.match(/^[0-9A-Fa-f:]+$/)) throw e;
var r = (t = t.toLowerCase()).split(":").length - 1;
if (r < 2) throw e;
var i = ":".repeat(7 - r + 2),
n = (t = t.replace("::", i)).split(":");
if (8 != n.length) throw e;
for (var s = 0; s < 8; s++) n[s] = ("0000" + n[s]).slice(-4);
return n.join("")
}
function Nt(t) {
if (!t.match(/^[0-9A-Fa-f]{32}$/)) throw "malformed IPv6 address octet";
for (var e = (t = t.toLowerCase()).match(/.{1,4}/g), r = 0; r < 8; r++) e[r] = e[r].replace(/^0+/, ""), "" == e[r] && (e[r] = "0");
var i = (t = ":" + e.join(":") + ":").match(/:(0:){2,}/g);
if (null === i) return t.slice(1, -1);
var n = "";
for (r = 0; r < i.length; r++) i[r].length > n.length && (n = i[r]);
return (t = t.replace(n, "::")).slice(1, -1)
}
function Ot(t) {
var e = "malformed hex value";
if (!t.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/)) throw e;
if (8 != t.length) return 32 == t.length ? Nt(t) : t;
try {
return parseInt(t.substr(0, 2), 16) + "." + parseInt(t.substr(2, 2), 16) + "." + parseInt(t.substr(4, 2), 16) + "." + parseInt(t.substr(6, 2), 16)
} catch (r) {
throw e
}
}
function jt(t) {
return t.match(/.{4}/g).map((function(t) {
var e = parseInt(t.substr(0, 2), 16),
r = parseInt(t.substr(2), 16);
if (0 == e & r < 128) return String.fromCharCode(r);
if (e < 8) {
var i = 128 | 63 & r;
return Et((192 | (7 & e) << 3 | (192 & r) >> 6).toString(16) + i.toString(16))
}
i = 128 | (15 & e) << 2 | (192 & r) >> 6;
var n = 128 | 63 & r;
return Et((224 | (240 & e) >> 4).toString(16) + i.toString(16) + n.toString(16))
})).join("")
}
function Vt(t) {
for (var e = encodeURIComponent(t), r = "", i = 0; i < e.length; i++) "%" == e[i] ? (r += e.substr(i, 3), i += 2) : r = r + "%" + dt(e[i]);
return r
}
function Lt(t) {
return !(t.length % 2 != 0 || !t.match(/^[0-9a-f]+$/) && !t.match(/^[0-9A-F]+$/))
}
function Kt(t) {
return t.length % 2 == 1 ? "0" + t : t.substr(0, 1) > "7" ? "00" + t : t
}
function kt(t) {
t = (t = (t = t.replace(/^\s*\[\s*/, "")).replace(/\s*\]\s*$/, "")).replace(/\s*/g, "");
try {
return t.split(/,/).map((function(t, e, r) {
var i = parseInt(t);
if (i < 0 || 255 < i) throw "integer not in range 0-255";
return ("00" + i.toString(16)).slice(-2)
})).join("")
} catch (r) {
throw "malformed integer array string: " + r
}
}
function Mt(t) {
var e = function(t) {
var e = t.toString(16);
return 1 == e.length && (e = "0" + e), e
},
r = function(t) {
var r = "",
i = parseInt(t, 10).toString(2),
n = 7 - i.length % 7;
7 == n && (n = 0);
for (var s = "", a = 0; a < n; a++) s += "0";
for (i = s + i, a = 0; a < i.length - 1; a += 7) {
var o = i.substr(a, 7);
a != i.length - 7 && (o = "1" + o), r += e(parseInt(o, 2))
}
return r
};
try {
if (!t.match(/^[0-9.]+$/)) return null;
var i = "",
n = t.split("."),
s = 40 * parseInt(n[0], 10) + parseInt(n[1], 10);
i += e(s), n.splice(0, 2);
for (var a = 0; a < n.length; a++) i += r(n[a]);
return i
} catch (u) {
return null
}
}
function _t(t) {
if (!Lt(t)) return null;
try {
var e = [],
r = t.substr(0, 2),
i = parseInt(r, 16);
e[0] = new String(Math.floor(i / 40)), e[1] = new String(i % 40);
for (var s = t.substr(2), a = [], o = 0; o < s.length / 2; o++) a.push(parseInt(s.substr(2 * o, 2), 16));
var h = [],
u = "";
for (o = 0; o < a.length; o++) 128 & a[o] ? u += qt((127 & a[o]).toString(2), 7) : (u += qt((127 & a[o]).toString(2), 7), h.push(new String(parseInt(u, 2))), u = "");
var c = e.join(".");
return h.length > 0 && (c = c + "." + h.join(".")), c
} catch (n) {
return null
}
}
lt.getLblen = function(t, e) {
if ("8" != t.substr(e + 2, 1)) return 1;
var r = parseInt(t.substr(e + 3, 1));
return 0 == r ? -1 : 0 < r && r < 10 ? r + 1 : -2
}, lt.getL = function(t, e) {
var r = lt.getLblen(t, e);
return r < 1 ? "" : t.substr(e + 2, 2 * r)
}, lt.getVblen = function(t, e) {
var r;
return "" == (r = lt.getL(t, e)) ? -1 : ("8" === r.substr(0, 1) ? new E(r.substr(2), 16) : new E(r, 16)).intValue()
}, lt.getVidx = function(t, e) {
var r = lt.getLblen(t, e);
return r < 0 ? r : e + 2 * (r + 1)
}, lt.getV = function(t, e) {
var r = lt.getVidx(t, e),
i = lt.getVblen(t, e);
return t.substr(r, 2 * i)
}, lt.getTLV = function(t, e) {
return t.substr(e, 2) + lt.getL(t, e) + lt.getV(t, e)
}, lt.getTLVblen = function(t, e) {
return 2 + 2 * lt.getLblen(t, e) + 2 * lt.getVblen(t, e)
}, lt.getNextSiblingIdx = function(t, e) {
return lt.getVidx(t, e) + 2 * lt.getVblen(t, e)
}, lt.getChildIdx = function(t, e) {
var r, i, n, s = lt,
a = [];
r = s.getVidx(t, e), i = 2 * s.getVblen(t, e), "03" == t.substr(e, 2) && (r += 2, i -= 2), n = 0;
for (var o = r; n <= i;) {
var h = s.getTLVblen(t, o);
if ((n += h) <= i && a.push(o), o += h, n >= i) break
}
return a
}, lt.getNthChildIdx = function(t, e, r) {
return lt.getChildIdx(t, e)[r]
}, lt.getIdxbyList = function(t, e, r, i) {
var n, s, a = lt;
return 0 == r.length ? void 0 !== i && t.substr(e, 2) !== i ? -1 : e : (n = r.shift()) >= (s = a.getChildIdx(t, e)).length ? -1 : a.getIdxbyList(t, s[n], r, i)
}, lt.getIdxbyListEx = function(t, e, r, i) {
var n, s, a = lt;
if (0 == r.length) return void 0 !== i && t.substr(e, 2) !== i ? -1 : e;
n = r.shift(), s = a.getChildIdx(t, e);
for (var o = 0, h = 0; h < s.length; h++) {
var u = t.substr(s[h], 2);
if ("number" == typeof n && !a.isContextTag(u) && o == n || "string" == typeof n && a.isContextTag(u, n)) return a.getIdxbyListEx(t, s[h], r, i);
a.isContextTag(u) || o++
}
return -1
}, lt.getTLVbyList = function(t, e, r, i) {
var n = lt,
s = n.getIdxbyList(t, e, r, i);
return -1 == s || s >= t.length ? null : n.getTLV(t, s)
}, lt.getTLVbyListEx = function(t, e, r, i) {
var n = lt,
s = n.getIdxbyListEx(t, e, r, i);
return -1 == s ? null : n.getTLV(t, s)
}, lt.getVbyList = function(t, e, r, i, n) {
var s, a, o = lt;
return -1 == (s = o.getIdxbyList(t, e, r, i)) || s >= t.length ? null : (a = o.getV(t, s), !0 === n && (a = a.substr(2)), a)
}, lt.getVbyListEx = function(t, e, r, i, n) {
var s, a, o = lt;
return -1 == (s = o.getIdxbyListEx(t, e, r, i)) ? null : (a = o.getV(t, s), "03" == t.substr(s, 2) && !1 !== n && (a = a.substr(2)), a)
}, lt.getInt = function(t, e, r) {
null == r && (r = -1);
try {
var i = t.substr(e, 2);
if ("02" != i && "03" != i) return r;
var n = lt.getV(t, e);
return "02" == i ? parseInt(n, 16) : Ut(n)
} catch (h) {
return r
}
}, lt.getOID = function(t, e, r) {
null == r && (r = null);
try {
return "06" != t.substr(e, 2) ? r : _t(lt.getV(t, e))
} catch (i) {
return r
}
}, lt.getOIDName = function(t, e, r) {
null == r && (r = null);
try {
var i = lt.getOID(t, e, r);
if (i == r) return r;
var n = ht.asn1.x509.OID.oid2name(i);
return "" == n ? i : n
} catch (u) {
return r
}
}, lt.getString = function(t, e, r) {
null == r && (r = null);
try {
return wt(lt.getV(t, e))
} catch (u) {
return r
}
}, lt.hextooidstr = function(t) {
var e = function(t, e) {
return t.length >= e ? t : new Array(e - t.length + 1).join("0") + t
},
r = [],
i = t.substr(0, 2),
n = parseInt(i, 16);
r[0] = new String(Math.floor(n / 40)), r[1] = new String(n % 40);
for (var s = t.substr(2), a = [], o = 0; o < s.length / 2; o++) a.push(parseInt(s.substr(2 * o, 2), 16));
var h = [],
u = "";
for (o = 0; o < a.length; o++) 128 & a[o] ? u += e((127 & a[o]).toString(2), 7) : (u += e((127 & a[o]).toString(2), 7), h.push(new String(parseInt(u, 2))), u = "");
var c = r.join(".");
return h.length > 0 && (c = c + "." + h.join(".")), c
}, lt.dump = function(t, e, r, i) {
var n = lt,
s = n.getV,
a = n.dump,
o = n.getChildIdx,
h = t;
t instanceof ht.asn1.ASN1Object && (h = t.getEncodedHex());
var u = function(t, e) {
return t.length <= 2 * e ? t : t.substr(0, e) + "..(total " + t.length / 2 + "bytes).." + t.substr(t.length - e, e)
};
void 0 === e && (e = {
ommit_long_octet: 32
}), void 0 === r && (r = 0), void 0 === i && (i = "");
var c, l = e.ommit_long_octet;
if ("01" == (c = h.substr(r, 2))) return "00" == (f = s(h, r)) ? i + "BOOLEAN FALSE\n" : i + "BOOLEAN TRUE\n";
if ("02" == c) return i + "INTEGER " + u(f = s(h, r), l) + "\n";
if ("03" == c) {
var f = s(h, r);
return n.isASN1HEX(f.substr(2)) ? (E = i + "BITSTRING, encapsulates\n") + a(f.substr(2), e, 0, i + " ") : i + "BITSTRING " + u(f, l) + "\n"
}
if ("04" == c) return f = s(h, r), n.isASN1HEX(f) ? (E = i + "OCTETSTRING, encapsulates\n") + a(f, e, 0, i + " ") : i + "OCTETSTRING " + u(f, l) + "\n";
if ("05" == c) return i + "NULL\n";
if ("06" == c) {
var g = s(h, r),
p = ht.asn1.ASN1Util.oidHexToInt(g),
d = ht.asn1.x509.OID.oid2name(p),
v = p.replace(/\./g, " ");
return "" != d ? i + "ObjectIdentifier " + d + " (" + v + ")\n" : i + "ObjectIdentifier (" + v + ")\n"
}
if ("0a" == c) return i + "ENUMERATED " + parseInt(s(h, r)) + "\n";
if ("0c" == c) return i + "UTF8String '" + Et(s(h, r)) + "'\n";
if ("13" == c) return i + "PrintableString '" + Et(s(h, r)) + "'\n";
if ("14" == c) return i + "TeletexString '" + Et(s(h, r)) + "'\n";
if ("16" == c) return i + "IA5String '" + Et(s(h, r)) + "'\n";
if ("17" == c) return i + "UTCTime " + Et(s(h, r)) + "\n";
if ("18" == c) return i + "GeneralizedTime " + Et(s(h, r)) + "\n";
if ("1a" == c) return i + "VisualString '" + Et(s(h, r)) + "'\n";
if ("1e" == c) return i + "BMPString '" + jt(s(h, r)) + "'\n";
if ("30" == c) {
if ("3000" == h.substr(r, 4)) return i + "SEQUENCE {}\n";
E = i + "SEQUENCE\n";
var y = e;
if ((2 == (x = o(h, r)).length || 3 == x.length) && "06" == h.substr(x[0], 2) && "04" == h.substr(x[x.length - 1], 2)) {
d = n.oidname(s(h, x[0]));
var m = JSON.parse(JSON.stringify(e));
m.x509ExtName = d, y = m
}
for (var S = 0; S < x.length; S++) E += a(h, y, x[S], i + " ");
return E
}
if ("31" == c) {
E = i + "SET\n";
var x = o(h, r);
for (S = 0; S < x.length; S++) E += a(h, e, x[S], i + " ");
return E
}
if (0 != (128 & (c = parseInt(c, 16)))) {
var E, w = 31 & c;
if (0 != (32 & c)) {
for (E = i + "[" + w + "]\n", x = o(h, r), S = 0; S < x.length; S++) E += a(h, e, x[S], i + " ");
return E
}
return f = s(h, r), lt.isASN1HEX(f) ? (E = i + "[" + w + "]\n") + a(f, e, 0, i + " ") : (("68747470" == f.substr(0, 8) || "subjectAltName" === e.x509ExtName && 2 == w) && (f = Et(f)), i + "[" + w + "] " + f + "\n")
}
return i + "UNKNOWN(" + c + ") " + s(h, r) + "\n"
}, lt.isContextTag = function(t, e) {
var r, i;
t = t.toLowerCase();
try {
r = parseInt(t, 16)
} catch (h) {
return -1
}
if (void 0 === e) return 128 == (192 & r);
try {
return null != e.match(/^\[[0-9]+\]$/) && !((i = parseInt(e.substr(1, e.length - 1), 10)) > 31) && 128 == (192 & r) && (31 & r) == i
} catch (h) {
return !1
}
}, lt.isASN1HEX = function(t) {
var e = lt;
if (t.length % 2 == 1) return !1;
var r = e.getVblen(t, 0),
i = t.substr(0, 2),
n = e.getL(t, 0);
return t.length - i.length - n.length == 2 * r
}, lt.checkStrictDER = function(t, e, r, i, n) {
var s = lt;
if (void 0 === r) {
if ("string" != typeof t) throw new Error("not hex string");
if (t = t.toLowerCase(), !ht.lang.String.isHex(t)) throw new Error("not hex string");
r = t.length, n = (i = t.length / 2) < 128 ? 1 : Math.ceil(i.toString(16)) + 1
}
if (s.getL(t, e).length > 2 * n) throw new Error("L of TLV too long: idx=" + e);
var a = s.getVblen(t, e);
if (a > i) throw new Error("value of L too long than hex: idx=" + e);
var o = s.getTLV(t, e),
h = o.length - 2 - s.getL(t, e).length;
if (h !== 2 * a) throw new Error("V string length and L's value not the same:" + h + "/" + 2 * a);
if (0 === e && t.length != o.length) throw new Error("total length and TLV length unmatch:" + t.length + "!=" + o.length);
var u = t.substr(e, 2);
if ("02" === u) {
var c = s.getVidx(t, e);
if ("00" == t.substr(c, 2) && t.charCodeAt(c + 2) < 56) throw new Error("not least zeros for DER INTEGER")
}
if (32 & parseInt(u, 16)) {
for (var l = s.getVblen(t, e), f = 0, g = s.getChildIdx(t, e), p = 0; p < g.length; p++) f += s.getTLV(t, g[p]).length, s.checkStrictDER(t, g[p], r, i, n);
if (2 * l != f) throw new Error("sum of children's TLV length and L unmatch: " + 2 * l + "!=" + f)
}
}, lt.oidname = function(t) {
var e = ht.asn1;
ht.lang.String.isHex(t) && (t = e.ASN1Util.oidHexToInt(t));
var r = e.x509.OID.oid2name(t);
return "" === r && (r = t), r
}, void 0 !== ht && ht || (ht = {}), void 0 !== ht.asn1 && ht.asn1 || (ht.asn1 = {}), void 0 !== ht.asn1.x509 && ht.asn1.x509 || (ht.asn1.x509 = {}), ht.asn1.x509.Certificate = function(t) {
ht.asn1.x509.Certificate.superclass.constructor.call(this);
var e = ht.asn1,
r = e.DERBitString,
i = e.DERSequence,
n = e.x509,
s = n.TBSCertificate,
a = n.AlgorithmIdentifier;
this.params = void 0, this.setByParam = function(t) {
this.params = t
}, this.sign = function() {
var t = this.params,
e = t.sigalg;
null != t.sigalg.name && (e = t.sigalg.name);
var r = t.tbsobj.getEncodedHex(),
i = new ht.crypto.Signature({
alg: e
});
i.init(t.cakey), i.updateHex(r), t.sighex = i.sign()
}, this.getPEM = function() {
return It(this.getEncodedHex(), "CERTIFICATE")
}, this.getEncodedHex = function() {
var t = this.params;
if (null != t.tbsobj && null != t.tbsobj || (t.tbsobj = new s(t)), null == t.sighex && null != t.cakey && this.sign(), null == t.sighex) throw new Error("sighex or cakey parameter not defined");
var e = [];
return e.push(t.tbsobj), e.push(new a({
name: t.sigalg
})), e.push(new r({
hex: "00" + t.sighex
})), new i({
array: e
}).getEncodedHex()
}, null != t && (this.params = t)
}, zt(ht.asn1.x509.Certificate, ht.asn1.ASN1Object), ht.asn1.x509.TBSCertificate = function(t) {
ht.asn1.x509.TBSCertificate.superclass.constructor.call(this);
var e = ht.asn1,
r = e.x509,
i = e.DERTaggedObject,
n = e.DERInteger,
s = e.DERSequence,
a = r.AlgorithmIdentifier,
o = r.Time,
h = r.X500Name,
u = r.Extensions,
c = r.SubjectPublicKeyInfo;
this.params = null, this.setByParam = function(t) {
this.params = t
}, this.getEncodedHex = function() {
var t = [],
e = this.params;
if (null != e.version || 1 != e.version) {
var r = 2;
null != e.version && (r = e.version - 1);
var l = new i({
obj: new n({
int: r
})
});
t.push(l)
}
return t.push(new n(e.serial)), t.push(new a({
name: e.sigalg
})), t.push(new h(e.issuer)), t.push(new s({
array: [new o(e.notbefore), new o(e.notafter)]
})), t.push(new h(e.subject)), t.push(new c(Gt.getKey(e.sbjpubkey))), void 0 !== e.ext && e.ext.length > 0 && t.push(new i({
tag: "a3",
obj: new u(e.ext)
})), new ht.asn1.DERSequence({
array: t
}).getEncodedHex()
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.x509.TBSCertificate, ht.asn1.ASN1Object), ht.asn1.x509.Extensions = function(t) {
ht.asn1.x509.Extensions.superclass.constructor.call(this);
var e = ht.asn1,
r = e.DERSequence,
i = e.x509;
this.aParam = [], this.setByParam = function(t) {
this.aParam = t
}, this.getEncodedHex = function() {
for (var t = [], e = 0; e < this.aParam.length; e++) {
var n = this.aParam[e],
s = n.extname,
a = null;
if (null != n.extn) a = new i.PrivateExtension(n);
else if ("subjectKeyIdentifier" == s) a = new i.SubjectKeyIdentifier(n);
else if ("keyUsage" == s) a = new i.KeyUsage(n);
else if ("subjectAltName" == s) a = new i.SubjectAltName(n);
else if ("issuerAltName" == s) a = new i.IssuerAltName(n);
else if ("basicConstraints" == s) a = new i.BasicConstraints(n);
else if ("cRLDistributionPoints" == s) a = new i.CRLDistributionPoints(n);
else if ("certificatePolicies" == s) a = new i.CertificatePolicies(n);
else if ("authorityKeyIdentifier" == s) a = new i.AuthorityKeyIdentifier(n);
else if ("extKeyUsage" == s) a = new i.ExtKeyUsage(n);
else if ("authorityInfoAccess" == s) a = new i.AuthorityInfoAccess(n);
else if ("cRLNumber" == s) a = new i.CRLNumber(n);
else if ("cRLReason" == s) a = new i.CRLReason(n);
else if ("ocspNonce" == s) a = new i.OCSPNonce(n);
else if ("ocspNoCheck" == s) a = new i.OCSPNoCheck(n);
else if ("adobeTimeStamp" == s) a = new i.AdobeTimeStamp(n);
else {
if ("subjectDirectoryAttributes" != s) throw new Error("extension not supported:" + JSON.stringify(n));
a = new i.SubjectDirectoryAttributes(n)
}
null != a && t.push(a)
}
return new r({
array: t
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.x509.Extensions, ht.asn1.ASN1Object), ht.asn1.x509.Extension = function(t) {
ht.asn1.x509.Extension.superclass.constructor.call(this);
var e = ht.asn1,
r = e.DERObjectIdentifier,
i = e.DEROctetString,
n = (e.DERBitString, e.DERBoolean),
s = e.DERSequence;
this.getEncodedHex = function() {
var t = new r({
oid: this.oid
}),
e = new i({
hex: this.getExtnValueHex()
}),
a = new Array;
return a.push(t), this.critical && a.push(new n), a.push(e), new s({
array: a
}).getEncodedHex()
}, this.critical = !1, void 0 !== t && void 0 !== t.critical && (this.critical = t.critical)
}, zt(ht.asn1.x509.Extension, ht.asn1.ASN1Object), ht.asn1.x509.KeyUsage = function(t) {
ht.asn1.x509.KeyUsage.superclass.constructor.call(this, t);
var e = $t.KEYUSAGE_NAME;
if (this.getExtnValueHex = function() {
return this.asn1ExtnValue.getEncodedHex()
}, this.oid = "2.5.29.15", void 0 !== t && (void 0 !== t.bin && (this.asn1ExtnValue = new ht.asn1.DERBitString(t)), void 0 !== t.names && void 0 !== t.names.length)) {
for (var r = t.names, i = "000000000", n = 0; n < r.length; n++)
for (var s = 0; s < e.length; s++) r[n] === e[s] && (i = i.substring(0, s) + "1" + i.substring(s + 1, i.length));
this.asn1ExtnValue = new ht.asn1.DERBitString({
bin: i
})
}
}, zt(ht.asn1.x509.KeyUsage, ht.asn1.x509.Extension), ht.asn1.x509.BasicConstraints = function(t) {
ht.asn1.x509.BasicConstraints.superclass.constructor.call(this, t);
var e = ht.asn1,
r = e.DERBoolean,
i = e.DERInteger,
n = e.DERSequence;
this.getExtnValueHex = function() {
var t = new Array;
this.cA && t.push(new r), this.pathLen > -1 && t.push(new i({
int: this.pathLen
}));
var e = new n({
array: t
});
return this.asn1ExtnValue = e, this.asn1ExtnValue.getEncodedHex()
}, this.oid = "2.5.29.19", this.cA = !1, this.pathLen = -1, void 0 !== t && (void 0 !== t.cA && (this.cA = t.cA), void 0 !== t.pathLen && (this.pathLen = t.pathLen))
}, zt(ht.asn1.x509.BasicConstraints, ht.asn1.x509.Extension), ht.asn1.x509.CRLDistributionPoints = function(t) {
ht.asn1.x509.CRLDistributionPoints.superclass.constructor.call(this, t);
var e = ht.asn1,
r = e.x509;
this.getExtnValueHex = function() {
return this.asn1ExtnValue.getEncodedHex()
}, this.setByDPArray = function(t) {
for (var i = [], n = 0; n < t.length; n++)
if (t[n] instanceof ht.asn1.ASN1Object) i.push(t[n]);
else {
var s = new r.DistributionPoint(t[n]);
i.push(s)
}
this.asn1ExtnValue = new e.DERSequence({
array: i
})
}, this.setByOneURI = function(t) {
var e = new r.DistributionPoint({
fulluri: t
});
this.setByDPArray([e])
}, this.oid = "2.5.29.31", void 0 !== t && (void 0 !== t.array ? this.setByDPArray(t.array) : void 0 !== t.uri && this.setByOneURI(t.uri))
}, zt(ht.asn1.x509.CRLDistributionPoints, ht.asn1.x509.Extension), ht.asn1.x509.DistributionPoint = function(t) {
ht.asn1.x509.DistributionPoint.superclass.constructor.call(this);
var e = ht.asn1,
r = e.x509.DistributionPointName;
this.getEncodedHex = function() {
var t = new e.DERSequence;
if (null != this.asn1DP) {
var r = new e.DERTaggedObject({
explicit: !0,
tag: "a0",
obj: this.asn1DP
});
t.appendASN1Object(r)
}
return this.hTLV = t.getEncodedHex(), this.hTLV
}, void 0 !== t && (void 0 !== t.dpobj ? this.asn1DP = t.dpobj : void 0 !== t.dpname ? this.asn1DP = new r(t.dpname) : void 0 !== t.fulluri && (this.asn1DP = new r({
full: [{
uri: t.fulluri
}]
})))
}, zt(ht.asn1.x509.DistributionPoint, ht.asn1.ASN1Object), ht.asn1.x509.DistributionPointName = function(t) {
ht.asn1.x509.DistributionPointName.superclass.constructor.call(this);
var e = ht.asn1,
r = e.DERTaggedObject;
if (this.getEncodedHex = function() {
if ("full" != this.type) throw new Error("currently type shall be 'full': " + this.type);
return this.asn1Obj = new r({
explicit: !1,
tag: this.tag,
obj: this.asn1V
}), this.hTLV = this.asn1Obj.getEncodedHex(), this.hTLV
}, void 0 !== t)
if (e.x509.GeneralNames.prototype.isPrototypeOf(t)) this.type = "full", this.tag = "a0", this.asn1V = t;
else {
if (void 0 === t.full) throw new Error("This class supports GeneralNames only as argument");
this.type = "full", this.tag = "a0", this.asn1V = new e.x509.GeneralNames(t.full)
}
}, zt(ht.asn1.x509.DistributionPointName, ht.asn1.ASN1Object), ht.asn1.x509.CertificatePolicies = function(t) {
ht.asn1.x509.CertificatePolicies.superclass.constructor.call(this, t);
var e = ht.asn1,
r = e.x509,
i = e.DERSequence,
n = r.PolicyInformation;
this.params = null, this.getExtnValueHex = function() {
for (var t = [], e = 0; e < this.params.array.length; e++) t.push(new n(this.params.array[e]));
var r = new i({
array: t
});
return this.asn1ExtnValue = r, this.asn1ExtnValue.getEncodedHex()
}, this.oid = "2.5.29.32", void 0 !== t && (this.params = t)
}, zt(ht.asn1.x509.CertificatePolicies, ht.asn1.x509.Extension), ht.asn1.x509.PolicyInformation = function(t) {
ht.asn1.x509.PolicyInformation.superclass.constructor.call(this, t);
var e = ht.asn1,
r = e.DERSequence,
i = e.DERObjectIdentifier,
n = e.x509.PolicyQualifierInfo;
this.params = null, this.getEncodedHex = function() {
if (void 0 === this.params.policyoid && void 0 === this.params.array) throw new Error("parameter oid and array missing");
var t = [new i(this.params.policyoid)];
if (void 0 !== this.params.array) {
for (var e = [], s = 0; s < this.params.array.length; s++) e.push(new n(this.params.array[s]));
e.length > 0 && t.push(new r({
array: e
}))
}
return new r({
array: t
}).getEncodedHex()
}, void 0 !== t && (this.params = t)
}, zt(ht.asn1.x509.PolicyInformation, ht.asn1.ASN1Object), ht.asn1.x509.PolicyQualifierInfo = function(t) {
ht.asn1.x509.PolicyQualifierInfo.superclass.constructor.call(this, t);
var e = ht.asn1,
r = e.DERSequence,
i = e.DERIA5String,
n = e.DERObjectIdentifier,
s = e.x509.UserNotice;
this.params = null, this.getEncodedHex = function() {
return void 0 !== this.params.cps ? new r({
array: [new n({
oid: "1.3.6.1.5.5.7.2.1"
}), new i({
str: this.params.cps
})]
}).getEncodedHex() : null != this.params.unotice ? new r({
array: [new n({
oid: "1.3.6.1.5.5.7.2.2"
}), new s(this.params.unotice)]
}).getEncodedHex() : void 0
}, void 0 !== t && (this.params = t)
}, zt(ht.asn1.x509.PolicyQualifierInfo, ht.asn1.ASN1Object), ht.asn1.x509.UserNotice = function(t) {
ht.asn1.x509.UserNotice.superclass.constructor.call(this, t);
var e = ht.asn1.DERSequence,
r = (ht.asn1.DERInteger, ht.asn1.x509.DisplayText),
i = ht.asn1.x509.NoticeReference;
this.params = null, this.getEncodedHex = function() {
var t = [];
return void 0 !== this.params.noticeref && t.push(new i(this.params.noticeref)), void 0 !== this.params.exptext && t.push(new r(this.params.exptext)), new e({
array: t
}).getEncodedHex()
}, void 0 !== t && (this.params = t)
}, zt(ht.asn1.x509.UserNotice, ht.asn1.ASN1Object), ht.asn1.x509.NoticeReference = function(t) {
ht.asn1.x509.NoticeReference.superclass.constructor.call(this, t);
var e = ht.asn1.DERSequence,
r = ht.asn1.DERInteger,
i = ht.asn1.x509.DisplayText;
this.params = null, this.getEncodedHex = function() {
var t = [];
if (void 0 !== this.params.org && t.push(new i(this.params.org)), void 0 !== this.params.noticenum) {
for (var n = [], s = this.params.noticenum, a = 0; a < s.length; a++) n.push(new r(s[a]));
t.push(new e({
array: n
}))
}
if (0 == t.length) throw new Error("parameter is empty");
return new e({
array: t
}).getEncodedHex()
}, void 0 !== t && (this.params = t)
}, zt(ht.asn1.x509.NoticeReference, ht.asn1.ASN1Object), ht.asn1.x509.DisplayText = function(t) {
ht.asn1.x509.DisplayText.superclass.constructor.call(this, t), this.hT = "0c", void 0 !== t && ("ia5" === t.type ? this.hT = "16" : "vis" === t.type ? this.hT = "1a" : "bmp" === t.type && (this.hT = "1e"))
}, zt(ht.asn1.x509.DisplayText, ht.asn1.DERAbstractString), ht.asn1.x509.ExtKeyUsage = function(t) {
ht.asn1.x509.ExtKeyUsage.superclass.constructor.call(this, t);
var e = ht.asn1;
this.setPurposeArray = function(t) {
this.asn1ExtnValue = new e.DERSequence;
for (var r = 0; r < t.length; r++) {
var i = new e.DERObjectIdentifier(t[r]);
this.asn1ExtnValue.appendASN1Object(i)
}
}, this.getExtnValueHex = function() {
return this.asn1ExtnValue.getEncodedHex()
}, this.oid = "2.5.29.37", void 0 !== t && void 0 !== t.array && this.setPurposeArray(t.array)
}, zt(ht.asn1.x509.ExtKeyUsage, ht.asn1.x509.Extension), ht.asn1.x509.AuthorityKeyIdentifier = function(t) {
ht.asn1.x509.AuthorityKeyIdentifier.superclass.constructor.call(this, t);
var e = ht,
r = e.asn1,
i = r.DERTaggedObject,
n = r.x509.GeneralNames;
e.crypto.Util.isKey, this.asn1KID = null, this.asn1CertIssuer = null, this.asn1CertSN = null, this.getExtnValueHex = function() {
var t = new Array;
this.asn1KID && t.push(new i({
explicit: !1,
tag: "80",
obj: this.asn1KID
})), this.asn1CertIssuer && t.push(new i({
explicit: !1,
tag: "a1",
obj: new n([{
dn: this.asn1CertIssuer
}])
})), this.asn1CertSN && t.push(new i({
explicit: !1,
tag: "82",
obj: this.asn1CertSN
}));
var e = new r.DERSequence({
array: t
});
return this.asn1ExtnValue = e, this.asn1ExtnValue.getEncodedHex()
}, this.setKIDByParam = function(t) {
if (void 0 !== t.str || void 0 !== t.hex) this.asn1KID = new ht.asn1.DEROctetString(t);
else if ("object" == typeof t && ht.crypto.Util.isKey(t) || "string" == typeof t && -1 != t.indexOf("BEGIN ")) {
var e = t;
"string" == typeof t && (e = Gt.getKey(t));
var r = Gt.getKeyID(e);
this.asn1KID = new ht.asn1.DEROctetString({
hex: r
})
}
}, this.setCertIssuerByParam = function(t) {
void 0 !== t.str || void 0 !== t.ldapstr || void 0 !== t.hex || void 0 !== t.certsubject || void 0 !== t.certissuer ? this.asn1CertIssuer = new ht.asn1.x509.X500Name(t) : "string" == typeof t && -1 != t.indexOf("BEGIN ") && -1 != t.indexOf("CERTIFICATE") && (this.asn1CertIssuer = new ht.asn1.x509.X500Name({
certissuer: t
}))
}, this.setCertSNByParam = function(t) {
if (void 0 !== t.str || void 0 !== t.bigint || void 0 !== t.hex) this.asn1CertSN = new ht.asn1.DERInteger(t);
else if ("string" == typeof t && -1 != t.indexOf("BEGIN ") && t.indexOf("CERTIFICATE")) {
var e = new $t;
e.readCertPEM(t);
var r = e.getSerialNumberHex();
this.asn1CertSN = new ht.asn1.DERInteger({
hex: r
})
}
}, this.oid = "2.5.29.35", void 0 !== t && (void 0 !== t.kid && this.setKIDByParam(t.kid), void 0 !== t.issuer && this.setCertIssuerByParam(t.issuer), void 0 !== t.sn && this.setCertSNByParam(t.sn), void 0 !== t.issuersn && "string" == typeof t.issuersn && -1 != t.issuersn.indexOf("BEGIN ") && t.issuersn.indexOf("CERTIFICATE") && (this.setCertSNByParam(t.issuersn), this.setCertIssuerByParam(t.issuersn)))
}, zt(ht.asn1.x509.AuthorityKeyIdentifier, ht.asn1.x509.Extension), ht.asn1.x509.SubjectKeyIdentifier = function(t) {
ht.asn1.x509.SubjectKeyIdentifier.superclass.constructor.call(this, t);
var e = ht.asn1.DEROctetString;
this.asn1KID = null, this.getExtnValueHex = function() {
return this.asn1ExtnValue = this.asn1KID, this.asn1ExtnValue.getEncodedHex()
}, this.setKIDByParam = function(t) {
if (void 0 !== t.str || void 0 !== t.hex) this.asn1KID = new e(t);
else if ("object" == typeof t && ht.crypto.Util.isKey(t) || "string" == typeof t && -1 != t.indexOf("BEGIN")) {
var r = t;
"string" == typeof t && (r = Gt.getKey(t));
var i = Gt.getKeyID(r);
this.asn1KID = new ht.asn1.DEROctetString({
hex: i
})
}
}, this.oid = "2.5.29.14", void 0 !== t && void 0 !== t.kid && this.setKIDByParam(t.kid)
}, zt(ht.asn1.x509.SubjectKeyIdentifier, ht.asn1.x509.Extension), ht.asn1.x509.AuthorityInfoAccess = function(t) {
ht.asn1.x509.AuthorityInfoAccess.superclass.constructor.call(this, t), this.setAccessDescriptionArray = function(t) {
for (var e = new Array, r = ht.asn1, i = r.DERSequence, n = r.DERObjectIdentifier, s = r.x509.GeneralName, a = 0; a < t.length; a++) {
var o, h = t[a];
if (void 0 !== h.ocsp) o = new i({
array: [new n({
oid: "1.3.6.1.5.5.7.48.1"
}), new s({
uri: h.ocsp
})]
});
else {
if (void 0 === h.caissuer) throw new Error("unknown AccessMethod parameter: " + JSON.stringify(h));
o = new i({
array: [new n({
oid: "1.3.6.1.5.5.7.48.2"
}), new s({
uri: h.caissuer
})]
})
}
e.push(o)
}
this.asn1ExtnValue = new i({
array: e
})
}, this.getExtnValueHex = function() {
return this.asn1ExtnValue.getEncodedHex()
}, this.oid = "1.3.6.1.5.5.7.1.1", void 0 !== t && void 0 !== t.array && this.setAccessDescriptionArray(t.array)
}, zt(ht.asn1.x509.AuthorityInfoAccess, ht.asn1.x509.Extension), ht.asn1.x509.SubjectAltName = function(t) {
ht.asn1.x509.SubjectAltName.superclass.constructor.call(this, t), this.setNameArray = function(t) {
this.asn1ExtnValue = new ht.asn1.x509.GeneralNames(t)
}, this.getExtnValueHex = function() {
return this.asn1ExtnValue.getEncodedHex()
}, this.oid = "2.5.29.17", void 0 !== t && void 0 !== t.array && this.setNameArray(t.array)
}, zt(ht.asn1.x509.SubjectAltName, ht.asn1.x509.Extension), ht.asn1.x509.IssuerAltName = function(t) {
ht.asn1.x509.IssuerAltName.superclass.constructor.call(this, t), this.setNameArray = function(t) {
this.asn1ExtnValue = new ht.asn1.x509.GeneralNames(t)
}, this.getExtnValueHex = function() {
return this.asn1ExtnValue.getEncodedHex()
}, this.oid = "2.5.29.18", void 0 !== t && void 0 !== t.array && this.setNameArray(t.array)
}, zt(ht.asn1.x509.IssuerAltName, ht.asn1.x509.Extension), ht.asn1.x509.SubjectDirectoryAttributes = function(t) {
ht.asn1.x509.SubjectDirectoryAttributes.superclass.constructor.call(this, t);
var e = ht.asn1,
r = e.DERSequence,
i = e.ASN1Util.newObject,
n = e.x509.OID.name2oid;
this.params = null, this.getExtnValueHex = function() {
for (var t = [], e = 0; e < this.params.array.length; e++) {
var s = this.params.array[e],
a = {
seq: [{
oid: "1.2.3.4"
}, {
set: [{
utf8str: "DE"
}]
}]
};
if ("dateOfBirth" == s.attr) a.seq[0].oid = n(s.attr), a.seq[1].set[0] = {
gentime: s.str
};
else if ("placeOfBirth" == s.attr) a.seq[0].oid = n(s.attr), a.seq[1].set[0] = {
utf8str: s.str
};
else if ("gender" == s.attr) a.seq[0].oid = n(s.attr), a.seq[1].set[0] = {
prnstr: s.str
};
else if ("countryOfCitizenship" == s.attr) a.seq[0].oid = n(s.attr), a.seq[1].set[0] = {
prnstr: s.str
};
else {
if ("countryOfResidence" != s.attr) throw new Error("unsupported attribute: " + s.attr);
a.seq[0].oid = n(s.attr), a.seq[1].set[0] = {
prnstr: s.str
}
}
t.push(new i(a))
}
var o = new r({
array: t
});
return this.asn1ExtnValue = o, this.asn1ExtnValue.getEncodedHex()
}, this.oid = "2.5.29.9", void 0 !== t && (this.params = t)
}, zt(ht.asn1.x509.SubjectDirectoryAttributes, ht.asn1.x509.Extension), ht.asn1.x509.PrivateExtension = function(t) {
ht.asn1.x509.PrivateExtension.superclass.constructor.call(this, t);
var e = ht,
r = e.lang.String.isHex,
i = e.asn1,
n = i.x509.OID.name2oid,
s = i.ASN1Util.newObject;
this.params = null, this.setByParam = function(t) {
this.oid = n(t.extname), this.params = t
}, this.getExtnValueHex = function() {
if (null == this.params.extname || null == this.params.extn) throw new Error("extname or extnhex not specified");
var t = this.params.extn;
if ("string" == typeof t && r(t)) return t;
if ("object" == typeof t) try {
return s(t).getEncodedHex()
} catch (e) {}
throw new Error("unsupported extn value")
}, null != t && this.setByParam(t)
}, zt(ht.asn1.x509.PrivateExtension, ht.asn1.x509.Extension), ht.asn1.x509.CRL = function(t) {
ht.asn1.x509.CRL.superclass.constructor.call(this);
var e = ht.asn1,
r = e.DERSequence,
i = e.DERBitString,
n = e.x509,
s = n.AlgorithmIdentifier,
a = n.TBSCertList;
this.params = void 0, this.setByParam = function(t) {
this.params = t
}, this.sign = function() {
var t = new a(this.params).getEncodedHex(),
e = new ht.crypto.Signature({
alg: this.params.sigalg
});
e.init(this.params.cakey), e.updateHex(t);
var r = e.sign();
this.params.sighex = r
}, this.getPEM = function() {
return It(this.getEncodedHex(), "X509 CRL")
}, this.getEncodedHex = function() {
var t = this.params;
if (null == t.tbsobj && (t.tbsobj = new a(t)), null == t.sighex && null != t.cakey && this.sign(), null == t.sighex) throw new Error("sighex or cakey parameter not defined");
var e = [];
return e.push(t.tbsobj), e.push(new s({
name: t.sigalg
})), e.push(new i({
hex: "00" + t.sighex
})), new r({
array: e
}).getEncodedHex()
}, null != t && (this.params = t)
}, zt(ht.asn1.x509.CRL, ht.asn1.ASN1Object), ht.asn1.x509.TBSCertList = function(t) {
ht.asn1.x509.TBSCertList.superclass.constructor.call(this);
var e = ht.asn1,
r = e.DERInteger,
i = e.DERSequence,
n = e.DERTaggedObject,
s = (e.DERObjectIdentifier, e.x509),
a = s.AlgorithmIdentifier,
o = s.Time,
h = s.Extensions,
u = s.X500Name;
this.params = null, this.setByParam = function(t) {
this.params = t
}, this.getRevCertSequence = function() {
for (var t = [], e = this.params.revcert, n = 0; n < e.length; n++) {
var s = [new r(e[n].sn), new o(e[n].date)];
null != e[n].ext && s.push(new h(e[n].ext)), t.push(new i({
array: s
}))
}
return new i({
array: t
})
}, this.getEncodedHex = function() {
var t = [],
e = this.params;
if (null != e.version) {
var s = e.version - 1,
c = new r({
int: s
});
t.push(c)
}
if (t.push(new a({
name: e.sigalg
})), t.push(new u(e.issuer)), t.push(new o(e.thisupdate)), null != e.nextupdate && t.push(new o(e.nextupdate)), null != e.revcert && t.push(this.getRevCertSequence()), null != e.ext) {
var l = new h(e.ext);
t.push(new n({
tag: "a0",
explicit: !0,
obj: l
}))
}
return new i({
array: t
}).getEncodedHex()
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.x509.TBSCertList, ht.asn1.ASN1Object), ht.asn1.x509.CRLEntry = function(t) {
ht.asn1.x509.CRLEntry.superclass.constructor.call(this);
var e = ht.asn1;
this.setCertSerial = function(t) {
this.sn = new e.DERInteger(t)
}, this.setRevocationDate = function(t) {
this.time = new e.x509.Time(t)
}, this.getEncodedHex = function() {
var t = new e.DERSequence({
array: [this.sn, this.time]
});
return this.TLV = t.getEncodedHex(), this.TLV
}, void 0 !== t && (void 0 !== t.time && this.setRevocationDate(t.time), void 0 !== t.sn && this.setCertSerial(t.sn))
}, zt(ht.asn1.x509.CRLEntry, ht.asn1.ASN1Object), ht.asn1.x509.CRLNumber = function(t) {
ht.asn1.x509.CRLNumber.superclass.constructor.call(this, t), this.params = void 0, this.getExtnValueHex = function() {
return this.asn1ExtnValue = new ht.asn1.DERInteger(this.params.num), this.asn1ExtnValue.getEncodedHex()
}, this.oid = "2.5.29.20", null != t && (this.params = t)
}, zt(ht.asn1.x509.CRLNumber, ht.asn1.x509.Extension), ht.asn1.x509.CRLReason = function(t) {
ht.asn1.x509.CRLReason.superclass.constructor.call(this, t), this.params = void 0, this.getExtnValueHex = function() {
return this.asn1ExtnValue = new ht.asn1.DEREnumerated(this.params.code), this.asn1ExtnValue.getEncodedHex()
}, this.oid = "2.5.29.21", null != t && (this.params = t)
}, zt(ht.asn1.x509.CRLReason, ht.asn1.x509.Extension), ht.asn1.x509.OCSPNonce = function(t) {
ht.asn1.x509.OCSPNonce.superclass.constructor.call(this, t), this.params = void 0, this.getExtnValueHex = function() {
return this.asn1ExtnValue = new ht.asn1.DEROctetString(this.params), this.asn1ExtnValue.getEncodedHex()
}, this.oid = "1.3.6.1.5.5.7.48.1.2", null != t && (this.params = t)
}, zt(ht.asn1.x509.OCSPNonce, ht.asn1.x509.Extension), ht.asn1.x509.OCSPNoCheck = function(t) {
ht.asn1.x509.OCSPNoCheck.superclass.constructor.call(this, t), this.params = void 0, this.getExtnValueHex = function() {
return this.asn1ExtnValue = new ht.asn1.DERNull, this.asn1ExtnValue.getEncodedHex()
}, this.oid = "1.3.6.1.5.5.7.48.1.5", null != t && (this.params = t)
}, zt(ht.asn1.x509.OCSPNoCheck, ht.asn1.x509.Extension), ht.asn1.x509.AdobeTimeStamp = function(t) {
ht.asn1.x509.AdobeTimeStamp.superclass.constructor.call(this, t);
var e = ht.asn1,
r = e.DERInteger,
i = e.DERBoolean,
n = e.DERSequence,
s = e.x509.GeneralName;
this.params = null, this.getExtnValueHex = function() {
var t = this.params,
e = [new r(1)];
return e.push(new s({
uri: t.uri
})), null != t.reqauth && e.push(new i(t.reqauth)), this.asn1ExtnValue = new n({
array: e
}), this.asn1ExtnValue.getEncodedHex()
}, this.oid = "1.2.840.113583.1.1.9.1", void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.x509.AdobeTimeStamp, ht.asn1.x509.Extension), ht.asn1.x509.X500Name = function(t) {
ht.asn1.x509.X500Name.superclass.constructor.call(this), this.asn1Array = [], this.paramArray = [], this.sRule = "utf8";
var e = ht.asn1,
r = e.x509,
i = r.RDN;
this.setByString = function(t, e) {
void 0 !== e && (this.sRule = e);
var r = t.split("/");
r.shift();
for (var n = [], s = 0; s < r.length; s++)
if (r[s].match(/^[^=]+=.+$/)) n.push(r[s]);
else {
var a = n.length - 1;
n[a] = n[a] + "/" + r[s]
}
for (s = 0; s < n.length; s++) this.asn1Array.push(new i({
str: n[s],
rule: this.sRule
}))
}, this.setByLdapString = function(t, e) {
void 0 !== e && (this.sRule = e);
var i = r.X500Name.ldapToCompat(t);
this.setByString(i, e)
}, this.setByObject = function(t, e) {
for (var r in void 0 !== e && (this.sRule = e), t)
if (t.hasOwnProperty(r)) {
var n = new i({
str: r + "=" + t[r],
rule: this.sRule
});
this.asn1Array ? this.asn1Array.push(n) : this.asn1Array = [n]
}
}, this.setByParam = function(t) {
var e;
void 0 !== t.rule && (this.sRule = t.rule), void 0 !== t.array ? this.paramArray = t.array : void 0 !== t.str ? this.setByString(t.str) : void 0 !== t.ldapstr ? this.setByLdapString(t.ldapstr) : void 0 !== t.hex ? this.hTLV = t.hex : void 0 !== t.certissuer ? ((e = new $t).readCertPEM(t.certissuer), this.hTLV = e.getIssuerHex()) : void 0 !== t.certsubject ? ((e = new $t).readCertPEM(t.certsubject), this.hTLV = e.getSubjectHex()) : "object" == typeof t && void 0 === t.certsubject && void 0 === t.certissuer && this.setByObject(t)
}, this.getEncodedHex = function() {
if ("string" == typeof this.hTLV) return this.hTLV;
if (0 == this.asn1Array.length && this.paramArray.length > 0)
for (var t = 0; t < this.paramArray.length; t++) {
var r = {
array: this.paramArray[t]
};
"utf8" != this.sRule && (r.rule = this.sRule);
var n = new i(r);
this.asn1Array.push(n)
}
var s = new e.DERSequence({
array: this.asn1Array
});
return this.hTLV = s.getEncodedHex(), this.hTLV
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.x509.X500Name, ht.asn1.ASN1Object), ht.asn1.x509.X500Name.compatToLDAP = function(t) {
if ("/" !== t.substr(0, 1)) throw "malformed input";
var e = (t = t.substr(1)).split("/");
return e.reverse(), (e = e.map((function(t) {
return t.replace(/,/, "\\,")
}))).join(",")
}, ht.asn1.x509.X500Name.onelineToLDAP = function(t) {
return ht.asn1.x509.X500Name.compatToLDAP(t)
}, ht.asn1.x509.X500Name.ldapToCompat = function(t) {
for (var e = t.split(","), r = !1, i = [], n = 0; e.length > 0; n++) {
var s = e.shift();
if (!0 === r) {
var a = (i.pop() + "," + s).replace(/\\,/g, ",");
i.push(a), r = !1
} else i.push(s);
"\\" === s.substr(-1, 1) && (r = !0)
}
return (i = i.map((function(t) {
return t.replace("/", "\\/")
}))).reverse(), "/" + i.join("/")
}, ht.asn1.x509.X500Name.ldapToOneline = function(t) {
return ht.asn1.x509.X500Name.ldapToCompat(t)
}, ht.asn1.x509.RDN = function(t) {
ht.asn1.x509.RDN.superclass.constructor.call(this), this.asn1Array = [], this.paramArray = [], this.sRule = "utf8";
var e = ht.asn1.x509.AttributeTypeAndValue;
this.setByParam = function(t) {
void 0 !== t.rule && (this.sRule = t.rule), void 0 !== t.str && this.addByMultiValuedString(t.str), void 0 !== t.array && (this.paramArray = t.array)
}, this.addByString = function(t) {
this.asn1Array.push(new ht.asn1.x509.AttributeTypeAndValue({
str: t,
rule: this.sRule
}))
}, this.addByMultiValuedString = function(t) {
for (var e = ht.asn1.x509.RDN.parseString(t), r = 0; r < e.length; r++) this.addByString(e[r])
}, this.getEncodedHex = function() {
if (0 == this.asn1Array.length && this.paramArray.length > 0)
for (var t = 0; t < this.paramArray.length; t++) {
var r = this.paramArray[t];
void 0 !== r.rule && "utf8" != this.sRule && (r.rule = this.sRule);
var i = new e(r);
this.asn1Array.push(i)
}
var n = new ht.asn1.DERSet({
array: this.asn1Array
});
return this.TLV = n.getEncodedHex(), this.TLV
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.x509.RDN, ht.asn1.ASN1Object), ht.asn1.x509.RDN.parseString = function(t) {
for (var e = t.split(/\+/), r = !1, i = [], n = 0; e.length > 0; n++) {
var s = e.shift();
if (!0 === r) {
var a = (i.pop() + "+" + s).replace(/\\\+/g, "+");
i.push(a), r = !1
} else i.push(s);
"\\" === s.substr(-1, 1) && (r = !0)
}
var o = !1,
h = [];
for (n = 0; i.length > 0; n++) {
if (s = i.shift(), !0 === o) {
var u = h.pop();
s.match(/"$/) ? (a = (u + "+" + s).replace(/^([^=]+)="(.*)"$/, "$1=$2"), h.push(a), o = !1) : h.push(u + "+" + s)
} else h.push(s);
s.match(/^[^=]+="/) && (o = !0)
}
return h
}, ht.asn1.x509.AttributeTypeAndValue = function(t) {
ht.asn1.x509.AttributeTypeAndValue.superclass.constructor.call(this), this.sRule = "utf8", this.sType = null, this.sValue = null, this.dsType = null;
var e = ht,
r = e.asn1,
i = r.DERSequence,
n = r.DERUTF8String,
s = r.DERPrintableString,
a = r.DERTeletexString,
o = r.DERIA5String,
h = r.DERVisibleString,
u = r.DERBMPString,
c = e.lang.String.isMail,
l = e.lang.String.isPrintable;
this.setByParam = function(t) {
if (void 0 !== t.rule && (this.sRule = t.rule), void 0 !== t.ds && (this.dsType = t.ds), void 0 === t.value && void 0 !== t.str) {
var e = t.str.match(/^([^=]+)=(.+)$/);
if (!e) throw new Error("malformed attrTypeAndValueStr: " + attrTypeAndValueStr);
this.sType = e[1], this.sValue = e[2]
} else this.sType = t.type, this.sValue = t.value
}, this.setByString = function(t, e) {
void 0 !== e && (this.sRule = e);
var r = t.match(/^([^=]+)=(.+)$/);
if (!r) throw new Error("malformed attrTypeAndValueStr: " + attrTypeAndValueStr);
this.setByAttrTypeAndValueStr(r[1], r[2])
}, this._getDsType = function() {
var t = this.sType,
e = this.sValue,
r = this.sRule;
return "prn" === r ? "CN" == t && c(e) ? "ia5" : l(e) ? "prn" : "utf8" : "utf8" === r ? "CN" == t && c(e) ? "ia5" : "C" == t ? "prn" : "utf8" : "utf8"
}, this.setByAttrTypeAndValueStr = function(t, e, r) {
void 0 !== r && (this.sRule = r), this.sType = t, this.sValue = e
}, this.getValueObj = function(t, e) {
if ("utf8" == t) return new n({
str: e
});
if ("prn" == t) return new s({
str: e
});
if ("tel" == t) return new a({
str: e
});
if ("ia5" == t) return new o({
str: e
});
if ("vis" == t) return new h({
str: e
});
if ("bmp" == t) return new u({
str: e
});
throw new Error("unsupported directory string type: type=" + t + " value=" + e)
}, this.getEncodedHex = function() {
null == this.dsType && (this.dsType = this._getDsType());
var t = ht.asn1.x509.OID.atype2obj(this.sType),
e = this.getValueObj(this.dsType, this.sValue),
r = new i({
array: [t, e]
});
return this.TLV = r.getEncodedHex(), this.TLV
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.x509.AttributeTypeAndValue, ht.asn1.ASN1Object), ht.asn1.x509.SubjectPublicKeyInfo = function(t) {
ht.asn1.x509.SubjectPublicKeyInfo.superclass.constructor.call(this);
var e = ht,
r = e.asn1,
i = r.DERInteger,
n = r.DERBitString,
s = r.DERObjectIdentifier,
a = r.DERSequence,
o = r.ASN1Util.newObject,
h = r.x509.AlgorithmIdentifier,
u = e.crypto;
u.ECDSA, u.DSA, this.getASN1Object = function() {
if (null == this.asn1AlgId || null == this.asn1SubjPKey) throw "algId and/or subjPubKey not set";
return new a({
array: [this.asn1AlgId, this.asn1SubjPKey]
})
}, this.getEncodedHex = function() {
var t = this.getASN1Object();
return this.hTLV = t.getEncodedHex(), this.hTLV
}, this.setPubKey = function(t) {
try {
if (t instanceof rt) {
var e = o({
seq: [{
int: {
bigint: t.n
}
}, {
int: {
int: t.e
}
}]
}).getEncodedHex();
this.asn1AlgId = new h({
name: "rsaEncryption"
}), this.asn1SubjPKey = new n({
hex: "00" + e
})
}
} catch (u) {}
try {
if (t instanceof ht.crypto.ECDSA) {
var r = new s({
name: t.curveName
});
this.asn1AlgId = new h({
name: "ecPublicKey",
asn1params: r
}), this.asn1SubjPKey = new n({
hex: "00" + t.pubKeyHex
})
}
} catch (u) {}
try {
if (t instanceof ht.crypto.DSA) {
r = new o({
seq: [{
int: {
bigint: t.p
}
}, {
int: {
bigint: t.q
}
}, {
int: {
bigint: t.g
}
}]
}), this.asn1AlgId = new h({
name: "dsa",
asn1params: r
});
var a = new i({
bigint: t.y
});
this.asn1SubjPKey = new n({
hex: "00" + a.getEncodedHex()
})
}
} catch (u) {}
}, void 0 !== t && this.setPubKey(t)
}, zt(ht.asn1.x509.SubjectPublicKeyInfo, ht.asn1.ASN1Object), ht.asn1.x509.Time = function(t) {
ht.asn1.x509.Time.superclass.constructor.call(this);
var e = ht.asn1,
r = e.DERUTCTime,
i = e.DERGeneralizedTime;
this.params = null, this.type = null, this.setTimeParams = function(t) {
this.timeParams = t
}, this.setByParam = function(t) {
this.params = t
}, this.getType = function(t) {
return t.match(/^[0-9]{12}Z$/) ? "utc" : t.match(/^[0-9]{14}Z$/) ? "gen" : t.match(/^[0-9]{12}\.[0-9]+Z$/) ? "utc" : t.match(/^[0-9]{14}\.[0-9]+Z$/) ? "gen" : null
}, this.getEncodedHex = function() {
var t = this.params,
e = null;
if ("string" == typeof t && (t = {
str: t
}), null == t || !t.str || null != t.type && null != t.type || (t.type = this.getType(t.str)), null != t && t.str ? ("utc" == t.type && (e = new r(t.str)), "gen" == t.type && (e = new i(t.str))) : e = "gen" == this.type ? new i : new r, null == e) throw new Error("wrong setting for Time");
return this.TLV = e.getEncodedHex(), this.TLV
}, null != t && this.setByParam(t)
}, ht.asn1.x509.Time_bak = function(t) {
ht.asn1.x509.Time_bak.superclass.constructor.call(this);
var e = ht.asn1,
r = e.DERUTCTime,
i = e.DERGeneralizedTime;
this.setTimeParams = function(t) {
this.timeParams = t
}, this.getEncodedHex = function() {
var t = null;
return t = null != this.timeParams ? "utc" == this.type ? new r(this.timeParams) : new i(this.timeParams) : "utc" == this.type ? new r : new i, this.TLV = t.getEncodedHex(), this.TLV
}, this.type = "utc", void 0 !== t && (void 0 !== t.type ? this.type = t.type : void 0 !== t.str && (t.str.match(/^[0-9]{12}Z$/) && (this.type = "utc"), t.str.match(/^[0-9]{14}Z$/) && (this.type = "gen")), this.timeParams = t)
}, zt(ht.asn1.x509.Time, ht.asn1.ASN1Object), ht.asn1.x509.AlgorithmIdentifier = function(t) {
ht.asn1.x509.AlgorithmIdentifier.superclass.constructor.call(this), this.nameAlg = null, this.asn1Alg = null, this.asn1Params = null, this.paramEmpty = !1;
var e = ht.asn1,
r = e.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV;
if (this.getEncodedHex = function() {
if (null === this.nameAlg && null === this.asn1Alg) throw new Error("algorithm not specified");
if (null !== this.nameAlg) {
var t = null;
for (var i in r) i === this.nameAlg && (t = r[i]);
if (null !== t) return this.hTLV = t, this.hTLV
}
null !== this.nameAlg && null === this.asn1Alg && (this.asn1Alg = e.x509.OID.name2obj(this.nameAlg));
var n = [this.asn1Alg];
null !== this.asn1Params && n.push(this.asn1Params);
var s = new e.DERSequence({
array: n
});
return this.hTLV = s.getEncodedHex(), this.hTLV
}, void 0 !== t && (void 0 !== t.name && (this.nameAlg = t.name), void 0 !== t.asn1params && (this.asn1Params = t.asn1params), void 0 !== t.paramempty && (this.paramEmpty = t.paramempty)), null === this.asn1Params && !1 === this.paramEmpty && null !== this.nameAlg) {
void 0 !== this.nameAlg.name && (this.nameAlg = this.nameAlg.name);
var i = this.nameAlg.toLowerCase();
"withdsa" !== i.substr(-7, 7) && "withecdsa" !== i.substr(-9, 9) && (this.asn1Params = new e.DERNull)
}
}, zt(ht.asn1.x509.AlgorithmIdentifier, ht.asn1.ASN1Object), ht.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV = {
SHAwithRSAandMGF1: "300d06092a864886f70d01010a3000",
SHA256withRSAandMGF1: "303d06092a864886f70d01010a3030a00d300b0609608648016503040201a11a301806092a864886f70d010108300b0609608648016503040201a203020120",
SHA384withRSAandMGF1: "303d06092a864886f70d01010a3030a00d300b0609608648016503040202a11a301806092a864886f70d010108300b0609608648016503040202a203020130",
SHA512withRSAandMGF1: "303d06092a864886f70d01010a3030a00d300b0609608648016503040203a11a301806092a864886f70d010108300b0609608648016503040203a203020140"
}, ht.asn1.x509.GeneralName = function(t) {
ht.asn1.x509.GeneralName.superclass.constructor.call(this);
var e = {
rfc822: "81",
dns: "82",
dn: "a4",
uri: "86",
ip: "87"
},
r = ht.asn1,
i = (r.DERSequence, r.DEROctetString),
n = r.DERIA5String,
s = r.DERTaggedObject,
a = r.ASN1Object,
o = r.x509.X500Name,
h = Ct;
this.explicit = !1, this.setByParam = function(t) {
var r = null;
if (void 0 !== t) {
if (void 0 !== t.rfc822 && (this.type = "rfc822", r = new n({
str: t[this.type]
})), void 0 !== t.dns && (this.type = "dns", r = new n({
str: t[this.type]
})), void 0 !== t.uri && (this.type = "uri", r = new n({
str: t[this.type]
})), void 0 !== t.dn && (this.type = "dn", this.explicit = !0, r = "string" == typeof t.dn ? new o({
str: t.dn
}) : t.dn instanceof ht.asn1.x509.X500Name ? t.dn : new o(t.dn)), void 0 !== t.ldapdn && (this.type = "dn", this.explicit = !0, r = new o({
ldapstr: t.ldapdn
})), void 0 !== t.certissuer) {
this.type = "dn", this.explicit = !0;
var u = null;
if ((l = t.certissuer).match(/^[0-9A-Fa-f]+$/), -1 != l.indexOf("-----BEGIN ") && (u = h(l)), null == u) throw "certissuer param not cert";
(f = new $t).hex = u;
var c = f.getIssuerHex();
(r = new a).hTLV = c
}
if (void 0 !== t.certsubj) {
var l, f;
if (this.type = "dn", this.explicit = !0, u = null, (l = t.certsubj).match(/^[0-9A-Fa-f]+$/), -1 != l.indexOf("-----BEGIN ") && (u = h(l)), null == u) throw "certsubj param not cert";
(f = new $t).hex = u, c = f.getSubjectHex(), (r = new a).hTLV = c
}
if (void 0 !== t.ip) {
this.type = "ip", this.explicit = !1;
var g, p = t.ip,
d = "malformed IP address";
if (p.match(/^[0-9.]+[.][0-9.]+$/)) {
if (8 !== (g = kt("[" + p.split(".").join(",") + "]")).length) throw d
} else if (p.match(/^[0-9A-Fa-f:]+:[0-9A-Fa-f:]+$/)) g = Ht(p);
else {
if (!p.match(/^([0-9A-Fa-f][0-9A-Fa-f]){1,}$/)) throw d;
g = p
}
r = new i({
hex: g
})
}
if (null == this.type) throw "unsupported type in params=" + t;
this.asn1Obj = new s({
explicit: this.explicit,
tag: e[this.type],
obj: r
})
}
}, this.getEncodedHex = function() {
return this.asn1Obj.getEncodedHex()
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.x509.GeneralName, ht.asn1.ASN1Object), ht.asn1.x509.GeneralNames = function(t) {
ht.asn1.x509.GeneralNames.superclass.constructor.call(this);
var e = ht.asn1;
this.setByParamArray = function(t) {
for (var r = 0; r < t.length; r++) {
var i = new e.x509.GeneralName(t[r]);
this.asn1Array.push(i)
}
}, this.getEncodedHex = function() {
return new e.DERSequence({
array: this.asn1Array
}).getEncodedHex()
}, this.asn1Array = new Array, void 0 !== t && this.setByParamArray(t)
}, zt(ht.asn1.x509.GeneralNames, ht.asn1.ASN1Object), ht.asn1.x509.OID = new function(t) {
this.atype2oidList = {
CN: "2.5.4.3",
L: "2.5.4.7",
ST: "2.5.4.8",
O: "2.5.4.10",
OU: "2.5.4.11",
C: "2.5.4.6",
STREET: "2.5.4.9",
DC: "0.9.2342.19200300.100.1.25",
UID: "0.9.2342.19200300.100.1.1",
SN: "2.5.4.4",
T: "2.5.4.12",
DN: "2.5.4.49",
E: "1.2.840.113549.1.9.1",
description: "2.5.4.13",
businessCategory: "2.5.4.15",
postalCode: "2.5.4.17",
serialNumber: "2.5.4.5",
uniqueIdentifier: "2.5.4.45",
organizationIdentifier: "2.5.4.97",
jurisdictionOfIncorporationL: "1.3.6.1.4.1.311.60.2.1.1",
jurisdictionOfIncorporationSP: "1.3.6.1.4.1.311.60.2.1.2",
jurisdictionOfIncorporationC: "1.3.6.1.4.1.311.60.2.1.3"
}, 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",
"pkcs1-MGF": "1.2.840.113549.1.1.8",
rsaPSS: "1.2.840.113549.1.1.10",
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",
commonName: "2.5.4.3",
countryName: "2.5.4.6",
localityName: "2.5.4.7",
stateOrProvinceName: "2.5.4.8",
streetAddress: "2.5.4.9",
organizationName: "2.5.4.10",
organizationalUnitName: "2.5.4.11",
domainComponent: "0.9.2342.19200300.100.1.25",
userId: "0.9.2342.19200300.100.1.1",
surname: "2.5.4.4",
givenName: "2.5.4.42",
title: "2.5.4.12",
distinguishedName: "2.5.4.49",
emailAddress: "1.2.840.113549.1.9.1",
description: "2.5.4.13",
businessCategory: "2.5.4.15",
postalCode: "2.5.4.17",
uniqueIdentifier: "2.5.4.45",
organizationIdentifier: "2.5.4.97",
jurisdictionOfIncorporationL: "1.3.6.1.4.1.311.60.2.1.1",
jurisdictionOfIncorporationSP: "1.3.6.1.4.1.311.60.2.1.2",
jurisdictionOfIncorporationC: "1.3.6.1.4.1.311.60.2.1.3",
subjectDirectoryAttributes: "2.5.29.9",
subjectKeyIdentifier: "2.5.29.14",
keyUsage: "2.5.29.15",
subjectAltName: "2.5.29.17",
issuerAltName: "2.5.29.18",
basicConstraints: "2.5.29.19",
cRLNumber: "2.5.29.20",
cRLReason: "2.5.29.21",
nameConstraints: "2.5.29.30",
cRLDistributionPoints: "2.5.29.31",
certificatePolicies: "2.5.29.32",
anyPolicy: "2.5.29.32.0",
authorityKeyIdentifier: "2.5.29.35",
policyConstraints: "2.5.29.36",
extKeyUsage: "2.5.29.37",
authorityInfoAccess: "1.3.6.1.5.5.7.1.1",
ocsp: "1.3.6.1.5.5.7.48.1",
ocspBasic: "1.3.6.1.5.5.7.48.1.1",
ocspNonce: "1.3.6.1.5.5.7.48.1.2",
ocspNoCheck: "1.3.6.1.5.5.7.48.1.5",
caIssuers: "1.3.6.1.5.5.7.48.2",
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",
dateOfBirth: "1.3.6.1.5.5.7.9.1",
placeOfBirth: "1.3.6.1.5.5.7.9.2",
gender: "1.3.6.1.5.5.7.9.3",
countryOfCitizenship: "1.3.6.1.5.5.7.9.4",
countryOfResidence: "1.3.6.1.5.5.7.9.5",
ecPublicKey: "1.2.840.10045.2.1",
"P-256": "1.2.840.10045.3.1.7",
secp256r1: "1.2.840.10045.3.1.7",
secp256k1: "1.3.132.0.10",
secp384r1: "1.3.132.0.34",
secp521r1: "1.3.132.0.35",
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",
signingCertificate: "1.2.840.113549.1.9.16.2.12",
timeStampToken: "1.2.840.113549.1.9.16.2.14",
signaturePolicyIdentifier: "1.2.840.113549.1.9.16.2.15",
etsArchiveTimeStamp: "1.2.840.113549.1.9.16.2.27",
signingCertificateV2: "1.2.840.113549.1.9.16.2.47",
etsArchiveTimeStampV2: "1.2.840.113549.1.9.16.2.48",
extensionRequest: "1.2.840.113549.1.9.14",
contentType: "1.2.840.113549.1.9.3",
messageDigest: "1.2.840.113549.1.9.4",
signingTime: "1.2.840.113549.1.9.5",
counterSignature: "1.2.840.113549.1.9.6",
archiveTimeStampV3: "0.4.0.1733.2.4",
pdfRevocationInfoArchival: "1.2.840.113583.1.1.8",
adobeTimeStamp: "1.2.840.113583.1.1.9.1"
}, this.objCache = {}, this.name2obj = function(t) {
if (void 0 !== this.objCache[t]) return this.objCache[t];
if (void 0 === this.name2oidList[t]) throw "Name of ObjectIdentifier not defined: " + t;
var e = this.name2oidList[t],
r = new ht.asn1.DERObjectIdentifier({
oid: e
});
return this.objCache[t] = r, r
}, this.atype2obj = function(t) {
if (void 0 !== this.objCache[t]) return this.objCache[t];
var e;
if (t.match(/^\d+\.\d+\.[0-9.]+$/)) e = t;
else if (void 0 !== this.atype2oidList[t]) e = this.atype2oidList[t];
else {
if (void 0 === this.name2oidList[t]) throw "AttributeType name undefined: " + t;
e = this.name2oidList[t]
}
var r = new ht.asn1.DERObjectIdentifier({
oid: e
});
return this.objCache[t] = r, r
}
}, ht.asn1.x509.OID.oid2name = function(t) {
var e = ht.asn1.x509.OID.name2oidList;
for (var r in e)
if (e[r] == t) return r;
return ""
}, ht.asn1.x509.OID.oid2atype = function(t) {
var e = ht.asn1.x509.OID.atype2oidList;
for (var r in e)
if (e[r] == t) return r;
return t
}, ht.asn1.x509.OID.name2oid = function(t) {
if (t.match(/^[0-9.]+$/)) return t;
var e = ht.asn1.x509.OID.name2oidList;
return void 0 === e[t] ? "" : e[t]
}, ht.asn1.x509.X509Util = {}, ht.asn1.x509.X509Util.newCertPEM = function(t) {
var e = ht.asn1.x509;
return e.TBSCertificate, new(0, e.Certificate)(t).getPEM()
}, void 0 !== ht && ht || (ht = {}), void 0 !== ht.asn1 && ht.asn1 || (ht.asn1 = {}), void 0 !== ht.asn1.cms && ht.asn1.cms || (ht.asn1.cms = {}), ht.asn1.cms.Attribute = function(t) {
var e = Error,
r = ht.asn1,
i = r.DERSequence,
n = r.DERSet,
s = r.DERObjectIdentifier;
this.params = null, this.typeOid = null, this.setByParam = function(t) {
this.params = t
}, this.getValueArray = function() {
throw new e("not yet implemented abstract")
}, this.getEncodedHex = function() {
var t = new s({
oid: this.typeOid
}),
e = new n({
array: this.getValueArray()
});
return new i({
array: [t, e]
}).getEncodedHex()
}
}, zt(ht.asn1.cms.Attribute, ht.asn1.ASN1Object), ht.asn1.cms.ContentType = function(t) {
var e = ht.asn1;
e.cms.ContentType.superclass.constructor.call(this), this.typeOid = "1.2.840.113549.1.9.3", this.getValueArray = function() {
return [new e.DERObjectIdentifier(this.params.type)]
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.ContentType, ht.asn1.cms.Attribute), ht.asn1.cms.MessageDigest = function(t) {
var e = ht.asn1,
r = e.DEROctetString;
e.cms.MessageDigest.superclass.constructor.call(this), this.typeOid = "1.2.840.113549.1.9.4", this.getValueArray = function() {
return [new r(this.params)]
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.MessageDigest, ht.asn1.cms.Attribute), ht.asn1.cms.SigningTime = function(t) {
var e = ht.asn1;
e.cms.SigningTime.superclass.constructor.call(this), this.typeOid = "1.2.840.113549.1.9.5", this.getValueArray = function() {
return [new e.x509.Time(this.params)]
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.SigningTime, ht.asn1.cms.Attribute), ht.asn1.cms.SigningCertificate = function(t) {
var e = Error,
r = ht,
i = r.asn1,
n = i.DERSequence,
s = i.cms,
a = s.ESSCertID;
r.crypto, s.SigningCertificate.superclass.constructor.call(this), this.typeOid = "1.2.840.113549.1.9.16.2.12", this.getValueArray = function() {
if (null == this.params || null == this.params || null == this.params.array) throw new e("parameter 'array' not specified");
for (var r = this.params.array, i = [], s = 0; s < r.length; s++) {
var o = r[s];
0 != t.hasis || "string" != typeof o || -1 == o.indexOf("-----BEGIN") && !lt.isASN1HEX(o) || (o = {
cert: o
}), 0 != o.hasis && 0 == t.hasis && (o.hasis = !1), i.push(new a(o))
}
var h = new n({
array: i
});
return [new n({
array: [h]
})]
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.SigningCertificate, ht.asn1.cms.Attribute), ht.asn1.cms.ESSCertID = function(t) {
ht.asn1.cms.ESSCertID.superclass.constructor.call(this);
var e = Error,
r = ht,
i = r.asn1,
n = i.DEROctetString,
s = i.DERSequence,
a = i.cms.IssuerSerial;
this.params = null, this.getCertHash = function(t, i) {
if (null != t.hash) return t.hash;
if ("string" == typeof t && -1 == t.indexOf("-----BEGIN") && !lt.isASN1HEX(t)) return t;
var n, s, a;
if ("string" == typeof t) n = t;
else {
if (null == t.cert) throw new e("hash nor cert unspecified");
n = t.cert
}
if (s = -1 != n.indexOf("-----BEGIN") ? Ct(n) : n, "string" == typeof t && (-1 != t.indexOf("-----BEGIN") ? s = Ct(t) : lt.isASN1HEX(t) && (s = t)), null != t.alg) a = t.alg;
else {
if (null == i) throw new e("hash alg unspecified");
a = i
}
return r.crypto.Util.hashHex(s, a)
}, this.getEncodedHex = function() {
var t = this.params,
e = this.getCertHash(t, "sha1"),
r = [];
return r.push(new n({
hex: e
})), ("string" == typeof t && -1 != t.indexOf("-----BEGIN") || null != t.cert && 0 != t.hasis || null != t.issuer && null != t.serial) && r.push(new a(t)), new s({
array: r
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.ESSCertID, ht.asn1.ASN1Object), ht.asn1.cms.SigningCertificateV2 = function(t) {
var e = Error,
r = ht,
i = r.asn1,
n = i.DERSequence,
s = (i.x509, i.cms),
a = s.ESSCertIDv2;
r.crypto, s.SigningCertificateV2.superclass.constructor.call(this), this.typeOid = "1.2.840.113549.1.9.16.2.47", this.getValueArray = function() {
if (null == this.params || null == this.params || null == this.params.array) throw new e("parameter 'array' not specified");
for (var r = this.params.array, i = [], s = 0; s < r.length; s++) {
var o = r[s];
null == t.alg && 0 != t.hasis || "string" != typeof o || -1 == o.indexOf("-----BEGIN") && !lt.isASN1HEX(o) || (o = {
cert: o
}), null == o.alg && null != t.alg && (o.alg = t.alg), 0 != o.hasis && 0 == t.hasis && (o.hasis = !1), i.push(new a(o))
}
var h = new n({
array: i
});
return [new n({
array: [h]
})]
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.SigningCertificateV2, ht.asn1.cms.Attribute), ht.asn1.cms.ESSCertIDv2 = function(t) {
ht.asn1.cms.ESSCertIDv2.superclass.constructor.call(this), Error;
var e = ht.asn1,
r = e.DEROctetString,
i = e.DERSequence,
n = e.cms.IssuerSerial,
s = e.x509.AlgorithmIdentifier;
this.params = null, this.getEncodedHex = function() {
var t = this.params,
e = this.getCertHash(t, "sha256"),
a = [];
return null != t.alg && "sha256" != t.alg && a.push(new s({
name: t.alg
})), a.push(new r({
hex: e
})), ("string" == typeof t && -1 != t.indexOf("-----BEGIN") || null != t.cert && 0 != t.hasis || null != t.issuer && null != t.serial) && a.push(new n(t)), new i({
array: a
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.ESSCertIDv2, ht.asn1.cms.ESSCertID), ht.asn1.cms.IssuerSerial = function(t) {
var e = Error,
r = ht.asn1,
i = r.DERInteger,
n = r.DERSequence,
s = r.cms,
a = r.x509.GeneralNames,
o = $t;
s.IssuerSerial.superclass.constructor.call(this), this.setByParam = function(t) {
this.params = t
}, this.getEncodedHex = function() {
var t, r, s = this.params;
if ("string" == typeof s && -1 != s.indexOf("-----BEGIN") || null != s.cert) {
var h;
h = null != s.cert ? s.cert : s;
var u = new o;
u.readCertPEM(h), t = u.getIssuer(), r = {
hex: u.getSerialNumberHex()
}
} else {
if (null == s.issuer || !s.serial) throw new e("cert or issuer and serial parameter not specified");
t = s.issuer, r = s.serial
}
var c = new a([{
dn: t
}]),
l = new i(r);
return new n({
array: [c, l]
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.IssuerSerial, ht.asn1.ASN1Object), ht.asn1.cms.SignerIdentifier = function(t) {
var e = ht.asn1,
r = (e.DERInteger, e.DERSequence, e.cms),
i = r.IssuerAndSerialNumber,
n = r.SubjectKeyIdentifier;
e.x509.X500Name, Error, r.SignerIdentifier.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params;
if ("isssn" == t.type) return new i(t).getEncodedHex();
if ("skid" == t.type) return new n(t).getEncodedHex();
throw new Error("wrong property for isssn or skid")
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.SignerIdentifier, ht.asn1.ASN1Object), ht.asn1.cms.IssuerAndSerialNumber = function(t) {
var e = ht.asn1,
r = e.DERInteger,
i = e.DERSequence,
n = e.cms,
s = e.x509.X500Name,
a = $t,
o = Error;
n.IssuerAndSerialNumber.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t, e, n = this.params;
if ("string" == typeof n && -1 != n.indexOf("-----BEGIN") || null != n.cert) {
var h;
h = null != n.cert ? n.cert : n;
var u = new a;
u.readCertPEM(h), t = u.getIssuer(), e = {
hex: u.getSerialNumberHex()
}
} else {
if (null == n.issuer || !n.serial) throw new o("cert or issuer and serial parameter not specified");
t = n.issuer, e = n.serial
}
var c = new s(t),
l = new r(e);
return new i({
array: [c, l]
}).getEncodedHex()
}, this.setByParam = function(t) {
this.params = t
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.IssuerAndSerialNumber, ht.asn1.ASN1Object), ht.asn1.cms.SubjectKeyIdentifier = function(t) {
var e = ht.asn1,
r = (e.DERInteger, e.DERSequence, e.ASN1Util.newObject),
i = e.cms,
n = (i.IssuerAndSerialName, i.SubjectKeyIdentifier, e.x509.X500Name, $t),
s = Error;
i.SubjectKeyIdentifier.superclass.constructor.call(this), this.getEncodedHex = function() {
var t, e = this.params;
if (null == e.cert && null == e.skid) throw new s("property cert nor skid undefined");
return null != e.cert ? t = new n(e.cert).getExtSubjectKeyIdentifier().kid.hex : null != e.skid && (t = e.skid), r({
tag: {
tage: "a0",
obj: {
octstr: {
hex: t
}
}
}
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.SubjectKeyIdentifier, ht.asn1.ASN1Object), ht.asn1.cms.AttributeList = function(t) {
var e = Error,
r = ht.asn1,
i = r.DERSet,
n = r.cms;
n.AttributeList.superclass.constructor.call(this), this.params = null, this.hTLV = null, this.setByParam = function(t) {
this.params = t
}, this.getEncodedHex = function() {
var t = this.params;
if (null != this.hTLV) return this.hTLV;
var r = !0;
null != t.sortflag && (r = t.sortflag);
for (var s = t.array, a = [], o = 0; o < s.length; o++) {
var h = s[o],
u = h.attr;
if ("contentType" == u) a.push(new n.ContentType(h));
else if ("messageDigest" == u) a.push(new n.MessageDigest(h));
else if ("signingTime" == u) a.push(new n.SigningTime(h));
else if ("signingCertificate" == u) a.push(new n.SigningCertificate(h));
else if ("signingCertificateV2" == u) a.push(new n.SigningCertificateV2(h));
else if ("signaturePolicyIdentifier" == u) a.push(new ht.asn1.cades.SignaturePolicyIdentifier(h));
else {
if ("signatureTimeStamp" != u && "timeStampToken" != u) throw new e("unknown attr: " + u);
a.push(new ht.asn1.cades.SignatureTimeStamp(h))
}
}
var c = new i({
array: a,
sortflag: r
});
return this.hTLV = c.getEncodedHex(), this.hTLV
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.AttributeList, ht.asn1.ASN1Object), ht.asn1.cms.SignerInfo = function(t) {
var e = Error,
r = ht,
i = r.asn1,
n = i.DERInteger,
s = i.DEROctetString,
a = i.DERSequence,
o = i.DERTaggedObject,
h = i.cms,
u = h.SignerIdentifier,
c = h.AttributeList,
l = (h.ContentType, h.EncapsulatedContentInfo, h.MessageDigest, h.SignedData, i.x509.AlgorithmIdentifier),
f = r.crypto,
g = Gt;
h.SignerInfo.superclass.constructor.call(this), this.params = null, this.sign = function() {
var t = this.params,
e = t.sigalg,
r = new c(t.sattrs).getEncodedHex(),
i = g.getKey(t.signkey),
n = new f.Signature({
alg: e
});
n.init(i), n.updateHex(r);
var s = n.sign();
t.sighex = s
}, this.getEncodedHex = function() {
var t = this.params,
r = [];
if (r.push(new n({
int: t.version
})), r.push(new u(t.id)), r.push(new l({
name: t.hashalg
})), null != t.sattrs) {
var i = new c(t.sattrs);
try {
r.push(new o({
tag: "a0",
explicit: !1,
obj: i
}))
} catch (h) {
throw new e("si sattr error: " + h)
}
}
if (null != t.sigalgfield ? r.push(new l({
name: t.sigalgfield
})) : r.push(new l({
name: t.sigalg
})), null == t.sighex && null != t.signkey && this.sign(), r.push(new s({
hex: t.sighex
})), null != t.uattrs) {
i = new c(t.uattrs);
try {
r.push(new o({
tag: "a1",
explicit: !1,
obj: i
}))
} catch (h) {
throw new e("si uattr error: " + h)
}
}
return new a({
array: r
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.SignerInfo, ht.asn1.ASN1Object), ht.asn1.cms.EncapsulatedContentInfo = function(t) {
var e = ht.asn1,
r = e.DERTaggedObject,
i = e.DERSequence,
n = e.DERObjectIdentifier,
s = e.DEROctetString;
e.cms.EncapsulatedContentInfo.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params,
e = [];
if (e.push(new n(t.type)), null != t.content && (null != t.content.hex || null != t.content.str) && 1 != t.isDetached) {
var a = new s(t.content),
o = new r({
tag: "a0",
explicit: !0,
obj: a
});
e.push(o)
}
return new i({
array: e
}).getEncodedHex()
}, this.setByParam = function(t) {
this.params = t
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.EncapsulatedContentInfo, ht.asn1.ASN1Object), ht.asn1.cms.ContentInfo = function(t) {
var e = ht.asn1,
r = e.DERTaggedObject,
i = e.DERSequence,
n = e.DERObjectIdentifier;
e.x509.OID.name2obj, ht.asn1.cms.ContentInfo.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params,
e = [];
e.push(new n(t.type));
var s = new r({
tag: "a0",
explicit: !0,
obj: t.obj
});
return e.push(s), new i({
array: e
}).getEncodedHex()
}, this.setByParam = function(t) {
this.params = t
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.ContentInfo, ht.asn1.ASN1Object), ht.asn1.cms.SignedData = function(t) {
Error;
var e = ht.asn1,
r = (e.ASN1Object, e.DERInteger),
i = e.DERSet,
n = e.DERSequence,
s = (e.DERTaggedObject, e.cms),
a = s.EncapsulatedContentInfo,
o = s.SignerInfo,
h = s.ContentInfo,
u = s.CertificateSet,
c = s.RevocationInfoChoices,
l = e.x509.AlgorithmIdentifier;
ht.asn1.cms.SignedData.superclass.constructor.call(this), this.params = null, this.checkAndFixParam = function() {
var t = this.params;
this._setDigestAlgs(t), this._setContentTypeByEContent(t), this._setMessageDigestByEContent(t), this._setSignerInfoVersion(t), this._setSignedDataVersion(t)
}, this._setDigestAlgs = function(t) {
for (var e = {}, r = t.sinfos, i = 0; i < r.length; i++) e[r[i].hashalg] = 1;
t.hashalgs = Object.keys(e).sort()
}, this._setContentTypeByEContent = function(t) {
for (var e = t.econtent.type, r = t.sinfos, i = 0; i < r.length; i++) {
var n = r[i];
this._getAttrParamByName(n, "contentType").type = e
}
}, this._setMessageDigestByEContent = function(t) {
var e = t.econtent,
r = (t.econtent.type, e.content.hex);
null == r && "data" == e.type && null != e.content.str && (r = bt(e.content.str));
for (var i = t.sinfos, n = 0; n < i.length; n++) {
var s = i[n],
a = s.hashalg,
o = this._getAttrParamByName(s, "messageDigest"),
h = ht.crypto.Util.hashHex(r, a);
o.hex = h
}
}, this._getAttrParamByName = function(t, e) {
for (var r = t.sattrs.array, i = 0; i < r.length; i++)
if (r[i].attr == e) return r[i]
}, this._setSignerInfoVersion = function(t) {
for (var e = t.sinfos, r = 0; r < e.length; r++) {
var i = e[r],
n = 1;
"skid" == i.id.type && (n = 3), i.version = n
}
}, this._setSignedDataVersion = function(t) {
var e = this._getSignedDataVersion(t);
t.version = e
}, this._getSignedDataVersion = function(t) {
if (null != t.revinfos)
for (var e = t.revinfos, r = 0; r < e.length; r++)
if (null != e[r].ocsp) return 5;
var i = t.sinfos;
for (r = 0; r < i.length; r++)
if (3 == t.sinfos[r].version) return 3;
return "data" != t.econtent.type ? 3 : 1
}, this.getEncodedHex = function() {
var t = this.params;
null != this.getEncodedHexPrepare && this.getEncodedHexPrepare(), 1 != t.fixed && this.checkAndFixParam();
var e = [];
e.push(new r({
int: t.version
}));
for (var s = [], h = 0; h < t.hashalgs.length; h++) {
var f = t.hashalgs[h];
s.push(new l({
name: f
}))
}
e.push(new i({
array: s
})), e.push(new a(t.econtent)), null != t.certs && e.push(new u(t.certs)), null != t.revinfos && e.push(new c(t.revinfos));
var g = [];
for (h = 0; h < t.sinfos.length; h++) {
var p = t.sinfos[h];
g.push(new o(p))
}
return e.push(new i({
array: g
})), new n({
array: e
}).getEncodedHex()
}, this.getContentInfo = function() {
return new h({
type: "signed-data",
obj: this
})
}, this.getContentInfoEncodedHex = function() {
return this.getContentInfo().getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.SignedData, ht.asn1.ASN1Object), ht.asn1.cms.CertificateSet = function(t) {
ht.asn1.cms.CertificateSet.superclass.constructor.call(this);
var e = Error,
r = ht.asn1,
i = r.DERTaggedObject,
n = r.DERSet,
s = r.ASN1Object;
this.params = null, this.getEncodedHex = function() {
var t, r = this.params,
a = [];
if (r instanceof Array) t = r;
else {
if (null == r.array) throw new e("cert array not specified");
t = r.array
}
for (var o = 0; o < t.length; o++) {
var h = Ct(t[o]),
u = new s;
u.hTLV = h, a.push(u)
}
var c = {
array: a
};
0 == r.sortflag && (c.sortflag = !1);
var l = new n(c);
return new i({
tag: "a0",
explicit: !1,
obj: l
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.CertificateSet, ht.asn1.ASN1Object), ht.asn1.cms.RevocationInfoChoices = function(t) {
ht.asn1.cms.RevocationInfoChoices.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params;
if (!t instanceof Array) throw new Error("params is not array");
for (var e = [], r = 0; r < t.length; r++) e.push(new ht.asn1.cms.RevocationInfoChoice(t[r]));
return ht.asn1.ASN1Util.newObject({
tag: {
tagi: "a1",
obj: {
set: e
}
}
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.RevocationInfoChoices, ht.asn1.ASN1Object), ht.asn1.cms.RevocationInfoChoice = function(t) {
ht.asn1.cms.RevocationInfoChoice.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params;
if (null != t.crl && "string" == typeof t.crl) {
var e = t.crl;
return -1 != t.crl.indexOf("-----BEGIN") && (e = Ct(t.crl)), e
}
if (null != t.ocsp) return ht.asn1.ASN1Util.newObject({
tag: {
tagi: "a1",
obj: new ht.asn1.cms.OtherRevocationFormat(t)
}
}).getEncodedHex();
throw new Error("property crl or ocsp undefined")
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.RevocationInfoChoice, ht.asn1.ASN1Object), ht.asn1.cms.OtherRevocationFormat = function(t) {
ht.asn1.cms.OtherRevocationFormat.superclass.constructor.call(this);
var e = Error,
r = ht,
i = r.asn1.ASN1Util.newObject,
n = r.lang.String.isHex;
this.params = null, this.getEncodedHex = function() {
var t = this.params;
if (null == t.ocsp) throw new e("property ocsp not specified");
if (!n(t.ocsp) || !lt.isASN1HEX(t.ocsp)) throw new e("ocsp value not ASN.1 hex string");
return i({
seq: [{
oid: "1.3.6.1.5.5.7.16.2"
}, {
asn1: {
tlv: t.ocsp
}
}]
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cms.OtherRevocationFormat, ht.asn1.ASN1Object), ht.asn1.cms.CMSUtil = new function() {}, ht.asn1.cms.CMSUtil.newSignedData = function(t) {
return new ht.asn1.cms.SignedData(t)
}, ht.asn1.cms.CMSUtil.verifySignedData = function(t) {
var e = ht,
r = e.asn1,
i = r.cms,
n = (i.SignerInfo, i.SignedData, i.SigningTime, i.SigningCertificate, i.SigningCertificateV2, r.cades.SignaturePolicyIdentifier, e.lang.String.isHex),
s = lt,
a = s.getVbyList,
o = s.getTLVbyList,
h = s.getIdxbyList,
u = s.getChildIdx,
c = s.getTLV,
l = s.oidname,
f = e.crypto.Util.hashHex;
void 0 === t.cms && n(t.cms);
var g = t.cms,
p = function(t, e) {
var r = e.idx;
e.signerid_issuer1 = o(t, r, [1, 0], "30"), e.signerid_serial1 = a(t, r, [1, 1], "02"), e.hashalg = l(a(t, r, [2, 0], "06"));
var i = h(t, r, [3], "a0");
e.idxSignedAttrs = i, d(t, e, i);
var n = u(t, r).length;
if (n < 6) throw "malformed SignerInfo";
e.sigalg = l(a(t, r, [n - 2, 0], "06")), e.sigval = a(t, r, [n - 1], "04")
},
d = function(t, e, r) {
var i = u(t, r);
e.signedAttrIdxList = i;
for (var n = 0; n < i.length; n++) {
var s, o = i[n],
h = a(t, o, [0], "06");
"2a864886f70d010905" === h ? (s = Et(a(t, o, [1, 0])), e.saSigningTime = s) : "2a864886f70d010904" === h && (s = a(t, o, [1, 0], "04"), e.saMessageDigest = s)
}
},
v = function(t, e, r, i) {
r.verifyDetail = {};
var n = r.verifyDetail,
s = e.parse.econtent,
a = r.hashalg,
o = r.saMessageDigest;
n.validMessageDigest = !1, f(s, a) === o && (n.validMessageDigest = !0),
function(t, e, r, i) {
var n, s = e.parse.certsIdx;
if (void 0 === e.certs) {
n = [], e.certkeys = [];
for (var a = u(t, s), o = 0; o < a.length; o++) {
var h = c(t, a[o]),
l = new $t;
l.readCertHex(h), n[o] = l, e.certkeys[o] = l.getPublicKey()
}
e.certs = n
} else n = e.certs;
for (e.cccc = n.length, e.cccci = a.length, o = 0; o < n.length; o++) {
var f = l.getIssuerHex(),
g = l.getSerialNumberHex();
r.signerid_issuer1 === f && r.signerid_serial1 === g && (r.certkey_idx = o)
}
}(t, e, r), n.validSignatureValue = !1;
var h = r.sigalg,
l = "31" + c(t, r.idxSignedAttrs).substr(2);
r.signedattrshex = l;
var g = e.certs[r.certkey_idx].getPublicKey(),
p = new ht.crypto.Signature({
alg: h
});
p.init(g), p.updateHex(l);
var d = p.verify(r.sigval);
n.validSignatureValue_isValid = d, !0 === d && (n.validSignatureValue = !0), r.isValid = !1, n.validMessageDigest && n.validSignatureValue && (r.isValid = !0)
},
y = {
isValid: !1,
parse: {}
};
return function(t, e) {
if ("2a864886f70d010702" !== a(t, 0, [0], "06")) return e;
e.cmsType = "signedData", e.econtent = a(t, 0, [1, 0, 2, 1, 0]),
function(t, e) {
for (var r, i = 3; i < 6; i++)
if (void 0 !== (r = h(t, 0, [1, 0, i]))) {
var n = t.substr(r, 2);
"a0" === n && (e.certsIdx = r), "a1" === n && (e.revinfosIdx = r), "31" === n && (e.signerinfosIdx = r)
}
}(t, e), e.signerInfos = [],
function(t, e) {
var r = e.signerinfosIdx;
if (void 0 !== r) {
var i = u(t, r);
e.signerInfoIdxList = i;
for (var n = 0; n < i.length; n++) {
var s = {
idx: i[n]
};
p(t, s), e.signerInfos.push(s)
}
}
}(t, e)
}(g, y.parse),
function(t, e) {
for (var r = e.parse.signerInfos, i = r.length, n = !0, s = 0; s < i; s++) {
var a = r[s];
v(t, e, a), a.isValid || (n = !1)
}
e.isValid = n
}(g, y), y
}, ht.asn1.cms.CMSParser = function() {
var t = Error,
e = $t,
r = new e,
i = lt,
n = i.getV,
s = i.getTLV,
a = (i.getIdxbyList, i.getTLVbyList),
o = i.getTLVbyListEx,
h = i.getVbyList,
u = i.getVbyListEx,
c = i.getChildIdx;
this.getCMSSignedData = function(t) {
var e = a(t, 0, [1, 0]);
return this.getSignedData(e)
}, this.getSignedData = function(t) {
var e = c(t, 0),
r = {},
i = n(t, e[0]),
a = parseInt(i, 16);
r.version = a;
var h = s(t, e[1]);
r.hashalgs = this.getHashAlgArray(h);
var u = s(t, e[2]);
r.econtent = this.getEContent(u);
var l = o(t, 0, ["[0]"]);
null != l && (r.certs = this.getCertificateSet(l)), o(t, 0, ["[1]"]);
var f = o(t, 0, [3]);
return r.sinfos = this.getSignerInfos(f), r
}, this.getHashAlgArray = function(t) {
for (var r = c(t, 0), i = new e, n = [], a = 0; a < r.length; a++) {
var o = s(t, r[a]),
h = i.getAlgorithmIdentifierName(o);
n.push(h)
}
return n
}, this.getEContent = function(t) {
var e = {},
r = h(t, 0, [0]),
i = h(t, 0, [1, 0]);
return e.type = ht.asn1.x509.OID.oid2name(lt.hextooidstr(r)), e.content = {
hex: i
}, e
}, this.getSignerInfos = function(t) {
for (var e = [], r = c(t, 0), i = 0; i < r.length; i++) {
var n = s(t, r[i]),
a = this.getSignerInfo(n);
e.push(a)
}
return e
}, this.getSignerInfo = function(t) {
var e = {},
n = c(t, 0),
a = i.getInt(t, n[0], -1); - 1 != a && (e.version = a);
var h = s(t, n[1]),
l = this.getIssuerAndSerialNumber(h);
e.id = l;
var f = s(t, n[2]),
g = r.getAlgorithmIdentifierName(f);
e.hashalg = g;
var p = o(t, 0, ["[0]"]);
if (null != p) {
var d = this.getAttributeList(p);
e.sattrs = d
}
var v = o(t, 0, [3]),
y = r.getAlgorithmIdentifierName(v);
e.sigalg = y;
var m = u(t, 0, [4]);
e.sighex = m;
var S = o(t, 0, ["[1]"]);
if (null != S) {
var x = this.getAttributeList(S);
e.uattrs = x
}
return e
}, this.getSignerIdentifier = function(t) {
if ("30" == t.substr(0, 2)) return this.getIssuerAndSerialNumber(t);
throw new Error("SKID of signerIdentifier not supported")
}, this.getIssuerAndSerialNumber = function(t) {
var e = {
type: "isssn"
},
i = c(t, 0),
a = s(t, i[0]);
e.issuer = r.getX500Name(a);
var o = n(t, i[1]);
return e.serial = {
hex: o
}, e
}, this.getAttributeList = function(t) {
for (var e = [], r = c(t, 0), i = 0; i < r.length; i++) {
var n = s(t, r[i]),
a = this.getAttribute(n);
e.push(a)
}
return {
array: e
}
}, this.getAttribute = function(t) {
var e = {},
r = c(t, 0),
n = i.getOID(t, r[0]),
a = ht.asn1.x509.OID.oid2name(n);
e.attr = a;
var o = s(t, r[1]),
h = c(o, 0);
if (1 == h.length) e.valhex = s(o, h[0]);
else {
for (var u = [], l = 0; l < h.length; l++) u.push(s(o, h[l]));
e.valhex = u
}
return "contentType" == a ? this.setContentType(e) : "messageDigest" == a ? this.setMessageDigest(e) : "signingTime" == a ? this.setSigningTime(e) : "signingCertificate" == a ? this.setSigningCertificate(e) : "signingCertificateV2" == a ? this.setSigningCertificateV2(e) : "signaturePolicyIdentifier" == a && this.setSignaturePolicyIdentifier(e), e
}, this.setContentType = function(t) {
var e = i.getOIDName(t.valhex, 0, null);
null != e && (t.type = e, delete t.valhex)
}, this.setSigningTime = function(t) {
var e = Et(n(t.valhex, 0));
t.str = e, delete t.valhex
}, this.setMessageDigest = function(t) {
var e = n(t.valhex, 0);
t.hex = e, delete t.valhex
}, this.setSigningCertificate = function(t) {
var e = c(t.valhex, 0);
if (e.length > 0) {
for (var r = s(t.valhex, e[0]), i = c(r, 0), n = [], a = 0; a < i.length; a++) {
var o = s(r, i[a]),
h = this.getESSCertID(o);
n.push(h)
}
t.array = n
}
if (e.length > 1) {
var u = s(t.valhex, e[1]);
t.polhex = u
}
delete t.valhex
}, this.setSignaturePolicyIdentifier = function(t) {
var r = c(t.valhex, 0);
if (r.length > 0) {
var a = i.getOID(t.valhex, r[0]);
t.oid = a
}
if (r.length > 1) {
var o = new e,
h = c(t.valhex, r[1]),
u = s(t.valhex, h[0]),
l = o.getAlgorithmIdentifierName(u);
t.alg = l;
var f = n(t.valhex, h[1]);
t.hash = f
}
delete t.valhex
}, this.setSigningCertificateV2 = function(t) {
var e = c(t.valhex, 0);
if (e.length > 0) {
for (var r = s(t.valhex, e[0]), i = c(r, 0), n = [], a = 0; a < i.length; a++) {
var o = s(r, i[a]),
h = this.getESSCertIDv2(o);
n.push(h)
}
t.array = n
}
if (e.length > 1) {
var u = s(t.valhex, e[1]);
t.polhex = u
}
delete t.valhex
}, this.getESSCertID = function(t) {
var e = {},
r = c(t, 0);
if (r.length > 0) {
var i = n(t, r[0]);
e.hash = i
}
if (r.length > 1) {
var a = s(t, r[1]),
o = this.getIssuerSerial(a);
null != o.serial && (e.serial = o.serial), null != o.issuer && (e.issuer = o.issuer)
}
return e
}, this.getESSCertIDv2 = function(e) {
var i = {},
a = c(e, 0);
if (a.length < 1 || 3 < a.length) throw new t("wrong number of elements");
var o = 0;
if ("30" == e.substr(a[0], 2)) {
var h = s(e, a[0]);
i.alg = r.getAlgorithmIdentifierName(h), o++
} else i.alg = "sha256";
var u = n(e, a[o]);
if (i.hash = u, a.length > o + 1) {
var l = s(e, a[o + 1]),
f = this.getIssuerSerial(l);
i.issuer = f.issuer, i.serial = f.serial
}
return i
}, this.getIssuerSerial = function(t) {
var e = {},
i = c(t, 0),
a = s(t, i[0]),
o = r.getGeneralNames(a)[0].dn;
e.issuer = o;
var h = n(t, i[1]);
return e.serial = {
hex: h
}, e
}, this.getCertificateSet = function(t) {
for (var e = c(t, 0), r = [], i = 0; i < e.length; i++) {
var n = s(t, e[i]);
if ("30" == n.substr(0, 2)) {
var a = It(n, "CERTIFICATE");
r.push(a)
}
}
return {
array: r,
sortflag: !1
}
}
}, void 0 !== ht && ht || (ht = {}), void 0 !== ht.asn1 && ht.asn1 || (ht.asn1 = {}), void 0 !== ht.asn1.tsp && ht.asn1.tsp || (ht.asn1.tsp = {}), ht.asn1.tsp.TimeStampToken = function(t) {
var e = ht.asn1.tsp;
e.TimeStampToken.superclass.constructor.call(this), this.params = null, this.getEncodedHexPrepare = function() {
var t = new e.TSTInfo(this.params.econtent.content);
this.params.econtent.content.hex = t.getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.tsp.TimeStampToken, ht.asn1.cms.SignedData), ht.asn1.tsp.TSTInfo = function(t) {
Error;
var e = ht.asn1,
r = e.DERSequence,
i = e.DERInteger,
n = e.DERBoolean,
s = e.DERGeneralizedTime,
a = e.DERObjectIdentifier,
o = e.DERTaggedObject,
h = e.tsp,
u = h.MessageImprint,
c = h.Accuracy,
l = (e.x509.X500Name, e.x509.GeneralName);
if (h.TSTInfo.superclass.constructor.call(this), this.dVersion = new i({
int: 1
}), this.dPolicy = null, this.dMessageImprint = null, this.dSerial = null, this.dGenTime = null, this.dAccuracy = null, this.dOrdering = null, this.dNonce = null, this.dTsa = null, this.getEncodedHex = function() {
var t = [this.dVersion];
if (null == this.dPolicy) throw new Error("policy shall be specified.");
if (t.push(this.dPolicy), null == this.dMessageImprint) throw new Error("messageImprint shall be specified.");
if (t.push(this.dMessageImprint), null == this.dSerial) throw new Error("serialNumber shall be specified.");
if (t.push(this.dSerial), null == this.dGenTime) throw new Error("genTime shall be specified.");
t.push(this.dGenTime), null != this.dAccuracy && t.push(this.dAccuracy), null != this.dOrdering && t.push(this.dOrdering), null != this.dNonce && t.push(this.dNonce), null != this.dTsa && t.push(this.dTsa);
var e = new r({
array: t
});
return this.hTLV = e.getEncodedHex(), this.hTLV
}, void 0 !== t) {
if ("string" == typeof t.policy) {
if (!t.policy.match(/^[0-9.]+$/)) throw "policy shall be oid like 0.1.4.134";
this.dPolicy = new a({
oid: t.policy
})
}
void 0 !== t.messageImprint && (this.dMessageImprint = new u(t.messageImprint)), void 0 !== t.serial && (this.dSerial = new i(t.serial)), void 0 !== t.genTime && (this.dGenTime = new s(t.genTime)), void 0 !== t.accuracy && (this.dAccuracy = new c(t.accuracy)), void 0 !== t.ordering && 1 == t.ordering && (this.dOrdering = new n), void 0 !== t.nonce && (this.dNonce = new i(t.nonce)), void 0 !== t.tsa && (this.dTsa = new o({
tag: "a0",
explicit: !0,
obj: new l({
dn: t.tsa
})
}))
}
}, zt(ht.asn1.tsp.TSTInfo, ht.asn1.ASN1Object), ht.asn1.tsp.Accuracy = function(t) {
var e = ht.asn1,
r = e.ASN1Util.newObject;
e.tsp.Accuracy.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params,
e = [];
return null != t.seconds && "number" == typeof t.seconds && e.push({
int: t.seconds
}), null != t.millis && "number" == typeof t.millis && e.push({
tag: {
tagi: "80",
obj: {
int: t.millis
}
}
}), null != t.micros && "number" == typeof t.micros && e.push({
tag: {
tagi: "81",
obj: {
int: t.micros
}
}
}), r({
seq: e
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.tsp.Accuracy, ht.asn1.ASN1Object), ht.asn1.tsp.MessageImprint = function(t) {
var e = ht.asn1,
r = e.DERSequence,
i = e.DEROctetString,
n = e.x509.AlgorithmIdentifier;
e.tsp.MessageImprint.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params,
e = new n({
name: t.alg
}),
s = new i({
hex: t.hash
});
return new r({
array: [e, s]
}).getEncodedHex()
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.tsp.MessageImprint, ht.asn1.ASN1Object), ht.asn1.tsp.TimeStampReq = function(t) {
var e = ht.asn1,
r = e.DERSequence,
i = e.DERInteger,
n = e.DERBoolean,
s = (e.ASN1Object, e.DERObjectIdentifier),
a = e.tsp,
o = a.MessageImprint;
a.TimeStampReq.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params,
e = [];
return e.push(new i({
int: 1
})), t.messageImprint instanceof ht.asn1.ASN1Object ? e.push(t.messageImprint) : e.push(new o(t.messageImprint)), null != t.policy && e.push(new s(t.policy)), null != t.nonce && e.push(new i(t.nonce)), 1 == t.certreq && e.push(new n), new r({
array: e
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.tsp.TimeStampReq, ht.asn1.ASN1Object), ht.asn1.tsp.TimeStampResp = function(t) {
var e = ht.asn1,
r = e.DERSequence,
i = (e.ASN1Object, e.tsp),
n = i.PKIStatusInfo;
i.TimeStampResp.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params,
s = [new n(t.statusinfo)];
return null != t.econtent && s.push(new i.TimeStampToken(t).getContentInfo()), null != t.tst && t.tst instanceof e.ASN1Object && s.push(t.tst), new r({
array: s
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.tsp.TimeStampResp, ht.asn1.ASN1Object), ht.asn1.tsp.PKIStatusInfo = function(t) {
var e = Error,
r = ht.asn1,
i = r.DERSequence,
n = r.tsp,
s = n.PKIStatus,
a = n.PKIFreeText,
o = n.PKIFailureInfo;
n.PKIStatusInfo.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params,
r = [];
if ("string" == typeof t) r.push(new s(t));
else {
if (null == t.status) throw new e("property 'status' unspecified");
r.push(new s(t.status)), null != t.statusstr && r.push(new a(t.statusstr)), null != t.failinfo && r.push(new o(t.failinfo))
}
return new i({
array: r
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.tsp.PKIStatusInfo, ht.asn1.ASN1Object), ht.asn1.tsp.PKIStatus = function(t) {
var e = Error,
r = ht.asn1,
i = r.DERInteger;
r.tsp.PKIStatus.superclass.constructor.call(this);
var n = {
granted: 0,
grantedWithMods: 1,
rejection: 2,
waiting: 3,
revocationWarning: 4,
revocationNotification: 5
};
this.params = null, this.getEncodedHex = function() {
var t, r = this.params;
if ("string" == typeof r) try {
t = n[r]
} catch (c) {
throw new e("undefined name: " + r)
} else {
if ("number" != typeof r) throw new e("unsupported params");
t = r
}
return new i({
int: t
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.tsp.PKIStatus, ht.asn1.ASN1Object), ht.asn1.tsp.PKIFreeText = function(t) {
var e = Error,
r = ht.asn1,
i = r.DERSequence,
n = r.DERUTF8String;
r.tsp.PKIFreeText.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params;
if (!t instanceof Array) throw new e("wrong params: not array");
for (var r = [], s = 0; s < t.length; s++) r.push(new n({
str: t[s]
}));
return new i({
array: r
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.tsp.PKIFreeText, ht.asn1.ASN1Object), ht.asn1.tsp.PKIFailureInfo = function(t) {
var e = Error,
r = ht.asn1,
i = r.DERBitString,
n = r.tsp.PKIFailureInfo,
s = {
badAlg: 0,
badRequest: 2,
badDataFormat: 5,
timeNotAvailable: 14,
unacceptedPolicy: 15,
unacceptedExtension: 16,
addInfoNotAvailable: 17,
systemFailure: 25
};
n.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t, r = this.params;
if ("string" == typeof r) try {
t = s[r]
} catch (c) {
throw new e("undefined name: " + r)
} else {
if ("number" != typeof r) throw new e("wrong params");
t = r
}
return new i({
bin: t.toString(2)
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.tsp.PKIFailureInfo, ht.asn1.ASN1Object), ht.asn1.tsp.AbstractTSAAdapter = function(t) {
this.getTSTHex = function(t, e) {
throw "not implemented yet"
}
}, ht.asn1.tsp.SimpleTSAAdapter = function(t) {
var e = ht,
r = e.asn1.tsp,
i = e.crypto.Util.hashHex;
r.SimpleTSAAdapter.superclass.constructor.call(this), this.params = null, this.serial = 0, this.getTSTHex = function(t, e) {
var n = i(t, e);
this.params.econtent.content.messageImprint = {
alg: e,
hash: n
}, this.params.econtent.content.serial = {
int: this.serial++
};
var s = Math.floor(1e9 * Math.random());
return this.params.econtent.content.nonce = {
int: s
}, new r.TimeStampToken(this.params).getContentInfoEncodedHex()
}, void 0 !== t && (this.params = t)
}, zt(ht.asn1.tsp.SimpleTSAAdapter, ht.asn1.tsp.AbstractTSAAdapter), ht.asn1.tsp.FixedTSAAdapter = function(t) {
var e = ht,
r = e.asn1.tsp,
i = e.crypto.Util.hashHex;
r.FixedTSAAdapter.superclass.constructor.call(this), this.params = null, this.getTSTHex = function(t, e) {
var n = i(t, e);
return this.params.econtent.content.messageImprint = {
alg: e,
hash: n
}, new r.TimeStampToken(this.params).getContentInfoEncodedHex()
}, void 0 !== t && (this.params = t)
}, zt(ht.asn1.tsp.FixedTSAAdapter, ht.asn1.tsp.AbstractTSAAdapter), ht.asn1.tsp.TSPUtil = new function() {}, ht.asn1.tsp.TSPUtil.newTimeStampToken = function(t) {
return new ht.asn1.tsp.TimeStampToken(t)
}, ht.asn1.tsp.TSPUtil.parseTimeStampReq = function(t) {
var e = lt,
r = e.getChildIdx,
i = e.getV,
n = e.getTLV,
s = {
certreq: !1
},
a = r(t, 0);
if (a.length < 2) throw "TimeStampReq must have at least 2 items";
var o = n(t, a[1]);
s.messageImprint = ht.asn1.tsp.TSPUtil.parseMessageImprint(o);
for (var h = 2; h < a.length; h++) {
var u = a[h],
c = t.substr(u, 2);
if ("06" == c) {
var l = i(t, u);
s.policy = e.hextooidstr(l)
}
"02" == c && (s.nonce = i(t, u)), "01" == c && (s.certreq = !0)
}
return s
}, ht.asn1.tsp.TSPUtil.parseMessageImprint = function(t) {
var e = lt,
r = e.getChildIdx,
i = e.getV,
n = e.getIdxbyList,
s = {};
if ("30" != t.substr(0, 2)) throw "head of messageImprint hex shall be '30'";
r(t, 0);
var a = i(t, n(t, 0, [0, 0])),
o = e.hextooidstr(a),
h = ht.asn1.x509.OID.oid2name(o);
if ("" == h) throw "hashAlg name undefined: " + o;
var u = h,
c = n(t, 0, [1]);
return s.alg = u, s.hash = i(t, c), s
}, ht.asn1.tsp.TSPParser = function() {
Error;
var t = new $t,
e = lt,
r = e.getV,
i = e.getTLV,
n = e.getIdxbyList,
s = (e.getTLVbyListEx, e.getChildIdx),
a = ["granted", "grantedWithMods", "rejection", "waiting", "revocationWarning", "revocationNotification"],
o = {
0: "badAlg",
2: "badRequest",
5: "badDataFormat",
14: "timeNotAvailable",
15: "unacceptedPolicy",
16: "unacceptedExtension",
17: "addInfoNotAvailable",
25: "systemFailure"
};
this.getResponse = function(t) {
var e = s(t, 0);
if (1 == e.length) return this.getPKIStatusInfo(i(t, e[0]));
if (e.length > 1) {
var r = this.getPKIStatusInfo(i(t, e[0])),
n = i(t, e[1]),
a = this.getToken(n);
return a.statusinfo = r, a
}
}, this.getToken = function(t) {
var e = (new ht.asn1.cms.CMSParser).getCMSSignedData(t);
return this.setTSTInfo(e), e
}, this.setTSTInfo = function(t) {
var e = t.econtent;
if ("tstinfo" == e.type) {
var r = e.content.hex,
i = this.getTSTInfo(r);
e.content = i
}
}, this.getTSTInfo = function(e) {
var n = {},
a = s(e, 0),
o = r(e, a[1]);
n.policy = _t(o);
var h = i(e, a[2]);
n.messageImprint = this.getMessageImprint(h);
var u = r(e, a[3]);
n.serial = {
hex: u
};
var c = r(e, a[4]);
n.genTime = {
str: Et(c)
};
var l = 0;
if (a.length > 5 && "30" == e.substr(a[5], 2)) {
var f = i(e, a[5]);
n.accuracy = this.getAccuracy(f), l++
}
if (a.length > 5 + l && "01" == e.substr(a[5 + l], 2) && ("ff" == r(e, a[5 + l]) && (n.ordering = !0), l++), a.length > 5 + l && "02" == e.substr(a[5 + l], 2)) {
var g = r(e, a[5 + l]);
n.nonce = {
hex: g
}, l++
}
if (a.length > 5 + l && "a0" == e.substr(a[5 + l], 2)) {
var p = i(e, a[5 + l]);
p = "30" + p.substr(2), pGeneralNames = t.getGeneralNames(p);
var d = pGeneralNames[0].dn;
n.tsa = d, l++
}
if (a.length > 5 + l && "a1" == e.substr(a[5 + l], 2)) {
var v = i(e, a[5 + l]);
v = "30" + v.substr(2);
var y = t.getExtParamArray(v);
n.ext = y, l++
}
return n
}, this.getAccuracy = function(t) {
for (var e = {}, i = s(t, 0), n = 0; n < i.length; n++) {
var a = t.substr(i[n], 2),
o = r(t, i[n]),
h = parseInt(o, 16);
"02" == a ? e.seconds = h : "80" == a ? e.millis = h : "81" == a && (e.micros = h)
}
return e
}, this.getMessageImprint = function(t) {
if ("30" != t.substr(0, 2)) throw new Error("head of messageImprint hex shall be x30");
var i = {},
a = (s(t, 0), n(t, 0, [0, 0])),
o = r(t, a),
h = e.hextooidstr(o),
u = ht.asn1.x509.OID.oid2name(h);
if ("" == u) throw new Error("hashAlg name undefined: " + h);
var c = u,
l = n(t, 0, [1]);
return i.alg = c, i.hash = r(t, l), i
}, this.getPKIStatusInfo = function(t) {
var e = {},
n = s(t, 0),
o = 0;
try {
var h = r(t, n[0]),
u = parseInt(h, 16);
e.status = a[u]
} catch (f) {}
if (n.length > 1 && "30" == t.substr(n[1], 2)) {
var c = i(t, n[1]);
e.statusstr = this.getPKIFreeText(c), o++
}
if (n.length > o && "03" == t.substr(n[1 + o], 2)) {
var l = i(t, n[1 + o]);
e.failinfo = this.getPKIFailureInfo(l)
}
return e
}, this.getPKIFreeText = function(t) {
for (var r = [], i = s(t, 0), n = 0; n < i.length; n++) r.push(e.getString(t, i[n]));
return r
}, this.getPKIFailureInfo = function(t) {
var r = e.getInt(t, 0);
return null != o[r] ? o[r] : r
}
}, void 0 !== ht && ht || (ht = {}), void 0 !== ht.asn1 && ht.asn1 || (ht.asn1 = {}), void 0 !== ht.asn1.cades && ht.asn1.cades || (ht.asn1.cades = {}), ht.asn1.cades.SignaturePolicyIdentifier = function(t) {
var e = ht.asn1.cades,
r = e.SignaturePolicyId;
e.SignaturePolicyIdentifier.superclass.constructor.call(this), this.typeOid = "1.2.840.113549.1.9.16.2.15", this.params = null, this.getValueArray = function() {
return [new r(this.params)]
}, this.setByParam = function(t) {
this.params = t
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cades.SignaturePolicyIdentifier, ht.asn1.cms.Attribute), ht.asn1.cades.SignaturePolicyId = function(t) {
var e = ht.asn1,
r = e.DERSequence,
i = e.DERObjectIdentifier,
n = (e.x509.AlgorithmIdentifier, e.cades),
s = n.SignaturePolicyId,
a = n.OtherHashAlgAndValue;
s.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params,
e = [];
return e.push(new i(t.oid)), e.push(new a(t)), new r({
array: e
}).getEncodedHex()
}, this.setByParam = function(t) {
this.params = t
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cades.SignaturePolicyId, ht.asn1.ASN1Object), ht.asn1.cades.OtherHashAlgAndValue = function(t) {
var e = Error,
r = ht.asn1,
i = r.DERSequence,
n = r.DEROctetString,
s = r.x509.AlgorithmIdentifier;
r.cades.OtherHashAlgAndValue.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params;
if (null == t.alg) throw new e("property 'alg' not specified");
if (null == t.hash && null == t.cert) throw new e("property 'hash' nor 'cert' not specified");
var r = null;
if (null != t.hash) r = t.hash;
else if (null != t.cert) {
if ("string" != typeof t.cert) throw new e("cert not string");
var a = t.cert; - 1 != t.cert.indexOf("-----BEGIN") && (a = Ct(t.cert)), r = ht.crypto.Util.hashHex(a, t.alg)
}
var o = [];
return o.push(new s({
name: t.alg
})), o.push(new n({
hex: r
})), new i({
array: o
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cades.OtherHashAlgAndValue, ht.asn1.ASN1Object), ht.asn1.cades.OtherHashValue = function(t) {
ht.asn1.cades.OtherHashValue.superclass.constructor.call(this);
var e = Error,
r = ht,
i = (r.lang.String.isHex, r.asn1.DEROctetString);
r.crypto.Util.hashHex, this.params = null, this.getEncodedHex = function() {
var t = this.params;
if (null == t.hash && null == t.cert) throw new e("hash or cert not specified");
var r = null;
if (null != t.hash) r = t.hash;
else if (null != t.cert) {
if ("string" != typeof t.cert) throw new e("cert not string");
var n = t.cert; - 1 != t.cert.indexOf("-----BEGIN") && (n = Ct(t.cert)), r = ht.crypto.Util.hashHex(n, "sha1")
}
return new i({
hex: r
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cades.OtherHashValue, ht.asn1.ASN1Object), ht.asn1.cades.SignatureTimeStamp = function(t) {
var e = Error,
r = ht,
i = r.lang.String.isHex,
n = r.asn1,
s = n.ASN1Object;
n.x509, n.cades.SignatureTimeStamp.superclass.constructor.call(this), this.typeOid = "1.2.840.113549.1.9.16.2.14", this.params = null, this.getValueArray = function() {
var t = this.params;
if (null != t.tst) {
if (i(t.tst)) return (r = new s).hTLV = t.tst, [r];
if (t.tst instanceof s) return [t.tst];
throw new e("params.tst has wrong value")
}
if (null != t.res) {
var r, n = t.res;
if (n instanceof s && (n = n.getEncodedHex()), "string" != typeof n || !i(n)) throw new e("params.res has wrong value");
return lt.getTLVbyList(n, 0, [1]), (r = new s).hTLV = t.tst, [r]
}
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cades.SignatureTimeStamp, ht.asn1.cms.Attribute), ht.asn1.cades.CompleteCertificateRefs = function(t) {
var e = Error,
r = ht,
i = r.asn1,
n = i.DERSequence,
s = i.cades,
a = s.OtherCertID,
o = r.lang.String.isHex;
s.CompleteCertificateRefs.superclass.constructor.call(this), this.typeOid = "1.2.840.113549.1.9.16.2.21", this.params = null, this.getValueArray = function() {
for (var t = this.params, r = [], i = 0; i < t.array.length; i++) {
var s = t.array[i];
if ("string" == typeof s)
if (-1 != s.indexOf("-----BEGIN")) s = {
cert: s
};
else {
if (!o(s)) throw new e("unsupported value: " + s);
s = {
hash: s
}
}
null != t.alg && null == s.alg && (s.alg = t.alg), null != t.hasis && null == s.hasis && (s.hasis = t.hasis);
var h = new a(s);
r.push(h)
}
return [new n({
array: r
})]
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cades.CompleteCertificateRefs, ht.asn1.cms.Attribute), ht.asn1.cades.OtherCertID = function(t) {
var e = ht.asn1,
r = e.DERSequence,
i = e.cms.IssuerSerial,
n = e.cades,
s = n.OtherHashValue,
a = n.OtherHashAlgAndValue;
n.OtherCertID.superclass.constructor.call(this), this.params = t, this.getEncodedHex = function() {
var t = this.params;
"string" == typeof t && (-1 != t.indexOf("-----BEGIN") ? t = {
cert: t
} : _isHex(t) && (t = {
hash: t
}));
var e, n = [];
if (e = null != t.alg ? new a(t) : new s(t), n.push(e), null != t.cert && 1 == t.hasis || null != t.issuer && null != t.serial) {
var o = new i(t);
n.push(o)
}
return new r({
array: n
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cades.OtherCertID, ht.asn1.ASN1Object), ht.asn1.cades.OtherHash = function(t) {
Error;
var e = ht,
r = e.asn1,
i = (r.cms, r.cades),
n = i.OtherHashAlgAndValue,
s = i.OtherHashValue,
a = (e.crypto.Util.hashHex, e.lang.String.isHex);
i.OtherHash.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params;
return "string" == typeof t && (-1 != t.indexOf("-----BEGIN") ? t = {
cert: t
} : a(t) && (t = {
hash: t
})), (null != t.alg ? new n(t) : new s(t)).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.cades.OtherHash, ht.asn1.ASN1Object), ht.asn1.cades.CAdESUtil = new function() {}, ht.asn1.cades.CAdESUtil.parseSignedDataForAddingUnsigned = function(t) {
return (new ht.asn1.cms.CMSParser).getCMSSignedData(t)
}, ht.asn1.cades.CAdESUtil.parseSignerInfoForAddingUnsigned = function(t, e, r) {
var i = lt,
n = i.getChildIdx,
s = i.getTLV,
a = i.getV,
o = ht.asn1,
h = o.ASN1Object,
u = o.cms,
c = u.AttributeList,
l = u.SignerInfo,
f = {},
g = n(t, e);
if (6 != g.length) throw "not supported items for SignerInfo (!=6)";
var p = g.shift();
f.version = s(t, p);
var d = g.shift();
f.si = s(t, d);
var v = g.shift();
f.digalg = s(t, v);
var y = g.shift();
f.sattrs = s(t, y);
var m = g.shift();
f.sigalg = s(t, m);
var S = g.shift();
f.sig = s(t, S), f.sigval = a(t, S);
var x = null;
return f.obj = new l, (x = new h).hTLV = f.version, f.obj.dCMSVersion = x, (x = new h).hTLV = f.si, f.obj.dSignerIdentifier = x, (x = new h).hTLV = f.digalg, f.obj.dDigestAlgorithm = x, (x = new h).hTLV = f.sattrs, f.obj.dSignedAttrs = x, (x = new h).hTLV = f.sigalg, f.obj.dSigAlg = x, (x = new h).hTLV = f.sig, f.obj.dSig = x, f.obj.dUnsignedAttrs = new c, f
}, void 0 !== ht.asn1.csr && ht.asn1.csr || (ht.asn1.csr = {}), ht.asn1.csr.CertificationRequest = function(t) {
var e = ht.asn1,
r = e.DERBitString,
i = e.DERSequence,
n = e.csr,
s = (e.x509, n.CertificationRequestInfo);
n.CertificationRequest.superclass.constructor.call(this), this.setByParam = function(t) {
this.params = t
}, this.sign = function() {
var t = new s(this.params).getEncodedHex(),
e = new ht.crypto.Signature({
alg: this.params.sigalg
});
e.init(this.params.sbjprvkey), e.updateHex(t);
var r = e.sign();
this.params.sighex = r
}, this.getPEM = function() {
return It(this.getEncodedHex(), "CERTIFICATE REQUEST")
}, this.getEncodedHex = function() {
var t = this.params,
e = new ht.asn1.csr.CertificationRequestInfo(this.params),
n = new ht.asn1.x509.AlgorithmIdentifier({
name: t.sigalg
});
if (null == t.sighex && null != t.sbjprvkey && this.sign(), null == t.sighex) throw new Error("sighex or sbjprvkey parameter not defined");
var s = new r({
hex: "00" + t.sighex
});
return new i({
array: [e, n, s]
}).getEncodedHex()
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.csr.CertificationRequest, ht.asn1.ASN1Object), ht.asn1.csr.CertificationRequestInfo = function(t) {
var e = ht.asn1,
r = (e.DERBitString, e.DERSequence),
i = e.DERInteger,
n = e.DERUTF8String,
s = e.DERTaggedObject,
a = e.ASN1Util.newObject,
o = e.csr,
h = e.x509,
u = h.X500Name,
c = h.Extensions,
l = h.SubjectPublicKeyInfo;
o.CertificationRequestInfo.superclass.constructor.call(this), this.params = null, this.setByParam = function(t) {
null != t && (this.params = t)
}, this.getEncodedHex = function() {
var t = this.params,
e = [];
if (e.push(new i({
int: 0
})), e.push(new u(t.subject)), e.push(new l(Gt.getKey(t.sbjpubkey))), null != t.extreq) {
var o = new c(t.extreq),
h = a({
tag: {
tag: "a0",
explict: !0,
obj: {
seq: [{
oid: "1.2.840.113549.1.9.14"
}, {
set: [o]
}]
}
}
});
e.push(h)
} else e.push(new s({
tag: "a0",
explicit: !1,
obj: new n({
str: ""
})
}));
return new r({
array: e
}).getEncodedHex()
}, null != t && this.setByParam(t)
}, zt(ht.asn1.csr.CertificationRequestInfo, ht.asn1.ASN1Object), ht.asn1.csr.CSRUtil = new function() {}, ht.asn1.csr.CSRUtil.newCSRPEM = function(t) {
return new ht.asn1.csr.CertificationRequest(t).getPEM()
}, ht.asn1.csr.CSRUtil.getParam = function(t) {
var e = lt,
r = e.getV;
_getIdxbyList = e.getIdxbyList, _getTLVbyList = e.getTLVbyList, _getTLVbyListEx = e.getTLVbyListEx, _getVbyListEx = e.getVbyListEx;
var i = {};
if (-1 == t.indexOf("-----BEGIN CERTIFICATE REQUEST")) throw new Error("argument is not PEM file");
var n = Ct(t, "CERTIFICATE REQUEST");
try {
var s = _getTLVbyListEx(n, 0, [0, 1]);
if ("3000" == s) i.subject = {};
else {
var a = new $t;
i.subject = a.getX500Name(s)
}
} catch (o) {}
var h = _getTLVbyListEx(n, 0, [0, 2]),
u = Gt.getKey(h, null, "pkcs8pub");
i.sbjpubkey = Gt.getPEM(u, "PKCS8PUB");
var c, l = "2a864886f70d01090e" != r(c = n, _getIdxbyList(c, 0, [0, 3, 0, 0], "06")) ? null : _getTLVbyList(c, 0, [0, 3, 0, 1, 0], "30");
a = new $t, null != l && (i.extreq = a.getExtParamArray(l));
try {
var f = _getTLVbyListEx(n, 0, [1], "30");
a = new $t, i.sigalg = a.getAlgorithmIdentifierName(f)
} catch (o) {}
try {
var g = _getVbyListEx(n, 0, [2]);
i.sighex = g
} catch (o) {}
return i
}, void 0 !== ht && ht || (ht = {}), void 0 !== ht.asn1 && ht.asn1 || (ht.asn1 = {}), void 0 !== ht.asn1.ocsp && ht.asn1.ocsp || (ht.asn1.ocsp = {}), ht.asn1.ocsp.DEFAULT_HASH = "sha1", ht.asn1.ocsp.OCSPResponse = function(t) {
ht.asn1.ocsp.OCSPResponse.superclass.constructor.call(this), ht.asn1.DEREnumerated;
var e = ht.asn1.ASN1Util.newObject,
r = ht.asn1.ocsp.ResponseBytes,
i = ["successful", "malformedRequest", "internalError", "tryLater", "_not_used_", "sigRequired", "unauthorized"];
this.params = null, this._getStatusCode = function() {
var t = this.params.resstatus;
return "number" == typeof t ? t : "string" != typeof t ? -1 : i.indexOf(t)
}, this.setByParam = function(t) {
this.params = t
}, this.getEncodedHex = function() {
var t = this.params,
i = this._getStatusCode();
if (-1 == i) throw new Error("responseStatus not supported: " + t.resstatus);
if (0 != i) return e({
seq: [{
enum: {
int: i
}
}]
}).getEncodedHex();
var n = new r(t);
return e({
seq: [{
enum: {
int: 0
}
}, {
tag: {
tag: "a0",
explicit: !0,
obj: n
}
}]
}).getEncodedHex()
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.ocsp.OCSPResponse, ht.asn1.ASN1Object), ht.asn1.ocsp.ResponseBytes = function(t) {
ht.asn1.ocsp.ResponseBytes.superclass.constructor.call(this);
var e = ht.asn1,
r = e.DERSequence,
i = e.DERObjectIdentifier,
n = e.DEROctetString,
s = e.ocsp.BasicOCSPResponse;
this.params = null, this.setByParam = function(t) {
this.params = t
}, this.getEncodedHex = function() {
var t = this.params;
if ("ocspBasic" != t.restype) throw new Error("not supported responseType: " + t.restype);
var e = new s(t),
a = [];
return a.push(new i({
name: "ocspBasic"
})), a.push(new n({
hex: e.getEncodedHex()
})), new r({
array: a
}).getEncodedHex()
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.ocsp.ResponseBytes, ht.asn1.ASN1Object), ht.asn1.ocsp.BasicOCSPResponse = function(t) {
ht.asn1.ocsp.BasicOCSPResponse.superclass.constructor.call(this);
var e = Error,
r = ht.asn1,
i = r.ASN1Object,
n = r.DERSequence,
s = (r.DERGeneralizedTime, r.DERTaggedObject),
a = r.DERBitString,
o = (r.x509.Extensions, r.x509.AlgorithmIdentifier),
h = r.ocsp;
h.ResponderID, _SingleResponseList = h.SingleResponseList, _ResponseData = h.ResponseData, this.params = null, this.setByParam = function(t) {
this.params = t
}, this.sign = function() {
var t = this.params,
e = t.tbsresp.getEncodedHex(),
r = new ht.crypto.Signature({
alg: t.sigalg
});
r.init(t.reskey), r.updateHex(e), t.sighex = r.sign()
}, this.getEncodedHex = function() {
var t = this.params;
null == t.tbsresp && (t.tbsresp = new _ResponseData(t)), null == t.sighex && null != t.reskey && this.sign();
var r = [];
if (r.push(t.tbsresp), r.push(new o({
name: t.sigalg
})), r.push(new a({
hex: "00" + t.sighex
})), null != t.certs && null != t.certs.length) {
for (var h = [], u = 0; u < t.certs.length; u++) {
var c = t.certs[u],
l = null;
if (lt.isASN1HEX(c)) l = c;
else {
if (!c.match(/-----BEGIN/)) throw new e("certs[" + u + "] not hex or PEM");
l = Ct(c)
}
h.push(new i({
tlv: l
}))
}
var f = new n({
array: h
});
r.push(new s({
tag: "a0",
explicit: !0,
obj: f
}))
}
return new n({
array: r
}).getEncodedHex()
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.ocsp.BasicOCSPResponse, ht.asn1.ASN1Object), ht.asn1.ocsp.ResponseData = function(t) {
ht.asn1.ocsp.ResponseData.superclass.constructor.call(this);
var e = Error,
r = ht.asn1,
i = r.DERSequence,
n = r.DERGeneralizedTime,
s = r.DERTaggedObject,
a = r.x509.Extensions,
o = r.ocsp,
h = o.ResponderID;
_SingleResponseList = o.SingleResponseList, this.params = null, this.getEncodedHex = function() {
var t = this.params;
null != t.respid && new e("respid not specified"), null != t.prodat && new e("prodat not specified"), null != t.array && new e("array not specified");
var r = [];
if (r.push(new h(t.respid)), r.push(new n(t.prodat)), r.push(new _SingleResponseList(t.array)), null != t.ext) {
var o = new a(t.ext);
r.push(new s({
tag: "a1",
explicit: !0,
obj: o
}))
}
return new i({
array: r
}).getEncodedHex()
}, this.setByParam = function(t) {
this.params = t
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.ocsp.ResponseData, ht.asn1.ASN1Object), ht.asn1.ocsp.ResponderID = function(t) {
ht.asn1.ocsp.ResponderID.superclass.constructor.call(this);
var e = ht.asn1,
r = e.ASN1Util.newObject,
i = e.x509.X500Name;
this.params = null, this.getEncodedHex = function() {
var t = this.params;
if (null != t.key) return r({
tag: {
tag: "a2",
explicit: !0,
obj: {
octstr: {
hex: t.key
}
}
}
}).getEncodedHex();
if (null != t.name) return r({
tag: {
tag: "a1",
explicit: !0,
obj: new i(t.name)
}
}).getEncodedHex();
throw new Error("key or name not specified")
}, this.setByParam = function(t) {
this.params = t
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.ocsp.ResponderID, ht.asn1.ASN1Object), ht.asn1.ocsp.SingleResponseList = function(t) {
ht.asn1.ocsp.SingleResponseList.superclass.constructor.call(this);
var e = ht.asn1,
r = e.DERSequence,
i = e.ocsp.SingleResponse;
this.params = null, this.getEncodedHex = function() {
var t = this.params;
if ("object" != typeof t || null == t.length) throw new Error("params not specified properly");
for (var e = [], n = 0; n < t.length; n++) e.push(new i(t[n]));
return new r({
array: e
}).getEncodedHex()
}, this.setByParam = function(t) {
this.params = t
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.ocsp.SingleResponseList, ht.asn1.ASN1Object), ht.asn1.ocsp.SingleResponse = function(t) {
var e = Error,
r = ht.asn1,
i = r.DERSequence,
n = r.DERGeneralizedTime,
s = r.DERTaggedObject,
a = r.ocsp,
o = a.CertID,
h = a.CertStatus,
u = r.x509.Extensions;
a.SingleResponse.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params,
r = [];
if (null == t.certid) throw new e("certid unspecified");
if (null == t.status) throw new e("status unspecified");
if (null == t.thisupdate) throw new e("thisupdate unspecified");
if (r.push(new o(t.certid)), r.push(new h(t.status)), r.push(new n(t.thisupdate)), null != t.nextupdate) {
var a = new n(t.nextupdate);
r.push(new s({
tag: "a0",
explicit: !0,
obj: a
}))
}
if (null != t.ext) {
var c = new u(t.ext);
r.push(new s({
tag: "a1",
explicit: !0,
obj: c
}))
}
return new i({
array: r
}).getEncodedHex()
}, this.setByParam = function(t) {
this.params = t
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.ocsp.SingleResponse, ht.asn1.ASN1Object), ht.asn1.ocsp.CertID = function(t) {
var e = ht,
r = e.asn1,
i = r.DEROctetString,
n = r.DERInteger,
s = r.DERSequence,
a = r.x509.AlgorithmIdentifier,
o = r.ocsp,
h = o.DEFAULT_HASH,
u = e.crypto.Util.hashHex,
c = $t,
l = lt;
if (o.CertID.superclass.constructor.call(this), this.dHashAlg = null, this.dIssuerNameHash = null, this.dIssuerKeyHash = null, this.dSerialNumber = null, this.setByValue = function(t, e, r, s) {
void 0 === s && (s = h), this.dHashAlg = new a({
name: s
}), this.dIssuerNameHash = new i({
hex: t
}), this.dIssuerKeyHash = new i({
hex: e
}), this.dSerialNumber = new n({
hex: r
})
}, this.setByCert = function(t, e, r) {
void 0 === r && (r = h);
var i = new c;
i.readCertPEM(e);
var n = new c;
n.readCertPEM(t);
var s = n.getPublicKeyHex(),
a = l.getVbyList(s, 0, [1], "03", !0),
o = i.getSerialNumberHex(),
f = u(n.getSubjectHex(), r),
g = u(a, r);
this.setByValue(f, g, o, r), this.hoge = i.getSerialNumberHex()
}, this.getEncodedHex = function() {
if (null === this.dHashAlg && null === this.dIssuerNameHash && null === this.dIssuerKeyHash && null === this.dSerialNumber) throw "not yet set values";
var t = [this.dHashAlg, this.dIssuerNameHash, this.dIssuerKeyHash, this.dSerialNumber],
e = new s({
array: t
});
return this.hTLV = e.getEncodedHex(), this.hTLV
}, void 0 !== t) {
var f = t;
if (void 0 !== f.issuerCert && void 0 !== f.subjectCert) {
var g = h;
void 0 === f.alg && (g = void 0), this.setByCert(f.issuerCert, f.subjectCert, g)
} else {
if (void 0 === f.issname || void 0 === f.isskey || void 0 === f.sbjsn) throw new Error("invalid constructor arguments");
g = h, void 0 === f.alg && (g = void 0), this.setByValue(f.issname, f.isskey, f.sbjsn, g)
}
}
}, zt(ht.asn1.ocsp.CertID, ht.asn1.ASN1Object), ht.asn1.ocsp.CertStatus = function(t) {
ht.asn1.ocsp.CertStatus.superclass.constructor.call(this), this.params = null, this.getEncodedHex = function() {
var t = this.params;
if ("good" == t.status) return "8000";
if ("unknown" == t.status) return "8200";
if ("revoked" == t.status) {
var e = [{
gentime: {
str: t.time
}
}];
null != t.reason && e.push({
tag: {
tag: "a0",
explicit: !0,
obj: {
enum: {
int: t.reason
}
}
}
});
var r = {
tag: "a1",
explicit: !1,
obj: {
seq: e
}
};
return ht.asn1.ASN1Util.newObject({
tag: r
}).getEncodedHex()
}
throw new Error("bad status")
}, this.setByParam = function(t) {
this.params = t
}, void 0 !== t && this.setByParam(t)
}, zt(ht.asn1.ocsp.CertStatus, ht.asn1.ASN1Object), ht.asn1.ocsp.Request = function(t) {
var e = ht.asn1,
r = e.DERSequence,
i = e.ocsp;
if (i.Request.superclass.constructor.call(this), this.dReqCert = null, this.dExt = null, this.getEncodedHex = function() {
var t = [];
if (null === this.dReqCert) throw "reqCert not set";
t.push(this.dReqCert);
var e = new r({
array: t
});
return this.hTLV = e.getEncodedHex(), this.hTLV
}, void 0 !== t) {
var n = new i.CertID(t);
this.dReqCert = n
}
}, zt(ht.asn1.ocsp.Request, ht.asn1.ASN1Object), ht.asn1.ocsp.TBSRequest = function(t) {
var e = ht.asn1,
r = e.DERSequence,
i = e.ocsp;
i.TBSRequest.superclass.constructor.call(this), this.version = 0, this.dRequestorName = null, this.dRequestList = [], this.dRequestExt = null, this.setRequestListByParam = function(t) {
for (var e = [], r = 0; r < t.length; r++) {
var n = new i.Request(t[0]);
e.push(n)
}
this.dRequestList = e
}, this.getEncodedHex = function() {
var t = [];
if (0 !== this.version) throw "not supported version: " + this.version;
if (null !== this.dRequestorName) throw "requestorName not supported";
var e = new r({
array: this.dRequestList
});
if (t.push(e), null !== this.dRequestExt) throw "requestExtensions not supported";
var i = new r({
array: t
});
return this.hTLV = i.getEncodedHex(), this.hTLV
}, void 0 !== t && void 0 !== t.reqList && this.setRequestListByParam(t.reqList)
}, zt(ht.asn1.ocsp.TBSRequest, ht.asn1.ASN1Object), ht.asn1.ocsp.OCSPRequest = function(t) {
var e = ht.asn1,
r = e.DERSequence,
i = e.ocsp;
if (i.OCSPRequest.superclass.constructor.call(this), this.dTbsRequest = null, this.dOptionalSignature = null, this.getEncodedHex = function() {
var t = [];
if (null === this.dTbsRequest) throw "tbsRequest not set";
if (t.push(this.dTbsRequest), null !== this.dOptionalSignature) throw "optionalSignature not supported";
var e = new r({
array: t
});
return this.hTLV = e.getEncodedHex(), this.hTLV
}, void 0 !== t && void 0 !== t.reqList) {
var n = new i.TBSRequest(t);
this.dTbsRequest = n
}
}, zt(ht.asn1.ocsp.OCSPRequest, ht.asn1.ASN1Object), ht.asn1.ocsp.OCSPUtil = {}, ht.asn1.ocsp.OCSPUtil.getRequestHex = function(t, e, r) {
var i = ht.asn1.ocsp;
void 0 === r && (r = i.DEFAULT_HASH);
var n = {
alg: r,
issuerCert: t,
subjectCert: e
};
return new i.OCSPRequest({
reqList: [n]
}).getEncodedHex()
}, ht.asn1.ocsp.OCSPUtil.getOCSPResponseInfo = function(t) {
var e = lt,
r = e.getVbyList,
i = e.getVbyListEx,
n = e.getIdxbyList,
s = (e.getIdxbyListEx, e.getV),
a = {};
try {
var o = i(t, 0, [0], "0a");
a.responseStatus = parseInt(o, 16)
} catch (l) {}
if (0 !== a.responseStatus) return a;
try {
var h = n(t, 0, [1, 0, 1, 0, 0, 2, 0, 1]);
"80" === t.substr(h, 2) ? a.certStatus = "good" : "a1" === t.substr(h, 2) ? (a.certStatus = "revoked", a.revocationTime = Et(r(t, h, [0]))) : "82" === t.substr(h, 2) && (a.certStatus = "unknown")
} catch (l) {}
try {
var u = n(t, 0, [1, 0, 1, 0, 0, 2, 0, 2]);
a.thisUpdate = Et(s(t, u))
} catch (l) {}
try {
var c = n(t, 0, [1, 0, 1, 0, 0, 2, 0, 3]);
"a0" === t.substr(c, 2) && (a.nextUpdate = Et(r(t, c, [0])))
} catch (l) {}
return a
}, ht.asn1.ocsp.OCSPParser = function() {
var t = Error,
e = $t,
r = new e,
i = lt,
n = i.getV,
s = i.getTLV,
a = i.getIdxbyList,
o = i.getVbyList,
h = i.getTLVbyList,
u = i.getVbyListEx,
c = i.getTLVbyListEx,
l = i.getChildIdx;
this.getOCSPRequest = function(e) {
var r = l(e, 0);
if (1 != r.length && 2 != r.length) throw new t("wrong number elements: " + r.length);
return this.getTBSRequest(s(e, r[0]))
}, this.getTBSRequest = function(t) {
var e = {},
i = c(t, 0, [0], "30");
e.array = this.getRequestList(i);
var n = c(t, 0, ["[2]", 0], "30");
return null != n && (e.ext = r.getExtParamArray(n)), e
}, this.getRequestList = function(t) {
for (var e = [], r = l(t, 0), i = 0; i < r.length; i++) t = s(t, r[i]), e.push(this.getRequest(t));
return e
}, this.getRequest = function(e) {
var i = l(e, 0);
if (1 != i.length && 2 != i.length) throw new t("wrong number elements: " + i.length);
var n = this.getCertID(s(e, i[0]));
if (2 == i.length) {
var o = a(e, 0, [1, 0]);
n.ext = r.getExtParamArray(s(e, o))
}
return n
}, this.getCertID = function(r) {
var i = l(r, 0);
if (4 != i.length) throw new t("wrong number elements: " + i.length);
var a = new e,
o = {};
return o.alg = a.getAlgorithmIdentifierName(s(r, i[0])), o.issname = n(r, i[1]), o.isskey = n(r, i[2]), o.sbjsn = n(r, i[3]), o
}, this.getOCSPResponse = function(t) {
var e, r = l(t, 0),
i = n(t, r[0]),
s = parseInt(i);
if (1 == r.length) return {
resstatus: s
};
var a = h(t, 0, [1, 0]);
return (e = this.getResponseBytes(a)).resstatus = s, e
}, this.getResponseBytes = function(t) {
var e, r = l(t, 0),
i = h(t, 0, [1, 0]);
e = this.getBasicOCSPResponse(i);
var s = n(t, r[0]);
return e.restype = ht.asn1.x509.OID.oid2name(_t(s)), e
}, this.getBasicOCSPResponse = function(t) {
var e, r = l(t, 0);
e = this.getResponseData(s(t, r[0]));
var i = new $t;
e.alg = i.getAlgorithmIdentifierName(s(t, r[1]));
var a = n(t, r[2]);
e.sighex = a.substr(2);
var o = u(t, 0, ["[0]"]);
if (null != o) {
for (var h = l(o, 0), c = [], f = 0; f < h.length; f++) {
var g = s(o, h[f]);
c.push(g)
}
e.certs = c
}
return e
}, this.getResponseData = function(t) {
var e = l(t, 0),
r = e.length,
i = {},
a = 0;
"a0" == t.substr(e[0], 2) && a++, i.respid = this.getResponderID(s(t, e[a++]));
var o = n(t, e[a++]);
if (i.prodat = Et(o), i.array = this.getSingleResponseList(s(t, e[a++])), "a1" == t.substr(e[r - 1], 2)) {
var u = h(t, e[r - 1], [0]),
c = new $t;
i.ext = c.getExtParamArray(u)
}
return i
}, this.getResponderID = function(t) {
var e = {};
if ("a2" == t.substr(0, 2)) {
var r = o(t, 0, [0]);
e.key = r
}
if ("a1" == t.substr(0, 2)) {
var i = h(t, 0, [0]),
n = new $t;
e.name = n.getX500Name(i)
}
return e
}, this.getSingleResponseList = function(t) {
for (var e = l(t, 0), r = [], i = 0; i < e.length; i++) {
var n = this.getSingleResponse(s(t, e[i]));
r.push(n)
}
return r
}, this.getSingleResponse = function(t) {
var e = l(t, 0),
r = {},
i = this.getCertID(s(t, e[0]));
r.certid = i;
var a = this.getCertStatus(s(t, e[1]));
if (r.status = a, "18" == t.substr(e[2], 2)) {
var u = n(t, e[2]);
r.thisupdate = Et(u)
}
for (var c = 3; c < e.length; c++) {
if ("a0" == t.substr(e[c], 2)) {
var f = o(t, e[c], [0], "18");
r.nextupdate = Et(f)
}
if ("a1" == t.substr(e[c], 2)) {
var g = new $t,
p = h(t, 0, [c, 0]);
r.ext = g.getExtParamArray(p)
}
}
return r
}, this.getCertStatus = function(t) {
var e = {};
if ("8000" == t) return {
status: "good"
};
if ("8200" == t) return {
status: "unknown"
};
if ("a1" == t.substr(0, 2)) {
e.status = "revoked";
var r = Et(o(t, 0, [0]));
e.time = r
}
return e
}
}, void 0 !== ht && ht || (ht = {}), void 0 !== ht.lang && ht.lang || (ht.lang = {}), ht.lang.String = function() {}, "function" == typeof t ? (ut = function(e) {
return vt(t.from(e, "utf8").toString("base64"))
}, ct = function(e) {
return t.from(yt(e), "base64").toString("utf8")
}) : (ut = function(t) {
return mt(Tt(Vt(t)))
}, ct = function(t) {
return decodeURIComponent(Bt(St(t)))
}), ht.lang.String.isInteger = function(t) {
return !!t.match(/^[0-9]+$/) || !!t.match(/^-[0-9]+$/)
}, ht.lang.String.isHex = function(t) {
return Lt(t)
}, ht.lang.String.isBase64 = function(t) {
return !(!(t = t.replace(/\s+/g, "")).match(/^[0-9A-Za-z+\/]+={0,3}$/) || t.length % 4 != 0)
}, ht.lang.String.isBase64URL = function(t) {
return !t.match(/[+/=]/) && (t = yt(t), ht.lang.String.isBase64(t))
}, ht.lang.String.isIntegerArray = function(t) {
return !!(t = t.replace(/\s+/g, "")).match(/^\[[0-9,]+\]$/)
}, ht.lang.String.isPrintable = function(t) {
return null !== t.match(/^[0-9A-Za-z '()+,-./:=?]*$/)
}, ht.lang.String.isIA5 = function(t) {
return null !== t.match(/^[\x20-\x21\x23-\x7f]*$/)
}, ht.lang.String.isMail = function(t) {
return null !== t.match(/^[A-Za-z0-9]{1}[A-Za-z0-9_.-]*@{1}[A-Za-z0-9_.-]{1,}\.[A-Za-z0-9]{1,}$/)
};
var qt = function(t, e, r) {
return null == r && (r = "0"), t.length >= e ? t : new Array(e - t.length + 1).join(r) + t
};
function Ut(t) {
try {
var e = t.substr(0, 2);
if ("00" == e) return parseInt(t.substr(2), 16);
var r = parseInt(e, 16),
i = t.substr(2),
n = parseInt(i, 16).toString(2);
return "0" == n && (n = "00000000"), n = n.slice(0, 0 - r), parseInt(n, 2)
} catch (u) {
return -1
}
}
function zt(t, e) {
var r = function() {};
r.prototype = e.prototype, t.prototype = new r, t.prototype.constructor = t, t.superclass = e.prototype, e.prototype.constructor == Object.prototype.constructor && (e.prototype.constructor = e)
}
void 0 !== ht && ht || (ht = {}), void 0 !== ht.crypto && ht.crypto || (ht.crypto = {}), ht.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",
SHAwithRSAandMGF1: "cryptojs/jsrsa",
SHA1withRSAandMGF1: "cryptojs/jsrsa",
SHA224withRSAandMGF1: "cryptojs/jsrsa",
SHA256withRSAandMGF1: "cryptojs/jsrsa",
SHA384withRSAandMGF1: "cryptojs/jsrsa",
SHA512withRSAandMGF1: "cryptojs/jsrsa",
RIPEMD160withRSAandMGF1: "cryptojs/jsrsa"
}, this.CRYPTOJSMESSAGEDIGESTNAME = {
md5: d.algo.MD5,
sha1: d.algo.SHA1,
sha224: d.algo.SHA224,
sha256: d.algo.SHA256,
sha384: d.algo.SHA384,
sha512: d.algo.SHA512,
ripemd160: d.algo.RIPEMD160
}, this.getDigestInfoHex = function(t, e) {
if (void 0 === this.DIGESTINFOHEAD[e]) throw "alg not supported in Util.DIGESTINFOHEAD: " + e;
return this.DIGESTINFOHEAD[e] + t
}, this.getPaddedDigestInfoHex = function(t, e, r) {
var i = this.getDigestInfoHex(t, e),
n = r / 4;
if (i.length + 22 > n) throw "key is too short for SigAlg: keylen=" + r + "," + e;
for (var s = "0001", a = "00" + i, o = "", h = n - s.length - a.length, u = 0; u < h; u += 2) o += "ff";
return s + o + a
}, this.hashString = function(t, e) {
return new ht.crypto.MessageDigest({
alg: e
}).digestString(t)
}, this.hashHex = function(t, e) {
return new ht.crypto.MessageDigest({
alg: e
}).digestHex(t)
}, this.sha1 = function(t) {
return this.hashString(t, "sha1")
}, this.sha256 = function(t) {
return this.hashString(t, "sha256")
}, this.sha256Hex = function(t) {
return this.hashHex(t, "sha256")
}, this.sha512 = function(t) {
return this.hashString(t, "sha512")
}, this.sha512Hex = function(t) {
return this.hashHex(t, "sha512")
}, this.isKey = function(t) {
return t instanceof rt || t instanceof ht.crypto.DSA || t instanceof ht.crypto.ECDSA
}
}, ht.crypto.Util.md5 = function(t) {
return new ht.crypto.MessageDigest({
alg: "md5",
prov: "cryptojs"
}).digestString(t)
}, ht.crypto.Util.ripemd160 = function(t) {
return new ht.crypto.MessageDigest({
alg: "ripemd160",
prov: "cryptojs"
}).digestString(t)
}, ht.crypto.Util.SECURERANDOMGEN = new Q, ht.crypto.Util.getRandomHexOfNbytes = function(t) {
var e = new Array(t);
return ht.crypto.Util.SECURERANDOMGEN.nextBytes(e), pt(e)
}, ht.crypto.Util.getRandomBigIntegerOfNbytes = function(t) {
return new E(ht.crypto.Util.getRandomHexOfNbytes(t), 16)
}, ht.crypto.Util.getRandomHexOfNbits = function(t) {
var e = t % 8,
r = new Array((t - e) / 8 + 1);
return ht.crypto.Util.SECURERANDOMGEN.nextBytes(r), r[0] = (255 << e & 255 ^ 255) & r[0], pt(r)
}, ht.crypto.Util.getRandomBigIntegerOfNbits = function(t) {
return new E(ht.crypto.Util.getRandomHexOfNbits(t), 16)
}, ht.crypto.Util.getRandomBigIntegerZeroToMax = function(t) {
for (var e = t.bitLength();;) {
var r = ht.crypto.Util.getRandomBigIntegerOfNbits(e);
if (-1 != t.compareTo(r)) return r
}
}, ht.crypto.Util.getRandomBigIntegerMinToMax = function(t, e) {
var r = t.compareTo(e);
if (1 == r) throw "biMin is greater than biMax";
if (0 == r) return t;
var i = e.subtract(t);
return ht.crypto.Util.getRandomBigIntegerZeroToMax(i).add(t)
}, ht.crypto.MessageDigest = function(t) {
this.setAlgAndProvider = function(t, r) {
if (null !== (t = ht.crypto.MessageDigest.getCanonicalAlgName(t)) && void 0 === r && (r = ht.crypto.Util.DEFAULTPROVIDER[t]), -1 != ":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(t) && "cryptojs" == r) {
try {
this.md = ht.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[t].create()
} catch (e) {
throw "setAlgAndProvider hash alg set fail alg=" + t + "/" + e
}
this.updateString = function(t) {
this.md.update(t)
}, this.updateHex = function(t) {
var e = d.enc.Hex.parse(t);
this.md.update(e)
}, this.digest = function() {
return this.md.finalize().toString(d.enc.Hex)
}, this.digestString = function(t) {
return this.updateString(t), this.digest()
}, this.digestHex = function(t) {
return this.updateHex(t), this.digest()
}
}
if (-1 != ":sha256:".indexOf(t) && "sjcl" == r) {
try {
this.md = new sjcl.hash.sha256
} catch (e) {
throw "setAlgAndProvider hash alg set fail alg=" + t + "/" + e
}
this.updateString = function(t) {
this.md.update(t)
}, this.updateHex = function(t) {
var e = sjcl.codec.hex.toBits(t);
this.md.update(e)
}, this.digest = function() {
var t = this.md.finalize();
return sjcl.codec.hex.fromBits(t)
}, this.digestString = function(t) {
return this.updateString(t), this.digest()
}, this.digestHex = function(t) {
return this.updateHex(t), this.digest()
}
}
}, this.updateString = function(t) {
throw "updateString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName
}, this.updateHex = function(t) {
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(t) {
throw "digestString(str) not supported for this alg/prov: " + this.algName + "/" + this.provName
}, this.digestHex = function(t) {
throw "digestHex(hex) not supported for this alg/prov: " + this.algName + "/" + this.provName
}, void 0 !== t && void 0 !== t.alg && (this.algName = t.alg, void 0 === t.prov && (this.provName = ht.crypto.Util.DEFAULTPROVIDER[this.algName]), this.setAlgAndProvider(this.algName, this.provName))
}, ht.crypto.MessageDigest.getCanonicalAlgName = function(t) {
return "string" == typeof t && (t = (t = t.toLowerCase()).replace(/-/, "")), t
}, ht.crypto.MessageDigest.getHashLength = function(t) {
var e = ht.crypto.MessageDigest,
r = e.getCanonicalAlgName(t);
if (void 0 === e.HASHLENGTH[r]) throw "not supported algorithm: " + t;
return e.HASHLENGTH[r]
}, ht.crypto.MessageDigest.HASHLENGTH = {
md5: 16,
sha1: 20,
sha224: 28,
sha256: 32,
sha384: 48,
sha512: 64,
ripemd160: 20
}, ht.crypto.Mac = function(t) {
this.setAlgAndProvider = function(t, e) {
if (null == (t = t.toLowerCase()) && (t = "hmacsha1"), "hmac" != (t = t.toLowerCase()).substr(0, 4)) throw "setAlgAndProvider unsupported HMAC alg: " + t;
void 0 === e && (e = ht.crypto.Util.DEFAULTPROVIDER[t]), this.algProv = t + "/" + e;
var r = t.substr(4);
if (-1 != ":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(r) && "cryptojs" == e) {
try {
var i = ht.crypto.Util.CRYPTOJSMESSAGEDIGESTNAME[r];
this.mac = d.algo.HMAC.create(i, this.pass)
} catch (o) {
throw "setAlgAndProvider hash alg set fail hashAlg=" + r + "/" + o
}
this.updateString = function(t) {
this.mac.update(t)
}, this.updateHex = function(t) {
var e = d.enc.Hex.parse(t);
this.mac.update(e)
}, this.doFinal = function() {
return this.mac.finalize().toString(d.enc.Hex)
}, this.doFinalString = function(t) {
return this.updateString(t), this.doFinal()
}, this.doFinalHex = function(t) {
return this.updateHex(t), this.doFinal()
}
}
}, this.updateString = function(t) {
throw "updateString(str) not supported for this alg/prov: " + this.algProv
}, this.updateHex = function(t) {
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(t) {
throw "digestString(str) not supported for this alg/prov: " + this.algProv
}, this.doFinalHex = function(t) {
throw "digestHex(hex) not supported for this alg/prov: " + this.algProv
}, this.setPassword = function(t) {
if ("string" == typeof t) {
var e = t;
return t.length % 2 != 1 && t.match(/^[0-9A-Fa-f]+$/) || (e = bt(t)), void(this.pass = d.enc.Hex.parse(e))
}
if ("object" != typeof t) throw "KJUR.crypto.Mac unsupported password type: " + t;
if (e = null, void 0 !== t.hex) {
if (t.hex.length % 2 != 0 || !t.hex.match(/^[0-9A-Fa-f]+$/)) throw "Mac: wrong hex password: " + t.hex;
e = t.hex
}
if (void 0 !== t.utf8 && (e = xt(t.utf8)), void 0 !== t.rstr && (e = bt(t.rstr)), void 0 !== t.b64 && (e = S(t.b64)), void 0 !== t.b64u && (e = St(t.b64u)), null == e) throw "KJUR.crypto.Mac unsupported password type: " + t;
this.pass = d.enc.Hex.parse(e)
}, void 0 !== t && (void 0 !== t.pass && this.setPassword(t.pass), void 0 !== t.alg && (this.algName = t.alg, void 0 === t.prov && (this.provName = ht.crypto.Util.DEFAULTPROVIDER[this.algName]), this.setAlgAndProvider(this.algName, this.provName)))
}, ht.crypto.Signature = function(t) {
var e = null;
if (this._setAlgNames = function() {
var t = this.algName.match(/^(.+)with(.+)$/);
t && (this.mdAlgName = t[1].toLowerCase(), this.pubkeyAlgName = t[2].toLowerCase(), "rsaandmgf1" == this.pubkeyAlgName && "sha" == this.mdAlgName && (this.mdAlgName = "sha1"))
}, this._zeroPaddingOfSignature = function(t, e) {
for (var r = "", i = e / 4 - t.length, n = 0; n < i; n++) r += "0";
return r + t
}, this.setAlgAndProvider = function(t, e) {
if (this._setAlgNames(), "cryptojs/jsrsa" != e) throw new Error("provider not supported: " + e);
if (-1 != ":md5:sha1:sha224:sha256:sha384:sha512:ripemd160:".indexOf(this.mdAlgName)) {
try {
this.md = new ht.crypto.MessageDigest({
alg: this.mdAlgName
})
} catch (r) {
throw new Error("setAlgAndProvider hash alg set fail alg=" + this.mdAlgName + "/" + r)
}
this.init = function(t, e) {
var r = null;
try {
r = void 0 === e ? Gt.getKey(t) : Gt.getKey(t, e)
} catch (i) {
throw "init failed:" + i
}
if (!0 === r.isPrivate) this.prvKey = r, this.state = "SIGN";
else {
if (!0 !== r.isPublic) throw "init failed.:" + r;
this.pubKey = r, this.state = "VERIFY"
}
}, this.updateString = function(t) {
this.md.updateString(t)
}, this.updateHex = function(t) {
this.md.updateHex(t)
}, this.sign = function() {
if (this.sHashHex = this.md.digest(), void 0 === this.prvKey && void 0 !== this.ecprvhex && void 0 !== this.eccurvename && void 0 !== ht.crypto.ECDSA && (this.prvKey = new ht.crypto.ECDSA({
curve: this.eccurvename,
prv: this.ecprvhex
})), this.prvKey instanceof rt && "rsaandmgf1" === this.pubkeyAlgName) this.hSign = this.prvKey.signWithMessageHashPSS(this.sHashHex, this.mdAlgName, this.pssSaltLen);
else if (this.prvKey instanceof rt && "rsa" === this.pubkeyAlgName) this.hSign = this.prvKey.signWithMessageHash(this.sHashHex, this.mdAlgName);
else if (this.prvKey instanceof ht.crypto.ECDSA) this.hSign = this.prvKey.signWithMessageHash(this.sHashHex);
else {
if (!(this.prvKey instanceof ht.crypto.DSA)) throw "Signature: unsupported private key alg: " + this.pubkeyAlgName;
this.hSign = this.prvKey.signWithMessageHash(this.sHashHex)
}
return this.hSign
}, this.signString = function(t) {
return this.updateString(t), this.sign()
}, this.signHex = function(t) {
return this.updateHex(t), this.sign()
}, this.verify = function(t) {
if (this.sHashHex = this.md.digest(), void 0 === this.pubKey && void 0 !== this.ecpubhex && void 0 !== this.eccurvename && void 0 !== ht.crypto.ECDSA && (this.pubKey = new ht.crypto.ECDSA({
curve: this.eccurvename,
pub: this.ecpubhex
})), this.pubKey instanceof rt && "rsaandmgf1" === this.pubkeyAlgName) return this.pubKey.verifyWithMessageHashPSS(this.sHashHex, t, this.mdAlgName, this.pssSaltLen);
if (this.pubKey instanceof rt && "rsa" === this.pubkeyAlgName) return this.pubKey.verifyWithMessageHash(this.sHashHex, t);
if (void 0 !== ht.crypto.ECDSA && this.pubKey instanceof ht.crypto.ECDSA) return this.pubKey.verifyWithMessageHash(this.sHashHex, t);
if (void 0 !== ht.crypto.DSA && this.pubKey instanceof ht.crypto.DSA) return this.pubKey.verifyWithMessageHash(this.sHashHex, t);
throw "Signature: unsupported public key alg: " + this.pubkeyAlgName
}
}
}, this.init = function(t, e) {
throw "init(key, pass) not supported for this alg:prov=" + this.algProvName
}, this.updateString = function(t) {
throw "updateString(str) not supported for this alg:prov=" + this.algProvName
}, this.updateHex = function(t) {
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(t) {
throw "digestString(str) not supported for this alg:prov=" + this.algProvName
}, this.signHex = function(t) {
throw "digestHex(hex) not supported for this alg:prov=" + this.algProvName
}, this.verify = function(t) {
throw "verify(hSigVal) not supported for this alg:prov=" + this.algProvName
}, this.initParams = t, void 0 !== t && (void 0 !== t.alg && (this.algName = t.alg, void 0 === t.prov ? this.provName = ht.crypto.Util.DEFAULTPROVIDER[this.algName] : this.provName = t.prov, this.algProvName = this.algName + ":" + this.provName, this.setAlgAndProvider(this.algName, this.provName), this._setAlgNames()), void 0 !== t.psssaltlen && (this.pssSaltLen = t.psssaltlen), void 0 !== t.prvkeypem)) {
if (void 0 !== t.prvkeypas) throw "both prvkeypem and prvkeypas parameters not supported";
try {
e = Gt.getKey(t.prvkeypem), this.init(e)
} catch (a) {
throw "fatal error to load pem private key: " + a
}
}
}, ht.crypto.Cipher = function(t) {}, ht.crypto.Cipher.encrypt = function(t, e, r) {
if (e instanceof rt && e.isPublic) {
var i = ht.crypto.Cipher.getAlgByKeyAndName(e, r);
if ("RSA" === i) return e.encrypt(t);
if ("RSAOAEP" === i) return e.encryptOAEP(t, "sha1");
var n = i.match(/^RSAOAEP(\d+)$/);
if (null !== n) return e.encryptOAEP(t, "sha" + n[1]);
throw "Cipher.encrypt: unsupported algorithm for RSAKey: " + r
}
throw "Cipher.encrypt: unsupported key or algorithm"
}, ht.crypto.Cipher.decrypt = function(t, e, r) {
if (e instanceof rt && e.isPrivate) {
var i = ht.crypto.Cipher.getAlgByKeyAndName(e, r);
if ("RSA" === i) return e.decrypt(t);
if ("RSAOAEP" === i) return e.decryptOAEP(t, "sha1");
var n = i.match(/^RSAOAEP(\d+)$/);
if (null !== n) return e.decryptOAEP(t, "sha" + n[1]);
throw "Cipher.decrypt: unsupported algorithm for RSAKey: " + r
}
throw "Cipher.decrypt: unsupported key or algorithm"
}, ht.crypto.Cipher.getAlgByKeyAndName = function(t, e) {
if (t instanceof rt) {
if (-1 != ":RSA:RSAOAEP:RSAOAEP224:RSAOAEP256:RSAOAEP384:RSAOAEP512:".indexOf(e)) return e;
if (null == e) return "RSA";
throw "getAlgByKeyAndName: not supported algorithm name for RSAKey: " + e
}
throw "getAlgByKeyAndName: not supported algorithm name: " + e
}, ht.crypto.OID = new function() {
this.oidhex2name = {
"2a864886f70d010101": "rsaEncryption",
"2a8648ce3d0201": "ecPublicKey",
"2a8648ce380401": "dsa",
"2a8648ce3d030107": "secp256r1",
"2b8104001f": "secp192k1",
"2b81040021": "secp224r1",
"2b8104000a": "secp256k1",
"2b81040022": "secp384r1",
"2b81040023": "secp521r1",
"2a8648ce380403": "SHA1withDSA",
"608648016503040301": "SHA224withDSA",
"608648016503040302": "SHA256withDSA"
}
}, void 0 !== ht && ht || (ht = {}), void 0 !== ht.crypto && ht.crypto || (ht.crypto = {}), ht.crypto.ECDSA = function(t) {
var e = Error,
r = E,
i = st,
n = ht.crypto.ECDSA,
s = ht.crypto.ECParameterDB,
a = n.getName,
o = lt,
h = o.getVbyListEx,
u = o.isASN1HEX,
c = new Q;
this.type = "EC", this.isPrivate = !1, this.isPublic = !1, this.getBigRandom = function(t) {
return new r(t.bitLength(), c).mod(t.subtract(r.ONE)).add(r.ONE)
}, this.setNamedCurve = function(t) {
this.ecparams = s.getByName(t), this.prvKeyHex = null, this.pubKeyHex = null, this.curveName = t
}, this.setPrivateKeyHex = function(t) {
this.isPrivate = !0, this.prvKeyHex = t
}, this.setPublicKeyHex = function(t) {
this.isPublic = !0, this.pubKeyHex = t
}, this.getPublicKeyXYHex = function() {
var t = this.pubKeyHex;
if ("04" !== t.substr(0, 2)) throw "this method supports uncompressed format(04) only";
var e = this.ecparams.keycharlen;
if (t.length !== 2 + 2 * e) throw "malformed public key hex length";
var r = {};
return r.x = t.substr(2, e), r.y = t.substr(2 + e), r
}, this.getShortNISTPCurveName = function() {
var t = this.curveName;
return "secp256r1" === t || "NIST P-256" === t || "P-256" === t || "prime256v1" === t ? "P-256" : "secp384r1" === t || "NIST P-384" === t || "P-384" === t ? "P-384" : "secp521r1" === t || "NIST P-521" === t || "P-521" === t ? "P-521" : null
}, this.generateKeyPairHex = function() {
var t = this.ecparams.n,
e = this.getBigRandom(t),
r = this.ecparams.keycharlen,
i = ("0000000000" + e.toString(16)).slice(-r);
return this.setPrivateKeyHex(i), {
ecprvhex: i,
ecpubhex: this.generatePublicKeyHex()
}
}, this.generatePublicKeyHex = function() {
var t = new r(this.prvKeyHex, 16),
e = this.ecparams.G.multiply(t),
i = e.getX().toBigInteger(),
n = e.getY().toBigInteger(),
s = this.ecparams.keycharlen,
a = "04" + ("0000000000" + i.toString(16)).slice(-s) + ("0000000000" + n.toString(16)).slice(-s);
return this.setPublicKeyHex(a), a
}, this.signWithMessageHash = function(t) {
return this.signHex(t, this.prvKeyHex)
}, this.signHex = function(t, e) {
var i = new r(e, 16),
s = this.ecparams.n,
a = new r(t.substring(0, this.ecparams.keycharlen), 16);
do {
var o = this.getBigRandom(s),
h = this.ecparams.G.multiply(o).getX().toBigInteger().mod(s)
} while (h.compareTo(r.ZERO) <= 0);
var u = o.modInverse(s).multiply(a.add(i.multiply(h))).mod(s);
return n.biRSSigToASN1Sig(h, u)
}, this.sign = function(t, e) {
var i = e,
n = this.ecparams.n,
s = r.fromByteArrayUnsigned(t);
do {
var a = this.getBigRandom(n),
o = this.ecparams.G.multiply(a).getX().toBigInteger().mod(n)
} while (o.compareTo(E.ZERO) <= 0);
var h = a.modInverse(n).multiply(s.add(i.multiply(o))).mod(n);
return this.serializeSig(o, h)
}, this.verifyWithMessageHash = function(t, e) {
return this.verifyHex(t, e, this.pubKeyHex)
}, this.verifyHex = function(t, e, s) {
try {
var a, o, h = n.parseSigHex(e);
a = h.r, o = h.s;
var u = i.decodeFromHex(this.ecparams.curve, s),
c = new r(t.substring(0, this.ecparams.keycharlen), 16);
return this.verifyRaw(c, a, o, u)
} catch (l) {
return !1
}
}, this.verify = function(t, e, n) {
var s, a, o;
if (Bitcoin.Util.isArray(e)) {
var h = this.parseSig(e);
s = h.r, a = h.s
} else {
if ("object" != typeof e || !e.r || !e.s) throw "Invalid value for signature";
s = e.r, a = e.s
}
if (n instanceof st) o = n;
else {
if (!Bitcoin.Util.isArray(n)) throw "Invalid format for pubkey value, must be byte array or ECPointFp";
o = i.decodeFrom(this.ecparams.curve, n)
}
var u = r.fromByteArrayUnsigned(t);
return this.verifyRaw(u, s, a, o)
}, this.verifyRaw = function(t, e, i, n) {
var s = this.ecparams.n,
a = this.ecparams.G;
if (e.compareTo(r.ONE) < 0 || e.compareTo(s) >= 0) return !1;
if (i.compareTo(r.ONE) < 0 || i.compareTo(s) >= 0) return !1;
var o = i.modInverse(s),
h = t.multiply(o).mod(s),
u = e.multiply(o).mod(s);
return a.multiply(h).add(n.multiply(u)).getX().toBigInteger().mod(s).equals(e)
}, this.serializeSig = function(t, e) {
var r = t.toByteArraySigned(),
i = e.toByteArraySigned(),
n = [];
return n.push(2), n.push(r.length), (n = n.concat(r)).push(2), n.push(i.length), (n = n.concat(i)).unshift(n.length), n.unshift(48), n
}, this.parseSig = function(t) {
var e;
if (48 != t[0]) throw new Error("Signature not a valid DERSequence");
if (2 != t[e = 2]) throw new Error("First element in signature must be a DERInteger");
var i = t.slice(e + 2, e + 2 + t[e + 1]);
if (2 != t[e += 2 + t[e + 1]]) throw new Error("Second element in signature must be a DERInteger");
var n = t.slice(e + 2, e + 2 + t[e + 1]);
return e += 2 + t[e + 1], {
r: r.fromByteArrayUnsigned(i),
s: r.fromByteArrayUnsigned(n)
}
}, this.parseSigCompact = function(t) {
if (65 !== t.length) throw "Signature has the wrong length";
var e = t[0] - 27;
if (e < 0 || e > 7) throw "Invalid signature type";
var i = this.ecparams.n;
return {
r: r.fromByteArrayUnsigned(t.slice(1, 33)).mod(i),
s: r.fromByteArrayUnsigned(t.slice(33, 65)).mod(i),
i: e
}
}, this.readPKCS5PrvKeyHex = function(t) {
if (!1 === u(t)) throw new Error("not ASN.1 hex string");
var e, r, i;
try {
e = h(t, 0, ["[0]", 0], "06"), r = h(t, 0, [1], "04");
try {
i = h(t, 0, ["[1]", 0], "03")
} catch (n) {}
} catch (n) {
throw new Error("malformed PKCS#1/5 plain ECC private key")
}
if (this.curveName = a(e), void 0 === this.curveName) throw "unsupported curve name";
this.setNamedCurve(this.curveName), this.setPublicKeyHex(i), this.setPrivateKeyHex(r), this.isPublic = !1
}, this.readPKCS8PrvKeyHex = function(t) {
if (!1 === u(t)) throw new e("not ASN.1 hex string");
var r, i, n;
try {
h(t, 0, [1, 0], "06"), r = h(t, 0, [1, 1], "06"), i = h(t, 0, [2, 0, 1], "04");
try {
n = h(t, 0, [2, 0, "[1]", 0], "03")
} catch (s) {}
} catch (s) {
throw new e("malformed PKCS#8 plain ECC private key")
}
if (this.curveName = a(r), void 0 === this.curveName) throw new e("unsupported curve name");
this.setNamedCurve(this.curveName), this.setPublicKeyHex(n), this.setPrivateKeyHex(i), this.isPublic = !1
}, this.readPKCS8PubKeyHex = function(t) {
if (!1 === u(t)) throw new e("not ASN.1 hex string");
var r, i;
try {
h(t, 0, [0, 0], "06"), r = h(t, 0, [0, 1], "06"), i = h(t, 0, [1], "03")
} catch (n) {
throw new e("malformed PKCS#8 ECC public key")
}
if (this.curveName = a(r), null === this.curveName) throw new e("unsupported curve name");
this.setNamedCurve(this.curveName), this.setPublicKeyHex(i)
}, this.readCertPubKeyHex = function(t, r) {
if (!1 === u(t)) throw new e("not ASN.1 hex string");
var i, n;
try {
i = h(t, 0, [0, 5, 0, 1], "06"), n = h(t, 0, [0, 5, 1], "03")
} catch (s) {
throw new e("malformed X.509 certificate ECC public key")
}
if (this.curveName = a(i), null === this.curveName) throw new e("unsupported curve name");
this.setNamedCurve(this.curveName), this.setPublicKeyHex(n)
}, void 0 !== t && void 0 !== t.curve && (this.curveName = t.curve), void 0 === this.curveName && (this.curveName = "secp256r1"), this.setNamedCurve(this.curveName), void 0 !== t && (void 0 !== t.prv && this.setPrivateKeyHex(t.prv), void 0 !== t.pub && this.setPublicKeyHex(t.pub))
}, ht.crypto.ECDSA.parseSigHex = function(t) {
var e = ht.crypto.ECDSA.parseSigHexInHexRS(t);
return {
r: new E(e.r, 16),
s: new E(e.s, 16)
}
}, ht.crypto.ECDSA.parseSigHexInHexRS = function(t) {
var e = lt,
r = e.getChildIdx,
i = e.getV;
if (e.checkStrictDER(t, 0), "30" != t.substr(0, 2)) throw new Error("signature is not a ASN.1 sequence");
var n = r(t, 0);
if (2 != n.length) throw new Error("signature shall have two elements");
var s = n[0],
a = n[1];
if ("02" != t.substr(s, 2)) throw new Error("1st item not ASN.1 integer");
if ("02" != t.substr(a, 2)) throw new Error("2nd item not ASN.1 integer");
return {
r: i(t, s),
s: i(t, a)
}
}, ht.crypto.ECDSA.asn1SigToConcatSig = function(t) {
var e = ht.crypto.ECDSA.parseSigHexInHexRS(t),
r = e.r,
i = e.s;
if (r.length >= 130 && r.length <= 134) {
if (r.length % 2 != 0) throw Error("unknown ECDSA sig r length error");
if (i.length % 2 != 0) throw Error("unknown ECDSA sig s length error");
"00" == r.substr(0, 2) && (r = r.substr(2)), "00" == i.substr(0, 2) && (i = i.substr(2));
var n = Math.max(r.length, i.length);
return (r = ("000000" + r).slice(-n)) + ("000000" + i).slice(-n)
}
if ("00" == r.substr(0, 2) && r.length % 32 == 2 && (r = r.substr(2)), "00" == i.substr(0, 2) && i.length % 32 == 2 && (i = i.substr(2)), r.length % 32 == 30 && (r = "00" + r), i.length % 32 == 30 && (i = "00" + i), r.length % 32 != 0) throw Error("unknown ECDSA sig r length error");
if (i.length % 32 != 0) throw Error("unknown ECDSA sig s length error");
return r + i
}, ht.crypto.ECDSA.concatSigToASN1Sig = function(t) {
if (t.length % 4 != 0) throw Error("unknown ECDSA concatinated r-s sig length error");
var e = t.substr(0, t.length / 2),
r = t.substr(t.length / 2);
return ht.crypto.ECDSA.hexRSSigToASN1Sig(e, r)
}, ht.crypto.ECDSA.hexRSSigToASN1Sig = function(t, e) {
var r = new E(t, 16),
i = new E(e, 16);
return ht.crypto.ECDSA.biRSSigToASN1Sig(r, i)
}, ht.crypto.ECDSA.biRSSigToASN1Sig = function(t, e) {
var r = ht.asn1,
i = new r.DERInteger({
bigint: t
}),
n = new r.DERInteger({
bigint: e
});
return new r.DERSequence({
array: [i, n]
}).getEncodedHex()
}, ht.crypto.ECDSA.getName = function(t) {
return "2b8104001f" === t ? "secp192k1" : "2a8648ce3d030107" === t ? "secp256r1" : "2b8104000a" === t ? "secp256k1" : "2b81040021" === t ? "secp224r1" : "2b81040022" === t ? "secp384r1" : "2b81040023" === t ? "secp521r1" : -1 !== "|secp256r1|NIST P-256|P-256|prime256v1|".indexOf(t) ? "secp256r1" : -1 !== "|secp256k1|".indexOf(t) ? "secp256k1" : -1 !== "|secp224r1|NIST P-224|P-224|".indexOf(t) ? "secp224r1" : -1 !== "|secp384r1|NIST P-384|P-384|".indexOf(t) ? "secp384r1" : -1 !== "|secp521r1|NIST P-521|P-521|".indexOf(t) ? "secp521r1" : null
}, void 0 !== ht && ht || (ht = {}), void 0 !== ht.crypto && ht.crypto || (ht.crypto = {}), ht.crypto.ECParameterDB = new function() {
var t = {},
e = {};
function r(t) {
return new E(t, 16)
}
this.getByName = function(r) {
var i = r;
if (void 0 !== e[i] && (i = e[r]), void 0 !== t[i]) return t[i];
throw "unregistered EC curve name: " + i
}, this.regist = function(i, n, s, a, o, h, u, c, l, f, g, p) {
t[i] = {};
var d = r(s),
v = r(a),
y = r(o),
m = r(h),
S = r(u),
x = new at(d, v, y),
E = x.decodePointHex("04" + c + l);
t[i].name = i, t[i].keylen = n, t[i].keycharlen = 2 * Math.ceil(n / 8), t[i].curve = x, t[i].G = E, t[i].n = m, t[i].h = S, t[i].oid = g, t[i].info = p;
for (var w = 0; w < f.length; w++) e[f[w]] = i
}
}, ht.crypto.ECParameterDB.regist("secp128r1", 128, "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFDFFFFFFFFFFFFFFFFFFFFFFFC", "E87579C11079F43DD824993C2CEE5ED3", "FFFFFFFE0000000075A30D1B9038A115", "1", "161FF7528B899B2D0C28607CA52C5B86", "CF5AC8395BAFEB13C02DA292DDED7A83", [], "", "secp128r1 : SECG curve over a 128 bit prime field"), ht.crypto.ECParameterDB.regist("secp160k1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFAC73", "0", "7", "0100000000000000000001B8FA16DFAB9ACA16B6B3", "1", "3B4C382CE37AA192A4019E763036F4F5DD4D7EBB", "938CF935318FDCED6BC28286531733C3F03C4FEE", [], "", "secp160k1 : SECG curve over a 160 bit prime field"), ht.crypto.ECParameterDB.regist("secp160r1", 160, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF7FFFFFFC", "1C97BEFC54BD7A8B65ACF89F81D4D4ADC565FA45", "0100000000000000000001F4C8F927AED3CA752257", "1", "4A96B5688EF573284664698968C38BB913CBFC82", "23A628553168947D59DCC912042351377AC5FB32", [], "", "secp160r1 : SECG curve over a 160 bit prime field"), ht.crypto.ECParameterDB.regist("secp192k1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFEE37", "0", "3", "FFFFFFFFFFFFFFFFFFFFFFFE26F2FC170F69466A74DEFD8D", "1", "DB4FF10EC057E9AE26B07D0280B7F4341DA5D1B1EAE06C7D", "9B2F2F6D9C5628A7844163D015BE86344082AA88D95E2F9D", []), ht.crypto.ECParameterDB.regist("secp192r1", 192, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFC", "64210519E59C80E70FA7E9AB72243049FEB8DEECC146B9B1", "FFFFFFFFFFFFFFFFFFFFFFFF99DEF836146BC9B1B4D22831", "1", "188DA80EB03090F67CBF20EB43A18800F4FF0AFD82FF1012", "07192B95FFC8DA78631011ED6B24CDD573F977A11E794811", []), ht.crypto.ECParameterDB.regist("secp224r1", 224, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF000000000000000000000001", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFFFFFFFFFFFFFFFFFE", "B4050A850C04B3ABF54132565044B0B7D7BFD8BA270B39432355FFB4", "FFFFFFFFFFFFFFFFFFFFFFFFFFFF16A2E0B8F03E13DD29455C5C2A3D", "1", "B70E0CBD6BB4BF7F321390B94A03C1D356C21122343280D6115C1D21", "BD376388B5F723FB4C22DFE6CD4375A05A07476444D5819985007E34", []), ht.crypto.ECParameterDB.regist("secp256k1", 256, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFC2F", "0", "7", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEBAAEDCE6AF48A03BBFD25E8CD0364141", "1", "79BE667EF9DCBBAC55A06295CE870B07029BFCDB2DCE28D959F2815B16F81798", "483ADA7726A3C4655DA4FBFC0E1108A8FD17B448A68554199C47D08FFB10D4B8", []), ht.crypto.ECParameterDB.regist("secp256r1", 256, "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFF", "FFFFFFFF00000001000000000000000000000000FFFFFFFFFFFFFFFFFFFFFFFC", "5AC635D8AA3A93E7B3EBBD55769886BC651D06B0CC53B0F63BCE3C3E27D2604B", "FFFFFFFF00000000FFFFFFFFFFFFFFFFBCE6FAADA7179E84F3B9CAC2FC632551", "1", "6B17D1F2E12C4247F8BCE6E563A440F277037D812DEB33A0F4A13945D898C296", "4FE342E2FE1A7F9B8EE7EB4A7C0F9E162BCE33576B315ECECBB6406837BF51F5", ["NIST P-256", "P-256", "prime256v1"]), ht.crypto.ECParameterDB.regist("secp384r1", 384, "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFEFFFFFFFF0000000000000000FFFFFFFC", "B3312FA7E23EE7E4988E056BE3F82D19181D9C6EFE8141120314088F5013875AC656398D8A2ED19D2A85C8EDD3EC2AEF", "FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC7634D81F4372DDF581A0DB248B0A77AECEC196ACCC52973", "1", "AA87CA22BE8B05378EB1C71EF320AD746E1D3B628BA79B9859F741E082542A385502F25DBF55296C3A545E3872760AB7", "3617de4a96262c6f5d9e98bf9292dc29f8f41dbd289a147ce9da3113b5f0b8c00a60b1ce1d7e819d7a431d7c90ea0e5f", ["NIST P-384", "P-384"]), ht.crypto.ECParameterDB.regist("secp521r1", 521, "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFC", "051953EB9618E1C9A1F929A21A0B68540EEA2DA725B99B315F3B8B489918EF109E156193951EC7E937B1652C0BD3BB1BF073573DF883D2C34F1EF451FD46B503F00", "1FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFA51868783BF2F966B7FCC0148F709A5D03BB5C9B8899C47AEBB6FB71E91386409", "1", "00C6858E06B70404E9CD9E3ECB662395B4429C648139053FB521F828AF606B4D3DBAA14B5E77EFE75928FE1DC127A2FFA8DE3348B3C1856A429BF97E7E31C2E5BD66", "011839296a789a3bc0045c8a5fb42c7d1bd998f54449579b446817afbd17273e662c97ee72995ef42640c550b9013fad0761353c7086a272c24088be94769fd16650", ["NIST P-521", "P-521"]), void 0 !== ht && ht || (ht = {}), void 0 !== ht.crypto && ht.crypto || (ht.crypto = {}), ht.crypto.DSA = function() {
var t = lt,
e = (t.getVbyList, t.getVbyListEx),
r = t.isASN1HEX,
i = E;
this.p = null, this.q = null, this.g = null, this.y = null, this.x = null, this.type = "DSA", this.isPrivate = !1, this.isPublic = !1, this.setPrivate = function(t, e, r, i, n) {
this.isPrivate = !0, this.p = t, this.q = e, this.g = r, this.y = i, this.x = n
}, this.setPrivateHex = function(t, e, r, i, n) {
var s, a, o, h, u;
s = new E(t, 16), a = new E(e, 16), o = new E(r, 16), h = "string" == typeof i && i.length > 1 ? new E(i, 16) : null, u = new E(n, 16), this.setPrivate(s, a, o, h, u)
}, this.setPublic = function(t, e, r, i) {
this.isPublic = !0, this.p = t, this.q = e, this.g = r, this.y = i, this.x = null
}, this.setPublicHex = function(t, e, r, i) {
var n, s, a, o;
n = new E(t, 16), s = new E(e, 16), a = new E(r, 16), o = new E(i, 16), this.setPublic(n, s, a, o)
}, this.signWithMessageHash = function(t) {
var e = this.p,
r = this.q,
i = this.g,
n = (this.y, this.x),
s = ht.crypto.Util.getRandomBigIntegerMinToMax(E.ONE.add(E.ONE), r.subtract(E.ONE)),
a = new E(t.substr(0, r.bitLength() / 4), 16),
o = i.modPow(s, e).mod(r),
h = s.modInverse(r).multiply(a.add(n.multiply(o))).mod(r);
return ht.asn1.ASN1Util.jsonToASN1HEX({
seq: [{
int: {
bigint: o
}
}, {
int: {
bigint: h
}
}]
})
}, this.verifyWithMessageHash = function(t, e) {
var r = this.p,
i = this.q,
n = this.g,
s = this.y,
a = this.parseASN1Signature(e),
o = a[0],
h = a[1],
u = new E(t.substr(0, i.bitLength() / 4), 16);
if (E.ZERO.compareTo(o) > 0 || o.compareTo(i) > 0) throw "invalid DSA signature";
if (E.ZERO.compareTo(h) >= 0 || h.compareTo(i) > 0) throw "invalid DSA signature";
var c = h.modInverse(i),
l = u.multiply(c).mod(i),
f = o.multiply(c).mod(i);
return 0 == n.modPow(l, r).multiply(s.modPow(f, r)).mod(r).mod(i).compareTo(o)
}, this.parseASN1Signature = function(t) {
try {
return [new i(e(t, 0, [0], "02"), 16), new i(e(t, 0, [1], "02"), 16)]
} catch (r) {
throw new Error("malformed ASN.1 DSA signature")
}
}, this.readPKCS5PrvKeyHex = function(t) {
var i, n, s, a, o;
if (!1 === r(t)) throw new Error("not ASN.1 hex string");
try {
i = e(t, 0, [1], "02"), n = e(t, 0, [2], "02"), s = e(t, 0, [3], "02"), a = e(t, 0, [4], "02"), o = e(t, 0, [5], "02")
} catch (h) {
throw new Error("malformed PKCS#1/5 plain DSA private key")
}
this.setPrivateHex(i, n, s, a, o)
}, this.readPKCS8PrvKeyHex = function(t) {
var i, n, s, a;
if (!1 === r(t)) throw new Error("not ASN.1 hex string");
try {
i = e(t, 0, [1, 1, 0], "02"), n = e(t, 0, [1, 1, 1], "02"), s = e(t, 0, [1, 1, 2], "02"), a = e(t, 0, [2, 0], "02")
} catch (o) {
throw new Error("malformed PKCS#8 plain DSA private key")
}
this.setPrivateHex(i, n, s, null, a)
}, this.readPKCS8PubKeyHex = function(t) {
var i, n, s, a;
if (!1 === r(t)) throw new Error("not ASN.1 hex string");
try {
i = e(t, 0, [0, 1, 0], "02"), n = e(t, 0, [0, 1, 1], "02"), s = e(t, 0, [0, 1, 2], "02"), a = e(t, 0, [1, 0], "02")
} catch (o) {
throw new Error("malformed PKCS#8 DSA public key")
}
this.setPublicHex(i, n, s, a)
}, this.readCertPubKeyHex = function(t, i) {
var n, s, a, o;
if (!1 === r(t)) throw new Error("not ASN.1 hex string");
try {
n = e(t, 0, [0, 5, 0, 1, 0], "02"), s = e(t, 0, [0, 5, 0, 1, 1], "02"), a = e(t, 0, [0, 5, 0, 1, 2], "02"), o = e(t, 0, [0, 5, 1, 0], "02")
} catch (h) {
throw new Error("malformed X.509 certificate DSA public key")
}
this.setPublicHex(n, s, a, o)
}
};
var Gt = function() {
var t = function(t, r, i) {
return e(d.AES, t, r, i)
},
e = function(t, e, r, i) {
var n = d.enc.Hex.parse(e),
s = d.enc.Hex.parse(r),
a = d.enc.Hex.parse(i),
o = {};
o.key = s, o.iv = a, o.ciphertext = n;
var h = t.decrypt(o, s, {
iv: a
});
return d.enc.Hex.stringify(h)
},
r = function(t, e, r) {
return i(d.AES, t, e, r)
},
i = function(t, e, r, i) {
var n = d.enc.Hex.parse(e),
s = d.enc.Hex.parse(r),
a = d.enc.Hex.parse(i),
o = t.encrypt(n, s, {
iv: a
}),
h = d.enc.Hex.parse(o.toString());
return d.enc.Base64.stringify(h)
},
n = {
"AES-256-CBC": {
proc: t,
eproc: r,
keylen: 32,
ivlen: 16
},
"AES-192-CBC": {
proc: t,
eproc: r,
keylen: 24,
ivlen: 16
},
"AES-128-CBC": {
proc: t,
eproc: r,
keylen: 16,
ivlen: 16
},
"DES-EDE3-CBC": {
proc: function(t, r, i) {
return e(d.TripleDES, t, r, i)
},
eproc: function(t, e, r) {
return i(d.TripleDES, t, e, r)
},
keylen: 24,
ivlen: 8
},
"DES-CBC": {
proc: function(t, r, i) {
return e(d.DES, t, r, i)
},
eproc: function(t, e, r) {
return i(d.DES, t, e, r)
},
keylen: 8,
ivlen: 8
}
},
s = function(t) {
var e = {},
r = t.match(new RegExp("DEK-Info: ([^,]+),([0-9A-Fa-f]+)", "m"));
r && (e.cipher = r[1], e.ivsalt = r[2]);
var i = t.match(new RegExp("-----BEGIN ([A-Z]+) PRIVATE KEY-----"));
i && (e.type = i[1]);
var n = -1,
s = 0; - 1 != t.indexOf("\r\n\r\n") && (n = t.indexOf("\r\n\r\n"), s = 2), -1 != t.indexOf("\n\n") && (n = t.indexOf("\n\n"), s = 1);
var a = t.indexOf("-----END");
if (-1 != n && -1 != a) {
var o = t.substring(n + 2 * s, a - s);
o = o.replace(/\s+/g, ""), e.data = o
}
return e
},
a = function(t, e, r) {
for (var i = r.substring(0, 16), s = d.enc.Hex.parse(i), a = d.enc.Utf8.parse(e), o = n[t].keylen + n[t].ivlen, h = "", u = null;;) {
var c = d.algo.MD5.create();
if (null != u && c.update(u), c.update(a), c.update(s), u = c.finalize(), (h += d.enc.Hex.stringify(u)).length >= 2 * o) break
}
var l = {};
return l.keyhex = h.substr(0, 2 * n[t].keylen), l.ivhex = h.substr(2 * n[t].keylen, 2 * n[t].ivlen), l
},
o = function(t, e, r, i) {
var s = d.enc.Base64.parse(t),
a = d.enc.Hex.stringify(s);
return (0, n[e].proc)(a, r, i)
};
return {
version: "1.0.0",
parsePKCS5PEM: function(t) {
return s(t)
},
getKeyAndUnusedIvByPasscodeAndIvsalt: function(t, e, r) {
return a(t, e, r)
},
decryptKeyB64: function(t, e, r, i) {
return o(t, e, r, i)
},
getDecryptedKeyHex: function(t, e) {
var r = s(t),
i = (r.type, r.cipher),
n = r.ivsalt,
h = r.data,
u = a(i, e, n).keyhex;
return o(h, i, u, n)
},
getEncryptedPKCS5PEMFromPrvKeyHex: function(t, e, r, i, s) {
var o = "";
if (void 0 !== i && null != i || (i = "AES-256-CBC"), void 0 === n[i]) throw new Error("KEYUTIL unsupported algorithm: " + i);
void 0 !== s && null != s || (s = function(t) {
var e = d.lib.WordArray.random(t);
return d.enc.Hex.stringify(e)
}(n[i].ivlen).toUpperCase());
var h = function(t, e, r, i) {
return (0, n[e].eproc)(t, r, i)
}(e, i, a(i, r, s).keyhex, s);
return o = "-----BEGIN " + t + " PRIVATE KEY-----\r\n", o += "Proc-Type: 4,ENCRYPTED\r\n", o += "DEK-Info: " + i + "," + s + "\r\n", o += "\r\n", (o += h.replace(/(.{64})/g, "$1\r\n")) + "\r\n-----END " + t + " PRIVATE KEY-----\r\n"
},
parseHexOfEncryptedPKCS8: function(t) {
var e = lt,
r = e.getChildIdx,
i = e.getV,
n = {},
s = r(t, 0);
if (2 != s.length) throw new Error("malformed format: SEQUENCE(0).items != 2: " + s.length);
n.ciphertext = i(t, s[1]);
var a = r(t, s[0]);
if (2 != a.length) throw new Error("malformed format: SEQUENCE(0.0).items != 2: " + a.length);
if ("2a864886f70d01050d" != i(t, a[0])) throw new Error("this only supports pkcs5PBES2");
var o = r(t, a[1]);
if (2 != a.length) throw new Error("malformed format: SEQUENCE(0.0.1).items != 2: " + o.length);
var h = r(t, o[1]);
if (2 != h.length) throw new Error("malformed format: SEQUENCE(0.0.1.1).items != 2: " + h.length);
if ("2a864886f70d0307" != i(t, h[0])) throw "this only supports TripleDES";
n.encryptionSchemeAlg = "TripleDES", n.encryptionSchemeIV = i(t, h[1]);
var u = r(t, o[0]);
if (2 != u.length) throw new Error("malformed format: SEQUENCE(0.0.1.0).items != 2: " + u.length);
if ("2a864886f70d01050c" != i(t, u[0])) throw new Error("this only supports pkcs5PBKDF2");
var c = r(t, u[1]);
if (c.length < 2) throw new Error("malformed format: SEQUENCE(0.0.1.0.1).items < 2: " + c.length);
n.pbkdf2Salt = i(t, c[0]);
var l = i(t, c[1]);
try {
n.pbkdf2Iter = parseInt(l, 16)
} catch (f) {
throw new Error("malformed format pbkdf2Iter: " + l)
}
return n
},
getPBKDF2KeyHexFromParam: function(t, e) {
var r = d.enc.Hex.parse(t.pbkdf2Salt),
i = t.pbkdf2Iter,
n = d.PBKDF2(e, r, {
keySize: 6,
iterations: i
});
return d.enc.Hex.stringify(n)
},
_getPlainPKCS8HexFromEncryptedPKCS8PEM: function(t, e) {
var r = Ct(t, "ENCRYPTED PRIVATE KEY"),
i = this.parseHexOfEncryptedPKCS8(r),
n = Gt.getPBKDF2KeyHexFromParam(i, e),
s = {};
s.ciphertext = d.enc.Hex.parse(i.ciphertext);
var a = d.enc.Hex.parse(n),
o = d.enc.Hex.parse(i.encryptionSchemeIV),
h = d.TripleDES.decrypt(s, a, {
iv: o
});
return d.enc.Hex.stringify(h)
},
getKeyFromEncryptedPKCS8PEM: function(t, e) {
var r = this._getPlainPKCS8HexFromEncryptedPKCS8PEM(t, e);
return this.getKeyFromPlainPrivatePKCS8Hex(r)
},
parsePlainPrivatePKCS8Hex: function(t) {
var e = lt,
r = e.getChildIdx,
i = e.getV,
n = {
algparam: null
};
if ("30" != t.substr(0, 2)) throw new Error("malformed plain PKCS8 private key(code:001)");
var s = r(t, 0);
if (s.length < 3) throw new Error("malformed plain PKCS8 private key(code:002)");
if ("30" != t.substr(s[1], 2)) throw new Error("malformed PKCS8 private key(code:003)");
var a = r(t, s[1]);
if (2 != a.length) throw new Error("malformed PKCS8 private key(code:004)");
if ("06" != t.substr(a[0], 2)) throw new Error("malformed PKCS8 private key(code:005)");
if (n.algoid = i(t, a[0]), "06" == t.substr(a[1], 2) && (n.algparam = i(t, a[1])), "04" != t.substr(s[2], 2)) throw new Error("malformed PKCS8 private key(code:006)");
return n.keyidx = e.getVidx(t, s[2]), n
},
getKeyFromPlainPrivatePKCS8PEM: function(t) {
var e = Ct(t, "PRIVATE KEY");
return this.getKeyFromPlainPrivatePKCS8Hex(e)
},
getKeyFromPlainPrivatePKCS8Hex: function(t) {
var e, r = this.parsePlainPrivatePKCS8Hex(t);
if ("2a864886f70d010101" == r.algoid) e = new rt;
else if ("2a8648ce380401" == r.algoid) e = new ht.crypto.DSA;
else {
if ("2a8648ce3d0201" != r.algoid) throw new Error("unsupported private key algorithm");
e = new ht.crypto.ECDSA
}
return e.readPKCS8PrvKeyHex(t), e
},
_getKeyFromPublicPKCS8Hex: function(t) {
var e, r = lt.getVbyList(t, 0, [0, 0], "06");
if ("2a864886f70d010101" === r) e = new rt;
else if ("2a8648ce380401" === r) e = new ht.crypto.DSA;
else {
if ("2a8648ce3d0201" !== r) throw new Error("unsupported PKCS#8 public key hex");
e = new ht.crypto.ECDSA
}
return e.readPKCS8PubKeyHex(t), e
},
parsePublicRawRSAKeyHex: function(t) {
var e = lt,
r = e.getChildIdx,
i = e.getV,
n = {};
if ("30" != t.substr(0, 2)) throw new Error("malformed RSA key(code:001)");
var s = r(t, 0);
if (2 != s.length) throw new Error("malformed RSA key(code:002)");
if ("02" != t.substr(s[0], 2)) throw new Error("malformed RSA key(code:003)");
if (n.n = i(t, s[0]), "02" != t.substr(s[1], 2)) throw new Error("malformed RSA key(code:004)");
return n.e = i(t, s[1]), n
},
parsePublicPKCS8Hex: function(t) {
var e = lt,
r = e.getChildIdx,
i = e.getV,
n = {
algparam: null
},
s = r(t, 0);
if (2 != s.length) throw new Error("outer DERSequence shall have 2 elements: " + s.length);
var a = s[0];
if ("30" != t.substr(a, 2)) throw new Error("malformed PKCS8 public key(code:001)");
var o = r(t, a);
if (2 != o.length) throw new Error("malformed PKCS8 public key(code:002)");
if ("06" != t.substr(o[0], 2)) throw new Error("malformed PKCS8 public key(code:003)");
if (n.algoid = i(t, o[0]), "06" == t.substr(o[1], 2) ? n.algparam = i(t, o[1]) : "30" == t.substr(o[1], 2) && (n.algparam = {}, n.algparam.p = e.getVbyList(t, o[1], [0], "02"), n.algparam.q = e.getVbyList(t, o[1], [1], "02"), n.algparam.g = e.getVbyList(t, o[1], [2], "02")), "03" != t.substr(s[1], 2)) throw new Error("malformed PKCS8 public key(code:004)");
return n.key = i(t, s[1]).substr(2), n
}
}
}();
function Wt(t, e) {
for (var r = "", i = e / 4 - t.length, n = 0; n < i; n++) r += "0";
return r + t
}
function Jt(t, e, r) {
for (var i = "", n = 0; i.length < e;) i += wt(r(bt(t + String.fromCharCode.apply(String, [(4278190080 & n) >> 24, (16711680 & n) >> 16, (65280 & n) >> 8, 255 & n])))), n += 1;
return i
}
function Xt(t) {
for (var e in ht.crypto.Util.DIGESTINFOHEAD) {
var r = ht.crypto.Util.DIGESTINFOHEAD[e],
i = r.length;
if (t.substring(0, i) == r) return [e, t.substring(i)]
}
return []
}
function $t(t) {
var e, r = lt,
i = r.getChildIdx,
n = r.getV,
s = r.getTLV,
a = r.getVbyList,
o = r.getVbyListEx,
h = r.getTLVbyList,
u = r.getTLVbyListEx,
c = r.getIdxbyList,
l = r.getIdxbyListEx,
f = r.getVidx,
g = r.getInt,
p = r.oidname,
d = r.hextooidstr,
v = Ct;
try {
e = ht.asn1.x509.AlgorithmIdentifier.PSSNAME2ASN1TLV
} catch (y) {}
this.HEX2STAG = {
"0c": "utf8",
13: "prn",
16: "ia5",
"1a": "vis",
"1e": "bmp"
}, this.hex = null, this.version = 0, this.foffset = 0, this.aExtInfo = null, this.getVersion = function() {
if (null === this.hex || 0 !== this.version) return this.version;
var t = h(this.hex, 0, [0, 0]);
if ("a0" == t.substr(0, 2)) {
var e = h(t, 0, [0]),
r = g(e, 0);
if (r < 0 || 2 < r) throw new Error("malformed version field");
return this.version = r + 1, this.version
}
return this.version = 1, this.foffset = -1, 1
}, this.getSerialNumberHex = function() {
return o(this.hex, 0, [0, 0], "02")
}, this.getSignatureAlgorithmField = function() {
var t = u(this.hex, 0, [0, 1]);
return this.getAlgorithmIdentifierName(t)
}, this.getAlgorithmIdentifierName = function(t) {
for (var r in e)
if (t === e[r]) return r;
return p(o(t, 0, [0], "06"))
}, this.getIssuer = function() {
return this.getX500Name(this.getIssuerHex())
}, this.getIssuerHex = function() {
return h(this.hex, 0, [0, 3 + this.foffset], "30")
}, this.getIssuerString = function() {
return this.getIssuer().str
}, this.getSubject = function() {
return this.getX500Name(this.getSubjectHex())
}, this.getSubjectHex = function() {
return h(this.hex, 0, [0, 5 + this.foffset], "30")
}, this.getSubjectString = function() {
return this.getSubject().str
}, this.getNotBefore = function() {
var t = a(this.hex, 0, [0, 4 + this.foffset, 0]);
return t = t.replace(/(..)/g, "%$1"), decodeURIComponent(t)
}, this.getNotAfter = function() {
var t = a(this.hex, 0, [0, 4 + this.foffset, 1]);
return t = t.replace(/(..)/g, "%$1"), decodeURIComponent(t)
}, this.getPublicKeyHex = function() {
return r.getTLVbyList(this.hex, 0, [0, 6 + this.foffset], "30")
}, this.getPublicKeyIdx = function() {
return c(this.hex, 0, [0, 6 + this.foffset], "30")
}, this.getPublicKeyContentIdx = function() {
var t = this.getPublicKeyIdx();
return c(this.hex, t, [1, 0], "30")
}, this.getPublicKey = function() {
return Gt.getKey(this.getPublicKeyHex(), null, "pkcs8pub")
}, this.getSignatureAlgorithmName = function() {
var t = h(this.hex, 0, [1], "30");
return this.getAlgorithmIdentifierName(t)
}, this.getSignatureValueHex = function() {
return a(this.hex, 0, [2], "03", !0)
}, this.verifySignature = function(t) {
var e = this.getSignatureAlgorithmField(),
r = this.getSignatureValueHex(),
i = h(this.hex, 0, [0], "30"),
n = new ht.crypto.Signature({
alg: e
});
return n.init(t), n.updateHex(i), n.verify(r)
}, this.parseExt = function(t) {
var e, s, o;
if (void 0 === t) {
if (o = this.hex, 3 !== this.version) return -1;
e = c(o, 0, [0, 7, 0], "30"), s = i(o, e)
} else {
o = Ct(t);
var h = c(o, 0, [0, 3, 0, 0], "06");
if ("2a864886f70d01090e" != n(o, h)) return void(this.aExtInfo = new Array);
e = c(o, 0, [0, 3, 0, 1, 0], "30"), s = i(o, e), this.hex = o
}
this.aExtInfo = new Array;
for (var u = 0; u < s.length; u++) {
var l = {
critical: !1
},
g = 0;
3 === i(o, s[u]).length && (l.critical = !0, g = 1), l.oid = r.hextooidstr(a(o, s[u], [0], "06"));
var p = c(o, s[u], [1 + g]);
l.vidx = f(o, p), this.aExtInfo.push(l)
}
}, this.getExtInfo = function(t) {
var e = this.aExtInfo,
r = t;
if (t.match(/^[0-9.]+$/) || (r = ht.asn1.x509.OID.name2oid(t)), "" !== r)
for (var i = 0; i < e.length; i++)
if (e[i].oid === r) return e[i]
}, this.getExtBasicConstraints = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("basicConstraints");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var i = {
extname: "basicConstraints"
};
if (e && (i.critical = !0), "3000" === t) return i;
if ("30030101ff" === t) return i.cA = !0, i;
if ("30060101ff02" === t.substr(0, 12)) {
var a = n(t, 10),
o = parseInt(a, 16);
return i.cA = !0, i.pathLen = o, i
}
throw new Error("hExtV parse error: " + t)
}, this.getExtKeyUsage = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("keyUsage");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var i = {
extname: "keyUsage"
};
return e && (i.critical = !0), i.names = this.getExtKeyUsageString(t).split(","), i
}, this.getExtKeyUsageBin = function(t) {
if (void 0 === t) {
var e = this.getExtInfo("keyUsage");
if (void 0 === e) return "";
t = s(this.hex, e.vidx)
}
if (8 != t.length && 10 != t.length) throw new Error("malformed key usage value: " + t);
var r = "000000000000000" + parseInt(t.substr(6), 16).toString(2);
return 8 == t.length && (r = r.slice(-8)), 10 == t.length && (r = r.slice(-16)), "" == (r = r.replace(/0+$/, "")) && (r = "0"), r
}, this.getExtKeyUsageString = function(t) {
for (var e = this.getExtKeyUsageBin(t), r = new Array, i = 0; i < e.length; i++) "1" == e.substr(i, 1) && r.push($t.KEYUSAGE_NAME[i]);
return r.join(",")
}, this.getExtSubjectKeyIdentifier = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("subjectKeyIdentifier");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var i = {
extname: "subjectKeyIdentifier"
};
e && (i.critical = !0);
var a = n(t, 0);
return i.kid = {
hex: a
}, i
}, this.getExtAuthorityKeyIdentifier = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("authorityKeyIdentifier");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var a = {
extname: "authorityKeyIdentifier"
};
e && (a.critical = !0);
for (var o = i(t, 0), h = 0; h < o.length; h++) {
var u = t.substr(o[h], 2);
if ("80" === u && (a.kid = {
hex: n(t, o[h])
}), "a1" === u) {
var c = s(t, o[h]),
l = this.getGeneralNames(c);
a.issuer = l[0].dn
}
"82" === u && (a.sn = {
hex: n(t, o[h])
})
}
return a
}, this.getExtExtKeyUsage = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("extKeyUsage");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var a = {
extname: "extKeyUsage",
array: []
};
e && (a.critical = !0);
for (var o = i(t, 0), h = 0; h < o.length; h++) a.array.push(p(n(t, o[h])));
return a
}, this.getExtExtKeyUsageName = function() {
var t = this.getExtInfo("extKeyUsage");
if (void 0 === t) return t;
var e = new Array,
r = s(this.hex, t.vidx);
if ("" === r) return e;
for (var a = i(r, 0), o = 0; o < a.length; o++) e.push(p(n(r, a[o])));
return e
}, this.getExtSubjectAltName = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("subjectAltName");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var i = {
extname: "subjectAltName",
array: []
};
return e && (i.critical = !0), i.array = this.getGeneralNames(t), i
}, this.getExtIssuerAltName = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("issuerAltName");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var i = {
extname: "issuerAltName",
array: []
};
return e && (i.critical = !0), i.array = this.getGeneralNames(t), i
}, this.getGeneralNames = function(t) {
for (var e = i(t, 0), r = [], n = 0; n < e.length; n++) {
var a = this.getGeneralName(s(t, e[n]));
void 0 !== a && r.push(a)
}
return r
}, this.getGeneralName = function(t) {
var e = t.substr(0, 2),
r = n(t, 0),
i = wt(r);
return "81" == e ? {
rfc822: i
} : "82" == e ? {
dns: i
} : "86" == e ? {
uri: i
} : "87" == e ? {
ip: Ot(r)
} : "a4" == e ? {
dn: this.getX500Name(r)
} : void 0
}, this.getExtSubjectAltName2 = function() {
var t, e, r, a = this.getExtInfo("subjectAltName");
if (void 0 === a) return a;
for (var o = new Array, h = s(this.hex, a.vidx), u = i(h, 0), c = 0; c < u.length; c++) r = h.substr(u[c], 2), t = n(h, u[c]), "81" === r && (e = Et(t), o.push(["MAIL", e])), "82" === r && (e = Et(t), o.push(["DNS", e])), "84" === r && (e = $t.hex2dn(t, 0), o.push(["DN", e])), "86" === r && (e = Et(t), o.push(["URI", e])), "87" === r && (e = Ot(t), o.push(["IP", e]));
return o
}, this.getExtCRLDistributionPoints = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("cRLDistributionPoints");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var n = {
extname: "cRLDistributionPoints",
array: []
};
e && (n.critical = !0);
for (var a = i(t, 0), o = 0; o < a.length; o++) {
var h = s(t, a[o]);
n.array.push(this.getDistributionPoint(h))
}
return n
}, this.getDistributionPoint = function(t) {
for (var e = {}, r = i(t, 0), n = 0; n < r.length; n++) {
var a = t.substr(r[n], 2),
o = s(t, r[n]);
"a0" == a && (e.dpname = this.getDistributionPointName(o))
}
return e
}, this.getDistributionPointName = function(t) {
for (var e = {}, r = i(t, 0), n = 0; n < r.length; n++) {
var a = t.substr(r[n], 2),
o = s(t, r[n]);
"a0" == a && (e.full = this.getGeneralNames(o))
}
return e
}, this.getExtCRLDistributionPointsURI = function() {
var t = this.getExtInfo("cRLDistributionPoints");
if (void 0 === t) return t;
for (var e = new Array, r = i(this.hex, t.vidx), n = 0; n < r.length; n++) try {
var s = Et(a(this.hex, r[n], [0, 0, 0], "86"));
e.push(s)
} catch (o) {}
return e
}, this.getExtAIAInfo = function() {
var t = this.getExtInfo("authorityInfoAccess");
if (void 0 === t) return t;
for (var e = {
ocsp: [],
caissuer: []
}, r = i(this.hex, t.vidx), n = 0; n < r.length; n++) {
var s = a(this.hex, r[n], [0], "06"),
o = a(this.hex, r[n], [1], "86");
"2b06010505073001" === s && e.ocsp.push(Et(o)), "2b06010505073002" === s && e.caissuer.push(Et(o))
}
return e
}, this.getExtAuthorityInfoAccess = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("authorityInfoAccess");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var n = {
extname: "authorityInfoAccess",
array: []
};
e && (n.critical = !0);
for (var h = i(t, 0), u = 0; u < h.length; u++) {
var c = o(t, h[u], [0], "06"),
l = Et(a(t, h[u], [1], "86"));
if ("2b06010505073001" == c) n.array.push({
ocsp: l
});
else {
if ("2b06010505073002" != c) throw new Error("unknown method: " + c);
n.array.push({
caissuer: l
})
}
}
return n
}, this.getExtCertificatePolicies = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("certificatePolicies");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var n = {
extname: "certificatePolicies",
array: []
};
e && (n.critical = !0);
for (var a = i(t, 0), o = 0; o < a.length; o++) {
var h = s(t, a[o]),
u = this.getPolicyInformation(h);
n.array.push(u)
}
return n
}, this.getPolicyInformation = function(t) {
var e = {},
r = a(t, 0, [0], "06");
e.policyoid = p(r);
var n = l(t, 0, [1], "30");
if (-1 != n) {
e.array = [];
for (var o = i(t, n), h = 0; h < o.length; h++) {
var u = s(t, o[h]),
c = this.getPolicyQualifierInfo(u);
e.array.push(c)
}
}
return e
}, this.getPolicyQualifierInfo = function(t) {
var e = {},
r = a(t, 0, [0], "06");
if ("2b06010505070201" === r) {
var i = o(t, 0, [1], "16");
e.cps = wt(i)
} else if ("2b06010505070202" === r) {
var n = h(t, 0, [1], "30");
e.unotice = this.getUserNotice(n)
}
return e
}, this.getUserNotice = function(t) {
for (var e = {}, r = i(t, 0), n = 0; n < r.length; n++) {
var a = s(t, r[n]);
"30" != a.substr(0, 2) && (e.exptext = this.getDisplayText(a))
}
return e
}, this.getDisplayText = function(t) {
var e = {};
return e.type = {
"0c": "utf8",
16: "ia5",
"1a": "vis",
"1e": "bmp"
}[t.substr(0, 2)], e.str = wt(n(t, 0)), e
}, this.getExtCRLNumber = function(t, e) {
var r = {
extname: "cRLNumber"
};
if (e && (r.critical = !0), "02" == t.substr(0, 2)) return r.num = {
hex: n(t, 0)
}, r;
throw new Error("hExtV parse error: " + t)
}, this.getExtCRLReason = function(t, e) {
var r = {
extname: "cRLReason"
};
if (e && (r.critical = !0), "0a" == t.substr(0, 2)) return r.code = parseInt(n(t, 0), 16), r;
throw new Error("hExtV parse error: " + t)
}, this.getExtOcspNonce = function(t, e) {
var r = {
extname: "ocspNonce"
};
e && (r.critical = !0);
var i = n(t, 0);
return r.hex = i, r
}, this.getExtOcspNoCheck = function(t, e) {
var r = {
extname: "ocspNoCheck"
};
return e && (r.critical = !0), r
}, this.getExtAdobeTimeStamp = function(t, e) {
if (void 0 === t && void 0 === e) {
var r = this.getExtInfo("adobeTimeStamp");
if (void 0 === r) return;
t = s(this.hex, r.vidx), e = r.critical
}
var n = {
extname: "adobeTimeStamp"
};
e && (n.critical = !0);
var a = i(t, 0);
if (a.length > 1) {
var o = s(t, a[1]),
h = this.getGeneralName(o);
null != h.uri && (n.uri = h.uri)
}
if (a.length > 2) {
var u = s(t, a[2]);
"0101ff" == u && (n.reqauth = !0), "010100" == u && (n.reqauth = !1)
}
return n
}, this.getX500NameRule = function(t) {
for (var e = null, r = [], i = 0; i < t.length; i++)
for (var n = t[i], s = 0; s < n.length; s++) r.push(n[s]);
for (i = 0; i < r.length; i++) {
var a = r[i],
o = a.ds,
h = a.value,
u = a.type;
if ("prn" != o && "utf8" != o && "ia5" != o) return "mixed";
if ("ia5" == o) {
if ("CN" != u) return "mixed";
if (ht.lang.String.isMail(h)) continue;
return "mixed"
}
if ("C" == u) {
if ("prn" == o) continue;
return "mixed"
}
if (null == e) e = o;
else if (e !== o) return "mixed"
}
return null == e ? "prn" : e
}, this.getX500Name = function(t) {
var e = this.getX500NameArray(t);
return {
array: e,
str: this.dnarraytostr(e)
}
}, this.getX500NameArray = function(t) {
for (var e = [], r = i(t, 0), n = 0; n < r.length; n++) e.push(this.getRDN(s(t, r[n])));
return e
}, this.getRDN = function(t) {
for (var e = [], r = i(t, 0), n = 0; n < r.length; n++) e.push(this.getAttrTypeAndValue(s(t, r[n])));
return e
}, this.getAttrTypeAndValue = function(t) {
var e = {
type: null,
value: null,
ds: null
},
r = i(t, 0),
n = a(t, r[0], [], "06"),
s = a(t, r[1], []),
o = ht.asn1.ASN1Util.oidHexToInt(n);
return e.type = ht.asn1.x509.OID.oid2atype(o), e.ds = this.HEX2STAG[t.substr(r[1], 2)], "bmp" != e.ds ? e.value = Et(s) : e.value = jt(s), e
}, this.readCertPEM = function(t) {
this.readCertHex(v(t))
}, this.readCertHex = function(t) {
this.hex = t, this.getVersion();
try {
c(this.hex, 0, [0, 7], "a3"), this.parseExt()
} catch (e) {}
}, this.getParam = function() {
var t = {};
return t.version = this.getVersion(), t.serial = {
hex: this.getSerialNumberHex()
}, t.sigalg = this.getSignatureAlgorithmField(), t.issuer = this.getIssuer(), t.notbefore = this.getNotBefore(), t.notafter = this.getNotAfter(), t.subject = this.getSubject(), t.sbjpubkey = It(this.getPublicKeyHex(), "PUBLIC KEY"), this.aExtInfo.length > 0 && (t.ext = this.getExtParamArray()), t.sighex = this.getSignatureValueHex(), t
}, this.getExtParamArray = function(t) {
null == t && -1 != l(this.hex, 0, [0, "[3]"]) && (t = u(this.hex, 0, [0, "[3]", 0], "30"));
for (var e = [], r = i(t, 0), n = 0; n < r.length; n++) {
var a = s(t, r[n]),
o = this.getExtParam(a);
null != o && e.push(o)
}
return e
}, this.getExtParam = function(t) {
var e = i(t, 0).length;
if (2 != e && 3 != e) throw new Error("wrong number elements in Extension: " + e + " " + t);
var r = d(a(t, 0, [0], "06")),
n = !1;
3 == e && "0101ff" == h(t, 0, [1]) && (n = !0);
var s = h(t, 0, [e - 1, 0]),
o = void 0;
if ("2.5.29.14" == r ? o = this.getExtSubjectKeyIdentifier(s, n) : "2.5.29.15" == r ? o = this.getExtKeyUsage(s, n) : "2.5.29.17" == r ? o = this.getExtSubjectAltName(s, n) : "2.5.29.18" == r ? o = this.getExtIssuerAltName(s, n) : "2.5.29.19" == r ? o = this.getExtBasicConstraints(s, n) : "2.5.29.31" == r ? o = this.getExtCRLDistributionPoints(s, n) : "2.5.29.32" == r ? o = this.getExtCertificatePolicies(s, n) : "2.5.29.35" == r ? o = this.getExtAuthorityKeyIdentifier(s, n) : "2.5.29.37" == r ? o = this.getExtExtKeyUsage(s, n) : "1.3.6.1.5.5.7.1.1" == r ? o = this.getExtAuthorityInfoAccess(s, n) : "2.5.29.20" == r ? o = this.getExtCRLNumber(s, n) : "2.5.29.21" == r ? o = this.getExtCRLReason(s, n) : "1.3.6.1.5.5.7.48.1.2" == r ? o = this.getExtOcspNonce(s, n) : "1.3.6.1.5.5.7.48.1.5" == r ? o = this.getExtOcspNoCheck(s, n) : "1.2.840.113583.1.1.9.1" == r && (o = this.getExtAdobeTimeStamp(s, n)), null != o) return o;
var u = {
extname: r,
extn: s
};
return n && (u.critical = !0), u
}, this.findExt = function(t, e) {
for (var r = 0; r < t.length; r++)
if (t[r].extname == e) return t[r];
return null
}, this.updateExtCDPFullURI = function(t, e) {
var r = this.findExt(t, "cRLDistributionPoints");
if (null != r && null != r.array)
for (var i = r.array, n = 0; n < i.length; n++)
if (null != i[n].dpname && null != i[n].dpname.full)
for (var s = i[n].dpname.full, a = 0; a < s.length; a++) {
var o = s[n];
null != o.uri && (o.uri = e)
}
}, this.updateExtAIAOCSP = function(t, e) {
var r = this.findExt(t, "authorityInfoAccess");
if (null != r && null != r.array)
for (var i = r.array, n = 0; n < i.length; n++) null != i[n].ocsp && (i[n].ocsp = e)
}, this.updateExtAIACAIssuer = function(t, e) {
var r = this.findExt(t, "authorityInfoAccess");
if (null != r && null != r.array)
for (var i = r.array, n = 0; n < i.length; n++) null != i[n].caissuer && (i[n].caissuer = e)
}, this.dnarraytostr = function(t) {
return "/" + t.map((function(t) {
return function(t) {
return t.map((function(t) {
return (e = t, e.type + "=" + e.value).replace(/\+/, "\\+");
var e
})).join("+")
}(t).replace(/\//, "\\/")
})).join("/")
}, this.getInfo = function() {
var t, e, r, i, n = function(t) {
for (var e = "", r = t.array, i = 0; i < r.length; i++) {
var n = r[i];
if (e += " policy oid: " + n.policyoid + "\n", void 0 !== n.array)
for (var s = 0; s < n.array.length; s++) {
var a = n.array[s];
void 0 !== a.cps && (e += " cps: " + a.cps + "\n")
}
}
return e
},
s = function(t) {
for (var e = "", r = t.array, n = 0; n < r.length; n++) {
var s = r[n];
try {
void 0 !== s.dpname.full[0].uri && (e += " " + s.dpname.full[0].uri + "\n")
} catch (i) {}
try {
void 0 !== s.dname.full[0].dn.hex && (e += " " + $t.hex2dn(s.dpname.full[0].dn.hex) + "\n")
} catch (i) {}
}
return e
},
a = function(t) {
for (var e = "", r = t.array, i = 0; i < r.length; i++) {
var n = r[i];
void 0 !== n.caissuer && (e += " caissuer: " + n.caissuer + "\n"), void 0 !== n.ocsp && (e += " ocsp: " + n.ocsp + "\n")
}
return e
};
if (t = "Basic Fields\n", t += " serial number: " + this.getSerialNumberHex() + "\n", t += " signature algorithm: " + this.getSignatureAlgorithmField() + "\n", t += " issuer: " + this.getIssuerString() + "\n", t += " notBefore: " + this.getNotBefore() + "\n", t += " notAfter: " + this.getNotAfter() + "\n", t += " subject: " + this.getSubjectString() + "\n", t += " subject public key info: \n", t += " key algorithm: " + (e = this.getPublicKey()).type + "\n", "RSA" === e.type && (t += " n=" + Kt(e.n.toString(16)).substr(0, 16) + "...\n", t += " e=" + Kt(e.e.toString(16)) + "\n"), null != (r = this.aExtInfo)) {
t += "X509v3 Extensions:\n";
for (var o = 0; o < r.length; o++) {
var h = r[o],
u = ht.asn1.x509.OID.oid2name(h.oid);
"" === u && (u = h.oid);
var c = "";
if (!0 === h.critical && (c = "CRITICAL"), t += " " + u + " " + c + ":\n", "basicConstraints" === u) {
var l = this.getExtBasicConstraints();
void 0 === l.cA ? t += " {}\n" : (t += " cA=true", void 0 !== l.pathLen && (t += ", pathLen=" + l.pathLen), t += "\n")
} else if ("keyUsage" === u) t += " " + this.getExtKeyUsageString() + "\n";
else if ("subjectKeyIdentifier" === u) t += " " + this.getExtSubjectKeyIdentifier().kid.hex + "\n";
else if ("authorityKeyIdentifier" === u) {
var f = this.getExtAuthorityKeyIdentifier();
void 0 !== f.kid && (t += " kid=" + f.kid.hex + "\n")
} else "extKeyUsage" === u ? t += " " + this.getExtExtKeyUsage().array.join(", ") + "\n" : "subjectAltName" === u ? t += " " + (i = this.getExtSubjectAltName(), JSON.stringify(i.array).replace(/[\[\]\{\}\"]/g, "") + "\n") : "cRLDistributionPoints" === u ? t += s(this.getExtCRLDistributionPoints()) : "authorityInfoAccess" === u ? t += a(this.getExtAuthorityInfoAccess()) : "certificatePolicies" === u && (t += n(this.getExtCertificatePolicies()))
}
}
return (t += "signature algorithm: " + this.getSignatureAlgorithmName() + "\n") + "signature: " + this.getSignatureValueHex().substr(0, 16) + "...\n"
}, "string" == typeof t && (-1 != t.indexOf("-----BEGIN") ? this.readCertPEM(t) : ht.lang.String.isHex(t) && this.readCertHex(t))
}
Gt.getKey = function(t, e, r) {
var i, n = (y = lt).getChildIdx,
s = (y.getV, y.getVbyList),
a = ht.crypto,
o = a.ECDSA,
h = a.DSA,
u = rt,
c = Ct,
l = Gt;
if (void 0 !== u && t instanceof u) return t;
if (void 0 !== o && t instanceof o) return t;
if (void 0 !== h && t instanceof h) return t;
if (void 0 !== t.curve && void 0 !== t.xy && void 0 === t.d) return new o({
pub: t.xy,
curve: t.curve
});
if (void 0 !== t.curve && void 0 !== t.d) return new o({
prv: t.d,
curve: t.curve
});
if (void 0 === t.kty && void 0 !== t.n && void 0 !== t.e && void 0 === t.d) return (P = new u).setPublic(t.n, t.e), P;
if (void 0 === t.kty && void 0 !== t.n && void 0 !== t.e && void 0 !== t.d && void 0 !== t.p && void 0 !== t.q && void 0 !== t.dp && void 0 !== t.dq && void 0 !== t.co && void 0 === t.qi) return (P = new u).setPrivateEx(t.n, t.e, t.d, t.p, t.q, t.dp, t.dq, t.co), P;
if (void 0 === t.kty && void 0 !== t.n && void 0 !== t.e && void 0 !== t.d && void 0 === t.p) return (P = new u).setPrivate(t.n, t.e, t.d), P;
if (void 0 !== t.p && void 0 !== t.q && void 0 !== t.g && void 0 !== t.y && void 0 === t.x) return (P = new h).setPublic(t.p, t.q, t.g, t.y), P;
if (void 0 !== t.p && void 0 !== t.q && void 0 !== t.g && void 0 !== t.y && void 0 !== t.x) return (P = new h).setPrivate(t.p, t.q, t.g, t.y, t.x), P;
if ("RSA" === t.kty && void 0 !== t.n && void 0 !== t.e && void 0 === t.d) return (P = new u).setPublic(St(t.n), St(t.e)), P;
if ("RSA" === t.kty && void 0 !== t.n && void 0 !== t.e && void 0 !== t.d && void 0 !== t.p && void 0 !== t.q && void 0 !== t.dp && void 0 !== t.dq && void 0 !== t.qi) return (P = new u).setPrivateEx(St(t.n), St(t.e), St(t.d), St(t.p), St(t.q), St(t.dp), St(t.dq), St(t.qi)), P;
if ("RSA" === t.kty && void 0 !== t.n && void 0 !== t.e && void 0 !== t.d) return (P = new u).setPrivate(St(t.n), St(t.e), St(t.d)), P;
if ("EC" === t.kty && void 0 !== t.crv && void 0 !== t.x && void 0 !== t.y && void 0 === t.d) {
var f = (C = new o({
curve: t.crv
})).ecparams.keycharlen,
g = "04" + ("0000000000" + St(t.x)).slice(-f) + ("0000000000" + St(t.y)).slice(-f);
return C.setPublicKeyHex(g), C
}
if ("EC" === t.kty && void 0 !== t.crv && void 0 !== t.x && void 0 !== t.y && void 0 !== t.d) {
f = (C = new o({
curve: t.crv
})).ecparams.keycharlen, g = "04" + ("0000000000" + St(t.x)).slice(-f) + ("0000000000" + St(t.y)).slice(-f);
var p = ("0000000000" + St(t.d)).slice(-f);
return C.setPublicKeyHex(g), C.setPrivateKeyHex(p), C
}
if ("pkcs5prv" === r) {
var d, v = t,
y = lt;
if (9 === (d = n(v, 0)).length)(P = new u).readPKCS5PrvKeyHex(v);
else if (6 === d.length)(P = new h).readPKCS5PrvKeyHex(v);
else {
if (!(d.length > 2 && "04" === v.substr(d[1], 2))) throw new Error("unsupported PKCS#1/5 hexadecimal key");
(P = new o).readPKCS5PrvKeyHex(v)
}
return P
}
if ("pkcs8prv" === r) return l.getKeyFromPlainPrivatePKCS8Hex(t);
if ("pkcs8pub" === r) return l._getKeyFromPublicPKCS8Hex(t);
if ("x509pub" === r) return $t.getPublicKeyFromCertHex(t);
if (-1 != t.indexOf("-END CERTIFICATE-", 0) || -1 != t.indexOf("-END X509 CERTIFICATE-", 0) || -1 != t.indexOf("-END TRUSTED CERTIFICATE-", 0)) return $t.getPublicKeyFromCertPEM(t);
if (-1 != t.indexOf("-END PUBLIC KEY-")) {
var m = Ct(t, "PUBLIC KEY");
return l._getKeyFromPublicPKCS8Hex(m)
}
if (-1 != t.indexOf("-END RSA PRIVATE KEY-") && -1 == t.indexOf("4,ENCRYPTED")) {
var S = c(t, "RSA PRIVATE KEY");
return l.getKey(S, null, "pkcs5prv")
}
if (-1 != t.indexOf("-END DSA PRIVATE KEY-") && -1 == t.indexOf("4,ENCRYPTED")) {
var x = s(i = c(t, "DSA PRIVATE KEY"), 0, [1], "02"),
w = s(i, 0, [2], "02"),
b = s(i, 0, [3], "02"),
F = s(i, 0, [4], "02"),
A = s(i, 0, [5], "02");
return (P = new h).setPrivate(new E(x, 16), new E(w, 16), new E(b, 16), new E(F, 16), new E(A, 16)), P
}
if (-1 != t.indexOf("-END EC PRIVATE KEY-") && -1 == t.indexOf("4,ENCRYPTED")) return S = c(t, "EC PRIVATE KEY"), l.getKey(S, null, "pkcs5prv");
if (-1 != t.indexOf("-END PRIVATE KEY-")) return l.getKeyFromPlainPrivatePKCS8PEM(t);
if (-1 != t.indexOf("-END RSA PRIVATE KEY-") && -1 != t.indexOf("4,ENCRYPTED")) {
var D = l.getDecryptedKeyHex(t, e),
I = new rt;
return I.readPKCS5PrvKeyHex(D), I
}
if (-1 != t.indexOf("-END EC PRIVATE KEY-") && -1 != t.indexOf("4,ENCRYPTED")) {
var C, P = s(i = l.getDecryptedKeyHex(t, e), 0, [1], "04"),
R = s(i, 0, [2, 0], "06"),
T = s(i, 0, [3, 0], "03").substr(2);
if (void 0 === ht.crypto.OID.oidhex2name[R]) throw new Error("undefined OID(hex) in KJUR.crypto.OID: " + R);
return (C = new o({
curve: ht.crypto.OID.oidhex2name[R]
})).setPublicKeyHex(T), C.setPrivateKeyHex(P), C.isPublic = !1, C
}
if (-1 != t.indexOf("-END DSA PRIVATE KEY-") && -1 != t.indexOf("4,ENCRYPTED")) return x = s(i = l.getDecryptedKeyHex(t, e), 0, [1], "02"), w = s(i, 0, [2], "02"), b = s(i, 0, [3], "02"), F = s(i, 0, [4], "02"), A = s(i, 0, [5], "02"), (P = new h).setPrivate(new E(x, 16), new E(w, 16), new E(b, 16), new E(F, 16), new E(A, 16)), P;
if (-1 != t.indexOf("-END ENCRYPTED PRIVATE KEY-")) return l.getKeyFromEncryptedPKCS8PEM(t, e);
throw new Error("not supported argument")
}, Gt.generateKeypair = function(t, e) {
if ("RSA" == t) {
var r = e;
(a = new rt).generate(r, "10001"), a.isPrivate = !0, a.isPublic = !0;
var i = new rt,
n = a.n.toString(16),
s = a.e.toString(16);
return i.setPublic(n, s), i.isPrivate = !1, i.isPublic = !0, (o = {}).prvKeyObj = a, o.pubKeyObj = i, o
}
if ("EC" == t) {
var a, o, h = e,
u = new ht.crypto.ECDSA({
curve: h
}).generateKeyPairHex();
return (a = new ht.crypto.ECDSA({
curve: h
})).setPublicKeyHex(u.ecpubhex), a.setPrivateKeyHex(u.ecprvhex), a.isPrivate = !0, a.isPublic = !1, (i = new ht.crypto.ECDSA({
curve: h
})).setPublicKeyHex(u.ecpubhex), i.isPrivate = !1, i.isPublic = !0, (o = {}).prvKeyObj = a, o.pubKeyObj = i, o
}
throw new Error("unknown algorithm: " + t)
}, Gt.getPEM = function(t, e, r, i, n, s) {
var a = ht,
o = a.asn1,
h = o.DERObjectIdentifier,
u = o.DERInteger,
c = o.ASN1Util.newObject,
l = o.x509.SubjectPublicKeyInfo,
f = a.crypto,
g = f.DSA,
p = f.ECDSA,
v = rt;
function y(t) {
return c({
seq: [{
int: 0
}, {
int: {
bigint: t.n
}
}, {
int: t.e
}, {
int: {
bigint: t.d
}
}, {
int: {
bigint: t.p
}
}, {
int: {
bigint: t.q
}
}, {
int: {
bigint: t.dmp1
}
}, {
int: {
bigint: t.dmq1
}
}, {
int: {
bigint: t.coeff
}
}]
})
}
function m(t) {
return c({
seq: [{
int: 1
}, {
octstr: {
hex: t.prvKeyHex
}
}, {
tag: ["a0", !0, {
oid: {
name: t.curveName
}
}]
}, {
tag: ["a1", !0, {
bitstr: {
hex: "00" + t.pubKeyHex
}
}]
}]
})
}
function S(t) {
return c({
seq: [{
int: 0
}, {
int: {
bigint: t.p
}
}, {
int: {
bigint: t.q
}
}, {
int: {
bigint: t.g
}
}, {
int: {
bigint: t.y
}
}, {
int: {
bigint: t.x
}
}]
})
}
if ((void 0 !== v && t instanceof v || void 0 !== g && t instanceof g || void 0 !== p && t instanceof p) && 1 == t.isPublic && (void 0 === e || "PKCS8PUB" == e)) return It(b = new l(t).getEncodedHex(), "PUBLIC KEY");
if ("PKCS1PRV" == e && void 0 !== v && t instanceof v && (void 0 === r || null == r) && 1 == t.isPrivate) return It(b = y(t).getEncodedHex(), "RSA PRIVATE KEY");
if ("PKCS1PRV" == e && void 0 !== p && t instanceof p && (void 0 === r || null == r) && 1 == t.isPrivate) {
var x = new h({
name: t.curveName
}).getEncodedHex(),
E = m(t).getEncodedHex(),
w = "";
return (w += It(x, "EC PARAMETERS")) + It(E, "EC PRIVATE KEY")
}
if ("PKCS1PRV" == e && void 0 !== g && t instanceof g && (void 0 === r || null == r) && 1 == t.isPrivate) return It(b = S(t).getEncodedHex(), "DSA PRIVATE KEY");
if ("PKCS5PRV" == e && void 0 !== v && t instanceof v && void 0 !== r && null != r && 1 == t.isPrivate) {
var b = y(t).getEncodedHex();
return void 0 === i && (i = "DES-EDE3-CBC"), this.getEncryptedPKCS5PEMFromPrvKeyHex("RSA", b, r, i, s)
}
if ("PKCS5PRV" == e && void 0 !== p && t instanceof p && void 0 !== r && null != r && 1 == t.isPrivate) return b = m(t).getEncodedHex(), void 0 === i && (i = "DES-EDE3-CBC"), this.getEncryptedPKCS5PEMFromPrvKeyHex("EC", b, r, i, s);
if ("PKCS5PRV" == e && void 0 !== g && t instanceof g && void 0 !== r && null != r && 1 == t.isPrivate) return b = S(t).getEncodedHex(), void 0 === i && (i = "DES-EDE3-CBC"), this.getEncryptedPKCS5PEMFromPrvKeyHex("DSA", b, r, i, s);
var F = function(t, e) {
var r = A(t, e);
return new c({
seq: [{
seq: [{
oid: {
name: "pkcs5PBES2"
}
}, {
seq: [{
seq: [{
oid: {
name: "pkcs5PBKDF2"
}
}, {
seq: [{
octstr: {
hex: r.pbkdf2Salt
}
}, {
int: r.pbkdf2Iter
}]
}]
}, {
seq: [{
oid: {
name: "des-EDE3-CBC"
}
}, {
octstr: {
hex: r.encryptionSchemeIV
}
}]
}]
}]
}, {
octstr: {
hex: r.ciphertext
}
}]
}).getEncodedHex()
},
A = function(t, e) {
var r = d.lib.WordArray.random(8),
i = d.lib.WordArray.random(8),
n = d.PBKDF2(e, r, {
keySize: 6,
iterations: 100
}),
s = d.enc.Hex.parse(t),
a = d.TripleDES.encrypt(s, n, {
iv: i
}) + "",
o = {};
return o.ciphertext = a, o.pbkdf2Salt = d.enc.Hex.stringify(r), o.pbkdf2Iter = 100, o.encryptionSchemeAlg = "DES-EDE3-CBC", o.encryptionSchemeIV = d.enc.Hex.stringify(i), o
};
if ("PKCS8PRV" == e && null != v && t instanceof v && 1 == t.isPrivate) {
var D = y(t).getEncodedHex();
return b = c({
seq: [{
int: 0
}, {
seq: [{
oid: {
name: "rsaEncryption"
}
}, {
null: !0
}]
}, {
octstr: {
hex: D
}
}]
}).getEncodedHex(), void 0 === r || null == r ? It(b, "PRIVATE KEY") : It(E = F(b, r), "ENCRYPTED PRIVATE KEY")
}
if ("PKCS8PRV" == e && void 0 !== p && t instanceof p && 1 == t.isPrivate) return D = new c({
seq: [{
int: 1
}, {
octstr: {
hex: t.prvKeyHex
}
}, {
tag: ["a1", !0, {
bitstr: {
hex: "00" + t.pubKeyHex
}
}]
}]
}).getEncodedHex(), b = c({
seq: [{
int: 0
}, {
seq: [{
oid: {
name: "ecPublicKey"
}
}, {
oid: {
name: t.curveName
}
}]
}, {
octstr: {
hex: D
}
}]
}).getEncodedHex(), void 0 === r || null == r ? It(b, "PRIVATE KEY") : It(E = F(b, r), "ENCRYPTED PRIVATE KEY");
if ("PKCS8PRV" == e && void 0 !== g && t instanceof g && 1 == t.isPrivate) return D = new u({
bigint: t.x
}).getEncodedHex(), b = c({
seq: [{
int: 0
}, {
seq: [{
oid: {
name: "dsa"
}
}, {
seq: [{
int: {
bigint: t.p
}
}, {
int: {
bigint: t.q
}
}, {
int: {
bigint: t.g
}
}]
}]
}, {
octstr: {
hex: D
}
}]
}).getEncodedHex(), void 0 === r || null == r ? It(b, "PRIVATE KEY") : It(E = F(b, r), "ENCRYPTED PRIVATE KEY");
throw new Error("unsupported object nor format")
}, Gt.getKeyFromCSRPEM = function(t) {
var e = Ct(t, "CERTIFICATE REQUEST");
return Gt.getKeyFromCSRHex(e)
}, Gt.getKeyFromCSRHex = function(t) {
var e = Gt.parseCSRHex(t);
return Gt.getKey(e.p8pubkeyhex, null, "pkcs8pub")
}, Gt.parseCSRHex = function(t) {
var e = lt,
r = e.getChildIdx,
i = e.getTLV,
n = {},
s = t;
if ("30" != s.substr(0, 2)) throw new Error("malformed CSR(code:001)");
var a = r(s, 0);
if (a.length < 1) throw new Error("malformed CSR(code:002)");
if ("30" != s.substr(a[0], 2)) throw new Error("malformed CSR(code:003)");
var o = r(s, a[0]);
if (o.length < 3) throw new Error("malformed CSR(code:004)");
return n.p8pubkeyhex = i(s, o[2]), n
}, Gt.getKeyID = function(t) {
var e = Gt,
r = lt;
"string" == typeof t && -1 != t.indexOf("BEGIN ") && (t = e.getKey(t));
var i = Ct(e.getPEM(t)),
n = r.getIdxbyList(i, 0, [1]),
s = r.getV(i, n).substring(2);
return ht.crypto.Util.hashHex(s, "sha1")
}, Gt.getJWK = function(t, e, r, i, n) {
var s, a, o = {},
h = ht.crypto.Util.hashHex;
if ("string" == typeof t) s = Gt.getKey(t), -1 != t.indexOf("CERTIFICATE") && (a = Ct(t));
else {
if ("object" != typeof t) throw new Error("unsupported keyinfo type");
t instanceof $t ? (s = t.getPublicKey(), a = t.hex) : s = t
}
if (s instanceof rt && s.isPrivate) o.kty = "RSA", o.n = mt(s.n.toString(16)), o.e = mt(s.e.toString(16)), o.d = mt(s.d.toString(16)), o.p = mt(s.p.toString(16)), o.q = mt(s.q.toString(16)), o.dp = mt(s.dmp1.toString(16)), o.dq = mt(s.dmq1.toString(16)), o.qi = mt(s.coeff.toString(16));
else if (s instanceof rt && s.isPublic) o.kty = "RSA", o.n = mt(s.n.toString(16)), o.e = mt(s.e.toString(16));
else if (s instanceof ht.crypto.ECDSA && s.isPrivate) {
if ("P-256" !== (c = s.getShortNISTPCurveName()) && "P-384" !== c && "P-521" !== c) throw new Error("unsupported curve name for JWT: " + c);
var u = s.getPublicKeyXYHex();
o.kty = "EC", o.crv = c, o.x = mt(u.x), o.y = mt(u.y), o.d = mt(s.prvKeyHex)
} else if (s instanceof ht.crypto.ECDSA && s.isPublic) {
var c;
if ("P-256" !== (c = s.getShortNISTPCurveName()) && "P-384" !== c && "P-521" !== c) throw new Error("unsupported curve name for JWT: " + c);
u = s.getPublicKeyXYHex(), o.kty = "EC", o.crv = c, o.x = mt(u.x), o.y = mt(u.y)
}
if (null == o.kty) throw new Error("unsupported keyinfo");
return s.isPrivate || 1 == e || (o.kid = ht.jws.JWS.getJWKthumbprint(o)), null != a && 1 != r && (o.x5c = [m(a)]), null != a && 1 != i && (o.x5t = vt(m(h(a, "sha1")))), null != a && 1 != n && (o["x5t#S256"] = vt(m(h(a, "sha256")))), o
}, Gt.getJWKFromKey = function(t) {
return Gt.getJWK(t, !0, !0, !0, !0)
}, rt.getPosArrayOfChildrenFromHex = function(t) {
return lt.getChildIdx(t, 0)
}, rt.getHexValueArrayOfChildrenFromHex = function(t) {
var e, r = lt.getV,
i = r(t, (e = rt.getPosArrayOfChildrenFromHex(t))[0]),
n = r(t, e[1]),
s = r(t, e[2]),
a = r(t, e[3]),
o = r(t, e[4]),
h = r(t, e[5]),
u = r(t, e[6]),
c = r(t, e[7]),
l = r(t, e[8]);
return (e = new Array).push(i, n, s, a, o, h, u, c, l), e
}, rt.prototype.readPrivateKeyFromPEMString = function(t) {
var e = Ct(t),
r = rt.getHexValueArrayOfChildrenFromHex(e);
this.setPrivateEx(r[1], r[2], r[3], r[4], r[5], r[6], r[7], r[8])
}, rt.prototype.readPKCS5PrvKeyHex = function(t) {
var e = rt.getHexValueArrayOfChildrenFromHex(t);
this.setPrivateEx(e[1], e[2], e[3], e[4], e[5], e[6], e[7], e[8])
}, rt.prototype.readPKCS8PrvKeyHex = function(t) {
var e, r, i, n, s, a, o, h, u = lt,
c = u.getVbyListEx;
if (!1 === u.isASN1HEX(t)) throw new Error("not ASN.1 hex string");
try {
e = c(t, 0, [2, 0, 1], "02"), r = c(t, 0, [2, 0, 2], "02"), i = c(t, 0, [2, 0, 3], "02"), n = c(t, 0, [2, 0, 4], "02"), s = c(t, 0, [2, 0, 5], "02"), a = c(t, 0, [2, 0, 6], "02"), o = c(t, 0, [2, 0, 7], "02"), h = c(t, 0, [2, 0, 8], "02")
} catch (l) {
throw new Error("malformed PKCS#8 plain RSA private key")
}
this.setPrivateEx(e, r, i, n, s, a, o, h)
}, rt.prototype.readPKCS5PubKeyHex = function(t) {
var e = lt,
r = e.getV;
if (!1 === e.isASN1HEX(t)) throw new Error("keyHex is not ASN.1 hex string");
var i = e.getChildIdx(t, 0);
if (2 !== i.length || "02" !== t.substr(i[0], 2) || "02" !== t.substr(i[1], 2)) throw new Error("wrong hex for PKCS#5 public key");
var n = r(t, i[0]),
s = r(t, i[1]);
this.setPublic(n, s)
}, rt.prototype.readPKCS8PubKeyHex = function(t) {
var e = lt;
if (!1 === e.isASN1HEX(t)) throw new Error("not ASN.1 hex string");
if ("06092a864886f70d010101" !== e.getTLVbyListEx(t, 0, [0, 0])) throw new Error("not PKCS8 RSA public key");
var r = e.getTLVbyListEx(t, 0, [1, 0]);
this.readPKCS5PubKeyHex(r)
}, rt.prototype.readCertPubKeyHex = function(t, e) {
var r, i;
(r = new $t).readCertHex(t), i = r.getPublicKeyHex(), this.readPKCS8PubKeyHex(i)
}, new RegExp("[^0-9a-f]", "gi"), rt.prototype.sign = function(t, e) {
var r, i = (r = t, ht.crypto.Util.hashString(r, e));
return this.signWithMessageHash(i, e)
}, rt.prototype.signWithMessageHash = function(t, e) {
var r = tt(ht.crypto.Util.getPaddedDigestInfoHex(t, e, this.n.bitLength()), 16);
return Wt(this.doPrivate(r).toString(16), this.n.bitLength())
}, rt.prototype.signPSS = function(t, e, r) {
var i, n = (i = bt(t), ht.crypto.Util.hashHex(i, e));
return void 0 === r && (r = -1), this.signWithMessageHashPSS(n, e, r)
}, rt.prototype.signWithMessageHashPSS = function(t, e, r) {
var i, n = wt(t),
s = n.length,
a = this.n.bitLength() - 1,
o = Math.ceil(a / 8),
h = function(t) {
return ht.crypto.Util.hashHex(t, e)
};
if (-1 === r || void 0 === r) r = s;
else if (-2 === r) r = o - s - 2;
else if (r < -2) throw new Error("invalid salt length");
if (o < s + r + 2) throw new Error("data too long");
var u = "";
r > 0 && (u = new Array(r), (new Q).nextBytes(u), u = String.fromCharCode.apply(String, u));
var c = wt(h(bt("\0\0\0\0\0\0\0\0" + n + u))),
l = [];
for (i = 0; i < o - r - s - 2; i += 1) l[i] = 0;
var f = String.fromCharCode.apply(String, l) + "\x01" + u,
g = Jt(c, f.length, h),
p = [];
for (i = 0; i < f.length; i += 1) p[i] = f.charCodeAt(i) ^ g.charCodeAt(i);
var d = 65280 >> 8 * o - a & 255;
for (p[0] &= ~d, i = 0; i < s; i++) p.push(c.charCodeAt(i));
return p.push(188), Wt(this.doPrivate(new E(p)).toString(16), this.n.bitLength())
}, rt.prototype.verify = function(t, e) {
if (null == (e = e.toLowerCase()).match(/^[0-9a-f]+$/)) return !1;
var r = tt(e, 16),
i = this.n.bitLength();
if (r.bitLength() > i) return !1;
var n = this.doPublic(r).toString(16);
if (n.length + 3 != i / 4) return !1;
var s = Xt(n.replace(/^1f+00/, ""));
if (0 == s.length) return !1;
var a, o = s[0];
return s[1] == (a = t, ht.crypto.Util.hashString(a, o))
}, rt.prototype.verifyWithMessageHash = function(t, e) {
if (e.length != Math.ceil(this.n.bitLength() / 4)) return !1;
var r = tt(e, 16);
if (r.bitLength() > this.n.bitLength()) return 0;
var i = Xt(this.doPublic(r).toString(16).replace(/^1f+00/, ""));
return 0 != i.length && (i[0], i[1] == t)
}, rt.prototype.verifyPSS = function(t, e, r, i) {
var n, s = (n = bt(t), ht.crypto.Util.hashHex(n, r));
return void 0 === i && (i = -1), this.verifyWithMessageHashPSS(s, e, r, i)
}, rt.prototype.verifyWithMessageHashPSS = function(t, e, r, i) {
if (e.length != Math.ceil(this.n.bitLength() / 4)) return !1;
var n, s = new E(e, 16),
a = function(t) {
return ht.crypto.Util.hashHex(t, r)
},
o = wt(t),
h = o.length,
u = this.n.bitLength() - 1,
c = Math.ceil(u / 8);
if (-1 === i || void 0 === i) i = h;
else if (-2 === i) i = c - h - 2;
else if (i < -2) throw new Error("invalid salt length");
if (c < h + i + 2) throw new Error("data too long");
var l = this.doPublic(s).toByteArray();
for (n = 0; n < l.length; n += 1) l[n] &= 255;
for (; l.length < c;) l.unshift(0);
if (188 !== l[c - 1]) throw new Error("encoded message does not end in 0xbc");
var f = (l = String.fromCharCode.apply(String, l)).substr(0, c - h - 1),
g = l.substr(f.length, h),
p = 65280 >> 8 * c - u & 255;
if (0 != (f.charCodeAt(0) & p)) throw new Error("bits beyond keysize not zero");
var d = Jt(g, f.length, a),
v = [];
for (n = 0; n < f.length; n += 1) v[n] = f.charCodeAt(n) ^ d.charCodeAt(n);
v[0] &= ~p;
var y = c - h - i - 2;
for (n = 0; n < y; n += 1)
if (0 !== v[n]) throw new Error("leftmost octets not zero");
if (1 !== v[y]) throw new Error("0x01 marker not found");
return g === wt(a(bt("\0\0\0\0\0\0\0\0" + o + String.fromCharCode.apply(String, v.slice(-i)))))
}, rt.SALT_LEN_HLEN = -1, rt.SALT_LEN_MAX = -2, rt.SALT_LEN_RECOVER = -2, $t.hex2dn = function(t, e) {
void 0 === e && (e = 0);
var r = new $t;
return lt.getTLV(t, e), r.getX500Name(t).str
}, $t.hex2rdn = function(t, e) {
if (void 0 === e && (e = 0), "31" !== t.substr(e, 2)) throw new Error("malformed RDN");
for (var r = new Array, i = lt.getChildIdx(t, e), n = 0; n < i.length; n++) r.push($t.hex2attrTypeValue(t, i[n]));
return (r = r.map((function(t) {
return t.replace("+", "\\+")
}))).join("+")
}, $t.hex2attrTypeValue = function(t, e) {
var r = lt,
i = r.getV;
if (void 0 === e && (e = 0), "30" !== t.substr(e, 2)) throw new Error("malformed attribute type and value");
var n = r.getChildIdx(t, e);
2 !== n.length || t.substr(n[0], 2);
var s = i(t, n[0]),
a = ht.asn1.ASN1Util.oidHexToInt(s);
return ht.asn1.x509.OID.oid2atype(a) + "=" + wt(i(t, n[1]))
}, $t.getPublicKeyFromCertHex = function(t) {
var e = new $t;
return e.readCertHex(t), e.getPublicKey()
}, $t.getPublicKeyFromCertPEM = function(t) {
var e = new $t;
return e.readCertPEM(t), e.getPublicKey()
}, $t.getPublicKeyInfoPropOfCertPEM = function(t) {
var e, r, i = lt.getVbyList,
n = {
algparam: null
};
return (e = new $t).readCertPEM(t), r = e.getPublicKeyHex(), n.keyhex = i(r, 0, [1], "03").substr(2), n.algoid = i(r, 0, [0, 0], "06"), "2a8648ce3d0201" === n.algoid && (n.algparam = i(r, 0, [0, 1], "06")), n
}, $t.KEYUSAGE_NAME = ["digitalSignature", "nonRepudiation", "keyEncipherment", "dataEncipherment", "keyAgreement", "keyCertSign", "cRLSign", "encipherOnly", "decipherOnly"], void 0 !== ht && ht || (ht = {}), void 0 !== ht.jws && ht.jws || (ht.jws = {}), ht.jws.JWS = function() {
var t = ht.jws.JWS.isSafeJSONString;
this.parseJWS = function(e, r) {
if (void 0 === this.parsedJWS || !r && void 0 === this.parsedJWS.sigvalH) {
var i = e.match(/^([^.]+)\.([^.]+)\.([^.]+)$/);
if (null == i) throw "JWS signature is not a form of 'Head.Payload.SigValue'.";
var n = i[1],
s = i[2],
a = i[3],
o = n + "." + s;
if (this.parsedJWS = {}, this.parsedJWS.headB64U = n, this.parsedJWS.payloadB64U = s, this.parsedJWS.sigvalB64U = a, this.parsedJWS.si = o, !r) {
var h = St(a),
u = tt(h, 16);
this.parsedJWS.sigvalH = h, this.parsedJWS.sigvalBI = u
}
var c = ct(n),
l = ct(s);
if (this.parsedJWS.headS = c, this.parsedJWS.payloadS = l, !t(c, this.parsedJWS, "headP")) throw "malformed JSON string for JWS Head: " + c
}
}
}, ht.jws.JWS.sign = function(t, e, r, i, n) {
var s, a, o, h = ht,
u = h.jws.JWS,
c = u.readSafeJSONString,
l = u.isSafeJSONString,
f = h.crypto,
g = (f.ECDSA, f.Mac),
p = f.Signature,
d = JSON;
if ("string" != typeof e && "object" != typeof e) throw "spHeader must be JSON string or object: " + e;
if ("object" == typeof e && (a = e, s = d.stringify(a)), "string" == typeof e) {
if (!l(s = e)) throw "JWS Head is not safe JSON string: " + s;
a = c(s)
}
if (o = r, "object" == typeof r && (o = d.stringify(r)), "" != t && null != t || void 0 === a.alg || (t = a.alg), "" != t && null != t && void 0 === a.alg && (a.alg = t, s = d.stringify(a)), t !== a.alg) throw "alg and sHeader.alg doesn't match: " + t + "!=" + a.alg;
var v = null;
if (void 0 === u.jwsalg2sigalg[t]) throw "unsupported alg name: " + t;
v = u.jwsalg2sigalg[t];
var y = ut(s) + "." + ut(o),
m = "";
if ("Hmac" == v.substr(0, 4)) {
if (void 0 === i) throw "mac key shall be specified for HS* alg";
var S = new g({
alg: v,
prov: "cryptojs",
pass: i
});
S.updateString(y), m = S.doFinal()
} else if (-1 != v.indexOf("withECDSA")) {
(E = new p({
alg: v
})).init(i, n), E.updateString(y);
var x = E.sign();
m = ht.crypto.ECDSA.asn1SigToConcatSig(x)
} else {
var E;
"none" != v && ((E = new p({
alg: v
})).init(i, n), E.updateString(y), m = E.sign())
}
return y + "." + mt(m)
}, ht.jws.JWS.verify = function(t, e, r) {
var i, n = ht,
s = n.jws.JWS,
a = s.readSafeJSONString,
o = n.crypto,
h = o.ECDSA,
u = o.Mac,
c = o.Signature;
i = rt;
var l = t.split(".");
if (3 !== l.length) return !1;
var f, g = l[0] + "." + l[1],
p = St(l[2]),
d = a(ct(l[0])),
v = null;
if (void 0 === d.alg) throw "algorithm not specified in header";
if (f = (v = d.alg).substr(0, 2), null != r && "[object Array]" === Object.prototype.toString.call(r) && r.length > 0 && -1 == (":" + r.join(":") + ":").indexOf(":" + v + ":")) throw "algorithm '" + v + "' not accepted in the list";
if ("none" != v && null === e) throw "key shall be specified to verify.";
if ("string" == typeof e && -1 != e.indexOf("-----BEGIN ") && (e = Gt.getKey(e)), !("RS" != f && "PS" != f || e instanceof i)) throw "key shall be a RSAKey obj for RS* and PS* algs";
if ("ES" == f && !(e instanceof h)) throw "key shall be a ECDSA obj for ES* algs";
var y = null;
if (void 0 === s.jwsalg2sigalg[d.alg]) throw "unsupported alg name: " + v;
if ("none" == (y = s.jwsalg2sigalg[v])) throw "not supported";
if ("Hmac" == y.substr(0, 4)) {
if (void 0 === e) throw "hexadecimal key shall be specified for HMAC";
var m = new u({
alg: y,
pass: e
});
return m.updateString(g), p == m.doFinal()
}
if (-1 != y.indexOf("withECDSA")) {
var S, x = null;
try {
x = h.concatSigToASN1Sig(p)
} catch (E) {
return !1
}
return (S = new c({
alg: y
})).init(e), S.updateString(g), S.verify(x)
}
return (S = new c({
alg: y
})).init(e), S.updateString(g), S.verify(p)
}, ht.jws.JWS.parse = function(t) {
var e, r, i, n = t.split("."),
s = {};
if (2 != n.length && 3 != n.length) throw "malformed sJWS: wrong number of '.' splitted elements";
return e = n[0], r = n[1], 3 == n.length && (i = n[2]), s.headerObj = ht.jws.JWS.readSafeJSONString(ct(e)), s.payloadObj = ht.jws.JWS.readSafeJSONString(ct(r)), s.headerPP = JSON.stringify(s.headerObj, null, " "), null == s.payloadObj ? s.payloadPP = ct(r) : s.payloadPP = JSON.stringify(s.payloadObj, null, " "), void 0 !== i && (s.sigHex = St(i)), s
}, ht.jws.JWS.verifyJWT = function(t, e, r) {
var i = ht.jws,
n = i.JWS,
s = n.readSafeJSONString,
a = n.inArray,
o = n.includedArray,
h = t.split("."),
u = h[0],
c = h[1],
l = (St(h[2]), s(ct(u))),
f = s(ct(c));
if (void 0 === l.alg) return !1;
if (void 0 === r.alg) throw "acceptField.alg shall be specified";
if (!a(l.alg, r.alg)) return !1;
if (void 0 !== f.iss && "object" == typeof r.iss && !a(f.iss, r.iss)) return !1;
if (void 0 !== f.sub && "object" == typeof r.sub && !a(f.sub, r.sub)) return !1;
if (void 0 !== f.aud && "object" == typeof r.aud)
if ("string" == typeof f.aud) {
if (!a(f.aud, r.aud)) return !1
} else if ("object" == typeof f.aud && !o(f.aud, r.aud)) return !1;
var g = i.IntDate.getNow();
return void 0 !== r.verifyAt && "number" == typeof r.verifyAt && (g = r.verifyAt), void 0 !== r.gracePeriod && "number" == typeof r.gracePeriod || (r.gracePeriod = 0), !(void 0 !== f.exp && "number" == typeof f.exp && f.exp + r.gracePeriod < g || void 0 !== f.nbf && "number" == typeof f.nbf && g < f.nbf - r.gracePeriod || void 0 !== f.iat && "number" == typeof f.iat && g < f.iat - r.gracePeriod || void 0 !== f.jti && void 0 !== r.jti && f.jti !== r.jti || !n.verify(t, e, r.alg))
}, ht.jws.JWS.includedArray = function(t, e) {
var r = ht.jws.JWS.inArray;
if (null === t) return !1;
if ("object" != typeof t) return !1;
if ("number" != typeof t.length) return !1;
for (var i = 0; i < t.length; i++)
if (!r(t[i], e)) return !1;
return !0
}, ht.jws.JWS.inArray = function(t, e) {
if (null === e) return !1;
if ("object" != typeof e) return !1;
if ("number" != typeof e.length) return !1;
for (var r = 0; r < e.length; r++)
if (e[r] == t) return !0;
return !1
}, ht.jws.JWS.jwsalg2sigalg = {
HS256: "HmacSHA256",
HS384: "HmacSHA384",
HS512: "HmacSHA512",
RS256: "SHA256withRSA",
RS384: "SHA384withRSA",
RS512: "SHA512withRSA",
ES256: "SHA256withECDSA",
ES384: "SHA384withECDSA",
ES512: "SHA512withECDSA",
PS256: "SHA256withRSAandMGF1",
PS384: "SHA384withRSAandMGF1",
PS512: "SHA512withRSAandMGF1",
none: "none"
}, ht.jws.JWS.isSafeJSONString = function(t, e, i) {
var n = null;
try {
return "object" != typeof(n = ot(t)) || n.constructor === Array ? 0 : (e && (e[i] = n), 1)
} catch (r) {
return 0
}
}, ht.jws.JWS.readSafeJSONString = function(t) {
var e = null;
try {
return "object" != typeof(e = ot(t)) || e.constructor === Array ? null : e
} catch (r) {
return null
}
}, ht.jws.JWS.getEncodedSignatureValueFromJWS = function(t) {
var e = t.match(/^[^.]+\.[^.]+\.([^.]+)$/);
if (null == e) throw "JWS signature is not a form of 'Head.Payload.SigValue'.";
return e[1]
}, ht.jws.JWS.getJWKthumbprint = function(t) {
if ("RSA" !== t.kty && "EC" !== t.kty && "oct" !== t.kty) throw "unsupported algorithm for JWK Thumprint";
var e = "{";
if ("RSA" === t.kty) {
if ("string" != typeof t.n || "string" != typeof t.e) throw "wrong n and e value for RSA key";
e += '"e":"' + t.e + '",', e += '"kty":"' + t.kty + '",', e += '"n":"' + t.n + '"}'
} else if ("EC" === t.kty) {
if ("string" != typeof t.crv || "string" != typeof t.x || "string" != typeof t.y) throw "wrong crv, x and y value for EC key";
e += '"crv":"' + t.crv + '",', e += '"kty":"' + t.kty + '",', e += '"x":"' + t.x + '",', e += '"y":"' + t.y + '"}'
} else if ("oct" === t.kty) {
if ("string" != typeof t.k) throw "wrong k value for oct(symmetric) key";
e += '"kty":"' + t.kty + '",', e += '"k":"' + t.k + '"}'
}
var r = bt(e);
return mt(ht.crypto.Util.hashHex(r, "sha256"))
}, ht.jws.IntDate = {}, ht.jws.IntDate.get = function(t) {
var e = ht.jws.IntDate,
r = e.getNow,
i = e.getZulu;
if ("now" == t) return r();
if ("now + 1hour" == t) return r() + 3600;
if ("now + 1day" == t) return r() + 86400;
if ("now + 1month" == t) return r() + 2592e3;
if ("now + 1year" == t) return r() + 31536e3;
if (t.match(/Z$/)) return i(t);
if (t.match(/^[0-9]+$/)) return parseInt(t);
throw "unsupported format: " + t
}, ht.jws.IntDate.getZulu = function(t) {
return Rt(t)
}, ht.jws.IntDate.getNow = function() {
return ~~(new Date / 1e3)
}, ht.jws.IntDate.intDate2UTCString = function(t) {
return new Date(1e3 * t).toUTCString()
}, ht.jws.IntDate.intDate2Zulu = function(t) {
var e = new Date(1e3 * t);
return ("0000" + e.getUTCFullYear()).slice(-4) + ("00" + (e.getUTCMonth() + 1)).slice(-2) + ("00" + e.getUTCDate()).slice(-2) + ("00" + e.getUTCHours()).slice(-2) + ("00" + e.getUTCMinutes()).slice(-2) + ("00" + e.getUTCSeconds()).slice(-2) + "Z"
}, void 0 !== ht && ht || (ht = {}), void 0 !== ht.jws && ht.jws || (ht.jws = {}), ht.jws.JWSJS = function() {
var t = ht.jws.JWS,
r = t.readSafeJSONString;
this.aHeader = [], this.sPayload = "", this.aSignature = [], this.init = function() {
this.aHeader = [], this.sPayload = void 0, this.aSignature = []
}, this.initWithJWS = function(t) {
this.init();
var e = t.split(".");
if (3 != e.length) throw "malformed input JWS";
this.aHeader.push(e[0]), this.sPayload = e[1], this.aSignature.push(e[2])
}, this.addSignature = function(t, e, r, i) {
if (void 0 === this.sPayload || null === this.sPayload) throw "there's no JSON-JS signature to add.";
var n = this.aHeader.length;
if (this.aHeader.length != this.aSignature.length) throw "aHeader.length != aSignature.length";
try {
var s = ht.jws.JWS.sign(t, e, this.sPayload, r, i).split(".");
s[0], s[2], this.aHeader.push(s[0]), this.aSignature.push(s[2])
} catch (c) {
throw this.aHeader.length > n && this.aHeader.pop(), this.aSignature.length > n && this.aSignature.pop(), "addSignature failed: " + c
}
}, this.verifyAll = function(t) {
if (this.aHeader.length !== t.length || this.aSignature.length !== t.length) return !1;
for (var e = 0; e < t.length; e++) {
var r = t[e];
if (2 !== r.length) return !1;
if (!1 === this.verifyNth(e, r[0], r[1])) return !1
}
return !0
}, this.verifyNth = function(e, r, i) {
if (this.aHeader.length <= e || this.aSignature.length <= e) return !1;
var n = this.aHeader[e],
s = this.aSignature[e],
a = n + "." + this.sPayload + "." + s,
o = !1;
try {
o = t.verify(a, r, i)
} catch (c) {
return !1
}
return o
}, this.readJWSJS = function(t) {
if ("string" == typeof t) {
var i = r(t);
if (null == i) throw "argument is not safe JSON object string";
this.aHeader = i.headers, this.sPayload = i.payload, this.aSignature = i.signatures
} else try {
if (!(t.headers.length > 0)) throw "malformed header";
if (this.aHeader = t.headers, "string" != typeof t.payload) throw "malformed signatures";
if (this.sPayload = t.payload, !(t.signatures.length > 0)) throw "malformed signatures";
this.aSignature = t.signatures
} catch (e) {
throw "malformed JWS-JS JSON object: " + e
}
}, this.getJSON = function() {
return {
headers: this.aHeader,
payload: this.sPayload,
signatures: this.aSignature
}
}, this.isEmpty = function() {
return 0 == this.aHeader.length ? 1 : 0
}
}, g.SecureRandom = Q, g.rng_seed_time = W, g.BigInteger = E, g.RSAKey = rt, g.ECDSA = ht.crypto.ECDSA, g.DSA = ht.crypto.DSA, g.Signature = ht.crypto.Signature, g.MessageDigest = ht.crypto.MessageDigest, g.Mac = ht.crypto.Mac, g.Cipher = ht.crypto.Cipher, g.KEYUTIL = Gt, g.ASN1HEX = lt, g.X509 = $t, g.X509CRL = function(t) {
var e = ht.lang.String.isHex,
r = lt,
i = r.getV,
n = r.getTLV,
s = r.getVbyList,
a = r.getTLVbyList,
o = r.getTLVbyListEx,
h = r.getIdxbyList,
u = r.getIdxbyListEx,
c = r.getChildIdx,
l = new $t;
this.hex = null, this.posSigAlg = null, this.posRevCert = null, this._setPos = function() {
var t = h(this.hex, 0, [0, 0]),
e = this.hex.substr(t, 2);
if ("02" == e) this.posSigAlg = 1;
else {
if ("30" != e) throw new Error("malformed 1st item of TBSCertList: " + e);
this.posSigAlg = 0
}
var r, i = h(this.hex, 0, [0, this.posSigAlg + 3]),
n = this.hex.substr(i, 2);
if ("17" == n || "18" == n) r = h(this.hex, 0, [0, this.posSigAlg + 4]), this.posRevCert = null, -1 != r && "30" == this.hex.substr(r, 2) && (this.posRevCert = this.posSigAlg + 4);
else if ("30" == n) this.posRevCert = this.posSigAlg + 3;
else {
if ("a0" != n) throw new Error("malformed nextUpdate or revCert tag: " + n);
this.posRevCert = null
}
}, this.getVersion = function() {
return 0 == this.posSigAlg ? null : parseInt(s(this.hex, 0, [0, 0], "02"), 16) + 1
}, this.getSignatureAlgorithmField = function() {
var t = a(this.hex, 0, [0, this.posSigAlg], "30");
return l.getAlgorithmIdentifierName(t)
}, this.getIssuer = function() {
var t = a(this.hex, 0, [0, this.posSigAlg + 1], "30");
return l.getX500Name(t)
}, this.getThisUpdate = function() {
var t = s(this.hex, 0, [0, this.posSigAlg + 2]);
return result = wt(t)
}, this.getNextUpdate = function() {
var t = h(this.hex, 0, [0, this.posSigAlg + 3]),
e = this.hex.substr(t, 2);
return "17" != e && "18" != e ? null : wt(i(this.hex, t))
}, this.getRevCertArray = function() {
if (null == this.posRevCert) return null;
for (var t = [], e = h(this.hex, 0, [0, this.posRevCert]), r = c(this.hex, e), i = 0; i < r.length; i++) {
var s = n(this.hex, r[i]);
t.push(this.getRevCert(s))
}
return t
}, this.getRevCert = function(t) {
var e = {},
r = c(t, 0);
return e.sn = {
hex: s(t, 0, [0], "02")
}, e.date = wt(s(t, 0, [1])), 3 == r.length && (e.ext = l.getExtParamArray(a(t, 0, [2]))), e
}, this.getSignatureValueHex = function() {
return s(this.hex, 0, [2], "03", !0)
}, this.verifySignature = function(t) {
var e = this.getSignatureAlgorithmField(),
r = this.getSignatureValueHex(),
i = a(this.hex, 0, [0], "30"),
n = new ht.crypto.Signature({
alg: e
});
return n.init(t), n.updateHex(i), n.verify(r)
}, this.getParam = function() {
var t = {},
e = this.getVersion();
null != e && (t.version = e), t.sigalg = this.getSignatureAlgorithmField(), t.issuer = this.getIssuer(), t.thisupdate = this.getThisUpdate();
var r = this.getNextUpdate();
null != r && (t.nextupdate = r);
var i = this.getRevCertArray();
if (null != i && (t.revcert = i), -1 != u(this.hex, 0, [0, "[0]"])) {
var n = o(this.hex, 0, [0, "[0]", 0]);
t.ext = l.getExtParamArray(n)
}
return t.sighex = this.getSignatureValueHex(), t
}, "string" == typeof t && (e(t) ? this.hex = t : t.match(/-----BEGIN X509 CRL/) && (this.hex = Ct(t)), this._setPos())
}, g.CryptoJS = d, g.b64tohex = S, g.b64toBA = x, g.ECFieldElementFp = nt, g.ECPointFp = st, g.ECCurveFp = at, g.stoBA = ft, g.BAtos = gt, g.BAtohex = pt, g.stohex = dt, g.stob64 = function(t) {
return m(dt(t))
}, g.stob64u = function(t) {
return vt(m(dt(t)))
}, g.b64utos = function(t) {
return gt(x(yt(t)))
}, g.b64tob64u = vt, g.b64utob64 = yt, g.hex2b64 = m, g.hextob64u = mt, g.b64utohex = St, g.utf8tob64u = ut, g.b64utoutf8 = ct, g.utf8tob64 = function(t) {
return m(Tt(Vt(t)))
}, g.b64toutf8 = function(t) {
return decodeURIComponent(Bt(S(t)))
}, g.utf8tohex = xt, g.hextoutf8 = Et, g.hextorstr = wt, g.rstrtohex = bt, g.hextob64 = Ft, g.hextob64nl = At, g.b64nltohex = Dt, g.hextopem = It, g.pemtohex = Ct, g.hextoArrayBuffer = function(t) {
if (t.length % 2 != 0) throw "input is not even length";
if (null == t.match(/^[0-9A-Fa-f]+$/)) throw "input is not hexadecimal";
for (var e = new ArrayBuffer(t.length / 2), r = new DataView(e), i = 0; i < t.length / 2; i++) r.setUint8(i, parseInt(t.substr(2 * i, 2), 16));
return e
}, g.ArrayBuffertohex = function(t) {
for (var e = "", r = new DataView(t), i = 0; i < t.byteLength; i++) e += ("00" + r.getUint8(i).toString(16)).slice(-2);
return e
}, g.zulutomsec = Pt, g.zulutosec = Rt, g.zulutodate = function(t) {
return new Date(Pt(t))
}, g.datetozulu = function(t, e, r) {
var i, n = t.getUTCFullYear();
if (e) {
if (n < 1950 || 2049 < n) throw "not proper year for UTCTime: " + n;
i = ("" + n).slice(-2)
} else i = ("000" + n).slice(-4);
if (i += ("0" + (t.getUTCMonth() + 1)).slice(-2), i += ("0" + t.getUTCDate()).slice(-2), i += ("0" + t.getUTCHours()).slice(-2), i += ("0" + t.getUTCMinutes()).slice(-2), i += ("0" + t.getUTCSeconds()).slice(-2), r) {
var s = t.getUTCMilliseconds();
0 !== s && (i += "." + (s = (s = ("00" + s).slice(-3)).replace(/0+$/g, "")))
}
return i + "Z"
}, g.uricmptohex = Tt, g.hextouricmp = Bt, g.ipv6tohex = Ht, g.hextoipv6 = Nt, g.hextoip = Ot, g.iptohex = function(t) {
var e = "malformed IP address";
if (!(t = t.toLowerCase(t)).match(/^[0-9.]+$/)) {
if (t.match(/^[0-9a-f:]+$/) && -1 !== t.indexOf(":")) return Ht(t);
throw e
}
var r = t.split(".");
if (4 !== r.length) throw e;
var i = "";
try {
for (var n = 0; n < 4; n++) i += ("0" + parseInt(r[n]).toString(16)).slice(-2);
return i
} catch (u) {
throw e
}
}, g.ucs2hextoutf8 = jt, g.encodeURIComponentAll = Vt, g.newline_toUnix = function(t) {
return t.replace(/\r\n/gm, "\n")
}, g.newline_toDos = function(t) {
return (t = t.replace(/\r\n/gm, "\n")).replace(/\n/gm, "\r\n")
}, g.hextoposhex = Kt, g.intarystrtohex = kt, g.strdiffidx = function(t, e) {
var r = t.length;
t.length > e.length && (r = e.length);
for (var i = 0; i < r; i++)
if (t.charCodeAt(i) != e.charCodeAt(i)) return i;
return t.length != e.length ? r : -1
}, g.oidtohex = Mt, g.hextooid = _t, g.strpad = qt, g.bitstrtoint = Ut, g.inttobitstr = function(t) {
var e = Number(t).toString(2),
r = 8 - e.length % 8;
8 == r && (r = 0), e += qt("", r, "0");
var i = parseInt(e, 2).toString(16);
return i.length % 2 == 1 && (i = "0" + i), "0" + r + i
}, g.KJUR = ht, g.crypto = ht.crypto, g.asn1 = ht.asn1, g.jws = ht.jws, g.lang = ht.lang
}).call(this)
}).call(this, r({}).Buffer);
var p = {
nanoid: (t = 21) => {
let e = "",
r = t;
for (; r--;) e += "useandom-26T198340PX75pxJACKVERYMINDBUSHWOLF_GQZbfghjklqvwyzrict" [64 * Math.random() | 0];
return e
}
};
function d(t, e, r) {
if (!r.includes(typeof t) || null === t) throw new Error(`Field ${e} should be of type ${r}`)
}
var v = {
valString: function(t, e) {
d(t, e, ["string"])
},
valObject: function(t, e) {
d(t, e, ["object"])
},
valNumber: function(t, e) {
d(t, e, ["number"])
},
valStringOrObject: function(t, e) {
d(t, e, ["string", "object"])
}
};
const {
nanoid: y
} = p, {
valStringOrObject: m,
valString: S,
valObject: x,
valNumber: E
} = v;
function w(t, e, r, i, n, s) {
x(e, "payload"), x(r, "header"), E(i, "exp");
var a = Math.ceil((new Date).getTime() / 1e3),
o = a + i;
const h = Object.assign({
typ: "JWT"
}, r, {
alg: n,
kid: s
}),
u = Object.assign({
iat: a - 5,
nbf: a - 5,
exp: o,
jti: y()
}, e),
c = JSON.stringify(h),
l = JSON.stringify(u);
return g.jws.JWS.sign(n, c, l, t)
}
function b(t = "", e = {}, r = {}, i = 600, n = "RS256") {
try {
return m(t, "jwk"), w(g.KEYUTIL.getKey(t), e, r, i, n, t.kid)
} catch (s) {
const t = "string" == typeof s ? s : s.message;
throw new Error("[jwtSign] " + t)
}
}
return {
pkceChallenge: function() {
const t = g.crypto.Util.getRandomHexOfNbytes(32),
e = g.hextob64u(t),
r = g.crypto.Util.hashString(e, "sha256");
return {
code_verifier: e,
code_challenge: g.hextob64u(r),
code_challenge_method: "S256"
}
},
createJws: w,
jwtSign: b,
jwtVerify: function(t, e, r = "RS256") {
try {
S(t, "jwt"), m(e, "pubKey");
const i = g.KEYUTIL.getKey(e);
if (!g.jws.JWS.verifyJWT(t, i, {
alg: [r],
gracePeriod: 5
})) throw new Error("Invalid JWT");
const n = g.jws.JWS.parse(t);
return {
header: n.headerObj,
payload: n.payloadObj
}
} catch (i) {
const t = "string" == typeof i ? i : i.message;
throw new Error("[jwtVerify] " + t)
}
},
sha256: function(t) {
return g.crypto.Util.hashString(t, "sha256")
},
clientAssertPrivateKey: function(t, e, r, i = 600, n = "RS256") {
return b(t, {
sub: e,
iss: e,
aud: r
}, {}, i, n)
},
clientAssertSecret: function(t, e, r, i = 600, n = "HS256") {
try {
return S(t, "secret"), w(t, {
sub: e,
iss: e,
aud: r
}, {}, i, n)
} catch (s) {
throw new Error("[clientAssertSecret] " + s.message)
}
},
rs: g,
nanoid: y
}
}));