From 42a10935660b9f000c7f794036315ef166c3f001 Mon Sep 17 00:00:00 2001 From: Aron Kim Date: Mon, 31 May 2021 17:01:10 +0900 Subject: [PATCH 01/16] [Addon] send api support. Add electron api, which is not supported in wrtjs, and support to be used as addon api Relate patch: https://review.tizen.org/gerrit/#/c/platform/framework/web/chromium-efl/+/259017/ Change-Id: I49d001eb4492c3c9a5412fb192b4ffd414a4c564 Signed-off-by: Aron Kim --- wrt_app/addon/browser/modules/messaging.ts | 7 ++++++- 1 file changed, 6 insertions(+), 1 deletion(-) diff --git a/wrt_app/addon/browser/modules/messaging.ts b/wrt_app/addon/browser/modules/messaging.ts index 779480c..eeccb5f 100644 --- a/wrt_app/addon/browser/modules/messaging.ts +++ b/wrt_app/addon/browser/modules/messaging.ts @@ -1,7 +1,12 @@ 'use strict'; -import { ipcMain } from 'electron'; +import { ipcMain, BrowserWindow } from 'electron'; export const on = function (channel: string, listener: (event: Electron.IpcMainEvent, ...args: any[]) => void) { ipcMain.on(channel, listener); }; + +export const send = function (winId: number, channel: string, ...args: any[]) { + let window = BrowserWindow.fromId(winId); + window.webContents.send(channel, ...args); +}; -- 2.7.4 From f0f698d6234eded0ee2d08e5da65db38b7786b1f Mon Sep 17 00:00:00 2001 From: Aron Kim Date: Tue, 8 Jun 2021 13:21:54 +0900 Subject: [PATCH 02/16] [Addon] nodeIntegrationInSubFrames support. Add electron api, which is not supported in wrtjs Relate patch: https://review.tizen.org/gerrit/#/c/platform/framework/web/chromium-efl/+/259438/ Change-Id: I4b386bdce9070ebcd368d585e1ed30b3197cc1c3 Signed-off-by: Aron Kim --- wrt_app/src/web_application.ts | 1 + 1 file changed, 1 insertion(+) diff --git a/wrt_app/src/web_application.ts b/wrt_app/src/web_application.ts index 6187903..5b00547 100644 --- a/wrt_app/src/web_application.ts +++ b/wrt_app/src/web_application.ts @@ -170,6 +170,7 @@ export class WebApplication { show: false, webPreferences: { nodeIntegration: options.isAddonAvailable, + nodeIntegrationInSubFrames: options.isAddonAvailable, nodeIntegrationInWorker: false, nativeWindowOpen: true, }, -- 2.7.4 From 51e2c75408b629f7ada7be777f26a731890c5e69 Mon Sep 17 00:00:00 2001 From: "yman.son" Date: Tue, 15 Jun 2021 19:01:20 +0900 Subject: [PATCH 03/16] [VD]Add the deactivation method to all wrt.loader on TV Disable wrt-loader in low memory state. performance analysis team's requests.(ckid.chae) Change-Id: I34bcb9938cd8672d0bdcf159f9cae10abeec6c4b Signed-off-by: yman.son --- packaging/wrt_tv.loader | 11 ++++++----- packaging/wrt_tv_lite.loader | 7 ------- packaging/wrtjs.spec | 7 +------ 3 files changed, 7 insertions(+), 18 deletions(-) delete mode 100755 packaging/wrt_tv_lite.loader diff --git a/packaging/wrt_tv.loader b/packaging/wrt_tv.loader index 16b2fb7..5e63d15 100755 --- a/packaging/wrt_tv.loader +++ b/packaging/wrt_tv.loader @@ -1,6 +1,7 @@ [LOADER] -NAME wrt-loader -EXE /usr/bin/wrt-loader -APP_TYPE webapp -DETECTION_METHOD TIMEOUT|DEMAND -TIMEOUT 10000 +NAME wrt-loader +EXE /usr/bin/wrt-loader +APP_TYPE webapp +DEACTIVATION_METHOD OUT_OF_MEMORY +DETECTION_METHOD TIMEOUT|DEMAND +TIMEOUT 10000 diff --git a/packaging/wrt_tv_lite.loader b/packaging/wrt_tv_lite.loader deleted file mode 100755 index 977b9ee..0000000 --- a/packaging/wrt_tv_lite.loader +++ /dev/null @@ -1,7 +0,0 @@ -[LOADER] -NAME wrt-loader -EXE /usr/bin/wrt-loader -APP_TYPE webapp -DEACTIVATION_METHOD OUT_OF_MEMORY -DETECTION_METHOD TIMEOUT|DEMAND -TIMEOUT 10000 diff --git a/packaging/wrtjs.spec b/packaging/wrtjs.spec index bafe1b0..eb3a422 100755 --- a/packaging/wrtjs.spec +++ b/packaging/wrtjs.spec @@ -153,12 +153,7 @@ echo %{version} > %{buildroot}%{_datadir}/wrtjs/version %if "%{?profile}" == "tv" ln -s %{_bindir}/wrt %{buildroot}%{_bindir}/wrt-loader %if "%{_vd_cfg_product_type}" != "LFD" - %if "%{_vd_cfg_platform_type}" == "FULL_SMART" - install -m 0644 packaging/wrt_tv.loader %{buildroot}%{_datadir}/aul/wrt.loader - %endif - %if "%{_vd_cfg_platform_type}" == "ENTRY_SMART" - install -m 0644 packaging/wrt_tv_lite.loader %{buildroot}%{_datadir}/aul/wrt.loader - %endif + install -m 0644 packaging/wrt_tv.loader %{buildroot}%{_datadir}/aul/wrt.loader %endif %else install -m 0755 %{_outdir}/wrt-loader %{buildroot}%{_bindir} -- 2.7.4 From 14f5b6ff510bb7979dbfc98be24f88dcd5206f3a Mon Sep 17 00:00:00 2001 From: "yman.son" Date: Fri, 11 Jun 2021 15:10:01 +0900 Subject: [PATCH 04/16] [VD] add Gaming hub feature In the gaming hub panel, there is a scenario where webapp plays sound after background launch. Also, it should be possible to switch to UI mode. At this time, must support multitasking unconditionally. Add three fetures to support this. 1. Transition of FG and BG through Appcontrol 2. disable multitasking feature according to special App Control. 3. window's hide is required for Appcontrol BG transition. (change WebEngine code) Change-Id: If6760ab87ece3966599cab5f393d043467b39187 Signed-off-by: yman.son --- wrt_app/common/web_application_delegate.ts | 6 +++-- wrt_app/src/tv/web_application_tv.ts | 35 ++++++++++++++++++++++++++---- wrt_app/src/web_application.ts | 2 ++ 3 files changed, 37 insertions(+), 6 deletions(-) diff --git a/wrt_app/common/web_application_delegate.ts b/wrt_app/common/web_application_delegate.ts index fcc4872..b31a4d9 100644 --- a/wrt_app/common/web_application_delegate.ts +++ b/wrt_app/common/web_application_delegate.ts @@ -23,13 +23,16 @@ export class WebApplicationDelegate { constructor(webApplication: WebApplication) { this.webApplication = webApplication; } - initialize(options: RuntimeOption) { } + backgroundExecutable() { return false; } beforeQuit() { } + canIgnoreSuspend() { return false; } clearCache() { } clearSuface(webContents: any) { } handleAppControlEvent(appControl: any) { return true; } handleProxyInfo(authInfo: any, callback: any) { return false; } + initialize(options: RuntimeOption) { } + isPreloading() { return false; } needInpectorGuide() { return false; } needReload(src: string) { let originalUrl = this.webApplication.mainWindow.webContents.getURL(); @@ -39,7 +42,6 @@ export class WebApplicationDelegate { return false; } needShowTimer() { return true; } - isPreloading() { return false; } onDidFinishLoad() { } profileName() { return 'common' } show() { } diff --git a/wrt_app/src/tv/web_application_tv.ts b/wrt_app/src/tv/web_application_tv.ts index d0a88a2..bbda5e2 100644 --- a/wrt_app/src/tv/web_application_tv.ts +++ b/wrt_app/src/tv/web_application_tv.ts @@ -26,6 +26,7 @@ export class WebApplicationDelegateTV extends WebApplicationDelegate { isAlwaysReload: boolean = false; preloadStatus: string = 'none'; runningStatus: string = 'none'; + launchMode: string = 'none'; tv: any = (wrt.tv as NativeWRTjs.TVExtension); constructor(webApplication: WebApplication) { @@ -33,6 +34,7 @@ export class WebApplicationDelegateTV extends WebApplicationDelegate { } initialize(options: RuntimeOption) { + this.launchMode = options.launchMode; if (options.launchMode == 'backgroundAtStartup') { console.log('backgroundAtStartup'); this.preloadStatus = 'preload'; @@ -97,6 +99,10 @@ Then you can get profile log from the initial loading.`; } private suspendByStatus() { + if (this.launchMode == 'runningAsBackground') { + console.log('WebApplication : runningAsBackground suspend is skipped!'); + return; + } if (this.preloadStatus === 'preload' || this.runningStatus === 'behind') { console.log('WebApplication : suspendByStatus'); @@ -123,8 +129,8 @@ Then you can get profile log from the initial loading.`; } isPreloading() { - if (this.preloadStatus == 'preload') { - console.log('preloading show is skipped!'); + if (this.preloadStatus == 'preload' || this.launchMode == 'runningAsBackground') { + console.log(`preloadStatus is ${this.preloadStatus} or ${this.launchMode}, show is skipped`); return true; } return false; @@ -134,6 +140,15 @@ Then you can get profile log from the initial loading.`; this.preloadStatus = 'none'; } + canIgnoreSuspend() { + if (this.launchMode == 'runningAsForeground' || + this.launchMode == 'runningAsBackground') { + console.log('WebApplication : view_suspend & multitasking feature is skipped!'); + return true; + } + return false; + } + beforeQuit() { this.inspectorSrc = ''; this.tv.cancelDialogs(this.webApplication.mainWindow.webContents); @@ -191,8 +206,20 @@ Then you can get profile log from the initial loading.`; } handleAppControlEvent(appControl: any) { - let launchMode = appControl.getData('http://samsung.com/appcontrol/data/launch_mode'); - this.handlePreloadState(launchMode); + this.launchMode = appControl.getData('http://samsung.com/appcontrol/data/launch_mode'); + this.handlePreloadState(this.launchMode); + + if (this.launchMode === 'runningAsBackground') { + this.webApplication.suspended = false; + this.webApplication.windowList.forEach((window) => window.setEnabled(true)); + this.webApplication.windowList[this.webApplication.windowList.length - 1].hide(); + this.webApplication.sendAppControlEvent(); + return false; + } else if (this.launchMode === 'runningAsForeground') { + this.webApplication.resume(); + this.webApplication.sendAppControlEvent(); + return false; + } let skipReload = appControl.getData('SkipReload'); if (skipReload == 'Yes') { diff --git a/wrt_app/src/web_application.ts b/wrt_app/src/web_application.ts index 6187903..84b6bca 100644 --- a/wrt_app/src/web_application.ts +++ b/wrt_app/src/web_application.ts @@ -286,6 +286,8 @@ export class WebApplication { this.suspended = true; this.windowList[this.windowList.length - 1].hide(); this.flushData(); + if (this.profileDelegate.canIgnoreSuspend()) + return; if (!this.backgroundRunnable()) { this.windowList.forEach((window) => window.setEnabled(false)); if (!this.multitaskingSupport) { -- 2.7.4 From 6636fc32479e2d0884f4d0a7e555340f8c256aad Mon Sep 17 00:00:00 2001 From: SangYong Park Date: Wed, 16 Jun 2021 17:26:12 +0900 Subject: [PATCH 05/16] [Migration] Fix finalize code 'quit' of app and 'closed' of BrowserWindow emit order is changed. so, fix code that has dependency to remained BrowserWindow. Related: https://review.tizen.org/gerrit/#/c/platform/framework/web/chromium-efl/+/260052/ Reference: https://review.tizen.org/gerrit/#/c/platform/framework/web/wrtjs/+/259881/ Change-Id: Ib988f230822c94becbf1d735f82fe85b22250f66 Signed-off-by: SangYong Park --- wrt_app/src/web_application.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/wrt_app/src/web_application.ts b/wrt_app/src/web_application.ts index 4b9ff56..53e0899 100644 --- a/wrt_app/src/web_application.ts +++ b/wrt_app/src/web_application.ts @@ -16,7 +16,7 @@ 'use strict'; -import { app } from 'electron'; +import { app, session } from 'electron'; import { wrt } from '../browser/wrt'; import * as WRTWebContents from '../browser/wrt_web_contents'; import { WRTWindow } from '../browser/wrt_window'; @@ -285,7 +285,8 @@ export class WebApplication { console.log('WebApplication : suspend'); addonManager.emit('lcSuspend', this.mainWindow.id); this.suspended = true; - this.windowList[this.windowList.length - 1].hide(); + if (this.windowList.length > 0) + this.windowList[this.windowList.length - 1].hide(); this.flushData(); if (this.profileDelegate.canIgnoreSuspend()) return; @@ -344,7 +345,7 @@ export class WebApplication { private flushData() { console.log('WebApplication : FlushData'); - this.windowList.forEach((window) => window.webContents.session.flushStorageData()); + session.defaultSession?.flushStorageData(); } sendAppControlEvent() { -- 2.7.4 From 48c152b1b3c98f8fc650124d4018762c39aa1aa3 Mon Sep 17 00:00:00 2001 From: Youngsoo Choi Date: Wed, 16 Jun 2021 21:01:39 -0700 Subject: [PATCH 06/16] [Service] Upgrade device home as v1.0.5 - Use RSA cryptography for data payload under websocket connection - Share RSA keys between express and websocket via session middleware - Replace ws with socket.io which has been used by offload.js - Use timestamp salt for every ReST API request - Don't use insecure Math.random() Change-Id: I88db4aeff042540ba69d1df5b69a518b28e2d1fe Signed-off-by: Youngsoo Choi --- device_home/node_modules/cookie-parser/LICENSE | 23 + device_home/node_modules/cookie-parser/index.js | 1 + .../node_modules/cookie-parser/package.json | 85 + device_home/pincode/js/jsencrypt.js | 5586 +------------------ device_home/pincode/js/pincode.js | 19 +- device_home/service/app_proxy.js | 2 + device_home/service/jsencrypt.js | 5587 +------------------- device_home/service/relay-server.js | 178 +- device_home/service/security.js | 8 +- device_home/service/service.js | 132 +- 10 files changed, 806 insertions(+), 10815 deletions(-) create mode 100644 device_home/node_modules/cookie-parser/LICENSE create mode 100644 device_home/node_modules/cookie-parser/index.js create mode 100644 device_home/node_modules/cookie-parser/package.json mode change 100644 => 100755 device_home/service/jsencrypt.js diff --git a/device_home/node_modules/cookie-parser/LICENSE b/device_home/node_modules/cookie-parser/LICENSE new file mode 100644 index 0000000..343f2ad --- /dev/null +++ b/device_home/node_modules/cookie-parser/LICENSE @@ -0,0 +1,23 @@ +(The MIT License) + +Copyright (c) 2014 TJ Holowaychuk +Copyright (c) 2015 Douglas Christopher Wilson + +Permission is hereby granted, free of charge, to any person obtaining +a copy of this software and associated documentation files (the +'Software'), to deal in the Software without restriction, including +without limitation the rights to use, copy, modify, merge, publish, +distribute, sublicense, and/or sell copies of the Software, and to +permit persons to whom the Software is furnished to do so, subject to +the following conditions: + +The above copyright notice and this permission notice shall be +included in all copies or substantial portions of the Software. + +THE SOFTWARE IS PROVIDED 'AS IS', WITHOUT WARRANTY OF ANY KIND, +EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF +MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. +IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY +CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION OF CONTRACT, +TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION WITH THE +SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE. diff --git a/device_home/node_modules/cookie-parser/index.js b/device_home/node_modules/cookie-parser/index.js new file mode 100644 index 0000000..b808271 --- /dev/null +++ b/device_home/node_modules/cookie-parser/index.js @@ -0,0 +1 @@ +"use strict";var cookie=require("cookie");var signature=require("cookie-signature");module.exports=cookieParser;module.exports.JSONCookie=JSONCookie;module.exports.JSONCookies=JSONCookies;module.exports.signedCookie=signedCookie;module.exports.signedCookies=signedCookies;function cookieParser(secret,options){var secrets=!secret||Array.isArray(secret)?secret||[]:[secret];return function cookieParser(req,res,next){if(req.cookies){return next()}var cookies=req.headers.cookie;req.secret=secrets[0];req.cookies=Object.create(null);req.signedCookies=Object.create(null);if(!cookies){return next()}req.cookies=cookie.parse(cookies,options);if(secrets.length!==0){req.signedCookies=signedCookies(req.cookies,secrets);req.signedCookies=JSONCookies(req.signedCookies)}req.cookies=JSONCookies(req.cookies);next()}}function JSONCookie(str){if(typeof str!=="string"||str.substr(0,2)!=="j:"){return undefined}try{return JSON.parse(str.slice(2))}catch(err){return undefined}}function JSONCookies(obj){var cookies=Object.keys(obj);var key;var val;for(var i=0;i= 0.8.0" + }, + "files": [ + "LICENSE", + "HISTORY.md", + "index.js" + ], + "homepage": "https://github.com/expressjs/cookie-parser#readme", + "keywords": [ + "cookie", + "middleware" + ], + "license": "MIT", + "name": "cookie-parser", + "repository": { + "type": "git", + "url": "git+https://github.com/expressjs/cookie-parser.git" + }, + "scripts": { + "lint": "eslint --plugin markdown --ext js,md .", + "test": "mocha --reporter spec --bail --check-leaks test/", + "test-cov": "istanbul cover node_modules/mocha/bin/_mocha -- --reporter dot --check-leaks test/", + "test-travis": "istanbul cover node_modules/mocha/bin/_mocha --report lcovonly -- --reporter spec --check-leaks test/" + }, + "version": "1.4.5" +} diff --git a/device_home/pincode/js/jsencrypt.js b/device_home/pincode/js/jsencrypt.js index 8659f54..d4591b8 100755 --- a/device_home/pincode/js/jsencrypt.js +++ b/device_home/pincode/js/jsencrypt.js @@ -1,5377 +1,261 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (factory((global.JSEncrypt = {}))); -}(this, (function (exports) { 'use strict'; - -var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; - -Math.random = function() { - const byteArray = new Uint32Array(1); - return (window.crypto.getRandomValues(byteArray))[0]; -} - -function int2char(n) { - return BI_RM.charAt(n); -} -//#region BIT_OPERATIONS -// (public) this & a -function op_and(x, y) { - return x & y; -} -// (public) this | a -function op_or(x, y) { - return x | y; -} -// (public) this ^ a -function op_xor(x, y) { - return x ^ y; -} -// (public) this & ~a -function op_andnot(x, y) { - return x & ~y; -} -// return index of lowest 1-bit in x, x < 2^31 -function lbit(x) { - if (x == 0) { - return -1; - } - var r = 0; - if ((x & 0xffff) == 0) { - x >>= 16; - r += 16; - } - if ((x & 0xff) == 0) { - x >>= 8; - r += 8; - } - if ((x & 0xf) == 0) { - x >>= 4; - r += 4; - } - if ((x & 3) == 0) { - x >>= 2; - r += 2; - } - if ((x & 1) == 0) { - ++r; - } - return r; -} -// return number of 1 bits in x -function cbit(x) { - var r = 0; - while (x != 0) { - x &= x - 1; - ++r; - } - return r; -} -//#endregion BIT_OPERATIONS - -var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64pad = "="; -function hex2b64(h) { - var i; - var c; - var ret = ""; - for (i = 0; i + 3 <= h.length; i += 3) { - c = parseInt(h.substring(i, i + 3), 16); - ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63); - } - if (i + 1 == h.length) { - c = parseInt(h.substring(i, i + 1), 16); - ret += b64map.charAt(c << 2); - } - else if (i + 2 == h.length) { - c = parseInt(h.substring(i, i + 2), 16); - ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4); - } - while ((ret.length & 3) > 0) { - ret += b64pad; - } - return ret; -} -// convert a base64 string to hex -function b64tohex(s) { - var ret = ""; - var i; - var k = 0; // b64 state, 0-3 - var slop = 0; - for (i = 0; i < s.length; ++i) { - if (s.charAt(i) == b64pad) { - break; - } - var v = b64map.indexOf(s.charAt(i)); - if (v < 0) { - continue; - } - if (k == 0) { - ret += int2char(v >> 2); - slop = v & 3; - k = 1; - } - else if (k == 1) { - ret += int2char((slop << 2) | (v >> 4)); - slop = v & 0xf; - k = 2; - } - else if (k == 2) { - ret += int2char(slop); - ret += int2char(v >> 2); - slop = v & 3; - k = 3; - } - else { - ret += int2char((slop << 2) | (v >> 4)); - ret += int2char(v & 0xf); - k = 0; - } - } - if (k == 1) { - ret += int2char(slop << 2); - } - return ret; -} - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -// Hex JavaScript decoder -// Copyright (c) 2008-2013 Lapo Luchini -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */ -var decoder; -var Hex = { - decode: function (a) { - var i; - if (decoder === undefined) { - var hex = "0123456789ABCDEF"; - var ignore = " \f\n\r\t\u00A0\u2028\u2029"; - decoder = {}; - for (i = 0; i < 16; ++i) { - decoder[hex.charAt(i)] = i; - } - hex = hex.toLowerCase(); - for (i = 10; i < 16; ++i) { - decoder[hex.charAt(i)] = i; - } - for (i = 0; i < ignore.length; ++i) { - decoder[ignore.charAt(i)] = -1; - } - } - var out = []; - var bits = 0; - var char_count = 0; - for (i = 0; i < a.length; ++i) { - var c = a.charAt(i); - if (c == "=") { - break; - } - c = decoder[c]; - if (c == -1) { - continue; - } - if (c === undefined) { - throw new Error("Illegal character at offset " + i); - } - bits |= c; - if (++char_count >= 2) { - out[out.length] = bits; - bits = 0; - char_count = 0; - } - else { - bits <<= 4; - } - } - if (char_count) { - throw new Error("Hex encoding incomplete: 4 bits missing"); - } - return out; - } -}; - -// Base64 JavaScript decoder -// Copyright (c) 2008-2013 Lapo Luchini -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */ -var decoder$1; -var Base64 = { - decode: function (a) { - var i; - if (decoder$1 === undefined) { - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - var ignore = "= \f\n\r\t\u00A0\u2028\u2029"; - decoder$1 = Object.create(null); - for (i = 0; i < 64; ++i) { - decoder$1[b64.charAt(i)] = i; - } - for (i = 0; i < ignore.length; ++i) { - decoder$1[ignore.charAt(i)] = -1; - } - } - var out = []; - var bits = 0; - var char_count = 0; - for (i = 0; i < a.length; ++i) { - var c = a.charAt(i); - if (c == "=") { - break; - } - c = decoder$1[c]; - if (c == -1) { - continue; - } - if (c === undefined) { - throw new Error("Illegal character at offset " + i); - } - bits |= c; - if (++char_count >= 4) { - out[out.length] = (bits >> 16); - out[out.length] = (bits >> 8) & 0xFF; - out[out.length] = bits & 0xFF; - bits = 0; - char_count = 0; - } - else { - bits <<= 6; - } - } - switch (char_count) { - case 1: - throw new Error("Base64 encoding incomplete: at least 2 bits missing"); - case 2: - out[out.length] = (bits >> 10); - break; - case 3: - out[out.length] = (bits >> 16); - out[out.length] = (bits >> 8) & 0xFF; - break; - } - return out; - }, - re: /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/, - unarmor: function (a) { - var m = Base64.re.exec(a); - if (m) { - if (m[1]) { - a = m[1]; - } - else if (m[2]) { - a = m[2]; - } - else { - throw new Error("RegExp out of sync"); - } - } - return Base64.decode(a); - } -}; - -// Big integer base-10 printing library -// Copyright (c) 2014 Lapo Luchini -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */ -var max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256 -var Int10 = /** @class */ (function () { - function Int10(value) { - this.buf = [+value || 0]; - } - Int10.prototype.mulAdd = function (m, c) { - // assert(m <= 256) - var b = this.buf; - var l = b.length; - var i; - var t; - for (i = 0; i < l; ++i) { - t = b[i] * m + c; - if (t < max) { - c = 0; - } - else { - c = 0 | (t / max); - t -= c * max; - } - b[i] = t; - } - if (c > 0) { - b[i] = c; - } - }; - Int10.prototype.sub = function (c) { - // assert(m <= 256) - var b = this.buf; - var l = b.length; - var i; - var t; - for (i = 0; i < l; ++i) { - t = b[i] - c; - if (t < 0) { - t += max; - c = 1; - } - else { - c = 0; - } - b[i] = t; - } - while (b[b.length - 1] === 0) { - b.pop(); - } - }; - Int10.prototype.toString = function (base) { - if ((base || 10) != 10) { - throw new Error("only base 10 is supported"); - } - var b = this.buf; - var s = b[b.length - 1].toString(); - for (var i = b.length - 2; i >= 0; --i) { - s += (max + b[i]).toString().substring(1); - } - return s; - }; - Int10.prototype.valueOf = function () { - var b = this.buf; - var v = 0; - for (var i = b.length - 1; i >= 0; --i) { - v = v * max + b[i]; - } - return v; - }; - Int10.prototype.simplify = function () { - var b = this.buf; - return (b.length == 1) ? b[0] : this; - }; - return Int10; -}()); - -// ASN.1 JavaScript decoder -var ellipsis = "\u2026"; -var reTimeS = /^(\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/; -var reTimeL = /^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/; -function stringCut(str, len) { - if (str.length > len) { - str = str.substring(0, len) + ellipsis; - } - return str; -} -var Stream = /** @class */ (function () { - function Stream(enc, pos) { - this.hexDigits = "0123456789ABCDEF"; - if (enc instanceof Stream) { - this.enc = enc.enc; - this.pos = enc.pos; - } - else { - // enc should be an array or a binary string - this.enc = enc; - this.pos = pos; - } - } - Stream.prototype.get = function (pos) { - if (pos === undefined) { - pos = this.pos++; - } - if (pos >= this.enc.length) { - throw new Error("Requesting byte offset " + pos + " on a stream of length " + this.enc.length); - } - return ("string" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos]; - }; - Stream.prototype.hexByte = function (b) { - return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF); - }; - Stream.prototype.hexDump = function (start, end, raw) { - var s = ""; - for (var i = start; i < end; ++i) { - s += this.hexByte(this.get(i)); - if (raw !== true) { - switch (i & 0xF) { - case 0x7: - s += " "; - break; - case 0xF: - s += "\n"; - break; - default: - s += " "; - } - } - } - return s; - }; - Stream.prototype.isASCII = function (start, end) { - for (var i = start; i < end; ++i) { - var c = this.get(i); - if (c < 32 || c > 176) { - return false; - } - } - return true; - }; - Stream.prototype.parseStringISO = function (start, end) { - var s = ""; - for (var i = start; i < end; ++i) { - s += String.fromCharCode(this.get(i)); - } - return s; - }; - Stream.prototype.parseStringUTF = function (start, end) { - var s = ""; - for (var i = start; i < end;) { - var c = this.get(i++); - if (c < 128) { - s += String.fromCharCode(c); - } - else if ((c > 191) && (c < 224)) { - s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F)); - } - else { - s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F)); - } - } - return s; - }; - Stream.prototype.parseStringBMP = function (start, end) { - var str = ""; - var hi; - var lo; - for (var i = start; i < end;) { - hi = this.get(i++); - lo = this.get(i++); - str += String.fromCharCode((hi << 8) | lo); - } - return str; - }; - Stream.prototype.parseTime = function (start, end, shortYear) { - var s = this.parseStringISO(start, end); - var m = (shortYear ? reTimeS : reTimeL).exec(s); - if (!m) { - return "Unrecognized time: " + s; - } - if (shortYear) { - // to avoid querying the timer, use the fixed range [1970, 2069] - // it will conform with ITU X.400 [-10, +40] sliding window until 2030 - m[1] = +m[1]; - m[1] += (+m[1] < 70) ? 2000 : 1900; - } - s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4]; - if (m[5]) { - s += ":" + m[5]; - if (m[6]) { - s += ":" + m[6]; - if (m[7]) { - s += "." + m[7]; - } - } - } - if (m[8]) { - s += " UTC"; - if (m[8] != "Z") { - s += m[8]; - if (m[9]) { - s += ":" + m[9]; - } - } - } - return s; - }; - Stream.prototype.parseInteger = function (start, end) { - var v = this.get(start); - var neg = (v > 127); - var pad = neg ? 255 : 0; - var len; - var s = ""; - // skip unuseful bits (not allowed in DER) - while (v == pad && ++start < end) { - v = this.get(start); - } - len = end - start; - if (len === 0) { - return neg ? -1 : 0; - } - // show bit length of huge integers - if (len > 4) { - s = v; - len <<= 3; - while (((+s ^ pad) & 0x80) == 0) { - s = +s << 1; - --len; - } - s = "(" + len + " bit)\n"; - } - // decode the integer - if (neg) { - v = v - 256; - } - var n = new Int10(v); - for (var i = start + 1; i < end; ++i) { - n.mulAdd(256, this.get(i)); - } - return s + n.toString(); - }; - Stream.prototype.parseBitString = function (start, end, maxLength) { - var unusedBit = this.get(start); - var lenBit = ((end - start - 1) << 3) - unusedBit; - var intro = "(" + lenBit + " bit)\n"; - var s = ""; - for (var i = start + 1; i < end; ++i) { - var b = this.get(i); - var skip = (i == end - 1) ? unusedBit : 0; - for (var j = 7; j >= skip; --j) { - s += (b >> j) & 1 ? "1" : "0"; - } - if (s.length > maxLength) { - return intro + stringCut(s, maxLength); - } - } - return intro + s; - }; - Stream.prototype.parseOctetString = function (start, end, maxLength) { - if (this.isASCII(start, end)) { - return stringCut(this.parseStringISO(start, end), maxLength); - } - var len = end - start; - var s = "(" + len + " byte)\n"; - maxLength /= 2; // we work in bytes - if (len > maxLength) { - end = start + maxLength; - } - for (var i = start; i < end; ++i) { - s += this.hexByte(this.get(i)); - } - if (len > maxLength) { - s += ellipsis; - } - return s; - }; - Stream.prototype.parseOID = function (start, end, maxLength) { - var s = ""; - var n = new Int10(); - var bits = 0; - for (var i = start; i < end; ++i) { - var v = this.get(i); - n.mulAdd(128, v & 0x7F); - bits += 7; - if (!(v & 0x80)) { // finished - if (s === "") { - n = n.simplify(); - if (n instanceof Int10) { - n.sub(80); - s = "2." + n.toString(); - } - else { - var m = n < 80 ? n < 40 ? 0 : 1 : 2; - s = m + "." + (n - m * 40); - } - } - else { - s += "." + n.toString(); - } - if (s.length > maxLength) { - return stringCut(s, maxLength); - } - n = new Int10(); - bits = 0; - } - } - if (bits > 0) { - s += ".incomplete"; - } - return s; - }; - return Stream; -}()); -var ASN1 = /** @class */ (function () { - function ASN1(stream, header, length, tag, sub) { - if (!(tag instanceof ASN1Tag)) { - throw new Error("Invalid tag value."); - } - this.stream = stream; - this.header = header; - this.length = length; - this.tag = tag; - this.sub = sub; - } - ASN1.prototype.typeName = function () { - switch (this.tag.tagClass) { - case 0: // universal - switch (this.tag.tagNumber) { - case 0x00: - return "EOC"; - case 0x01: - return "BOOLEAN"; - case 0x02: - return "INTEGER"; - case 0x03: - return "BIT_STRING"; - case 0x04: - return "OCTET_STRING"; - case 0x05: - return "NULL"; - case 0x06: - return "OBJECT_IDENTIFIER"; - case 0x07: - return "ObjectDescriptor"; - case 0x08: - return "EXTERNAL"; - case 0x09: - return "REAL"; - case 0x0A: - return "ENUMERATED"; - case 0x0B: - return "EMBEDDED_PDV"; - case 0x0C: - return "UTF8String"; - case 0x10: - return "SEQUENCE"; - case 0x11: - return "SET"; - case 0x12: - return "NumericString"; - case 0x13: - return "PrintableString"; // ASCII subset - case 0x14: - return "TeletexString"; // aka T61String - case 0x15: - return "VideotexString"; - case 0x16: - return "IA5String"; // ASCII - case 0x17: - return "UTCTime"; - case 0x18: - return "GeneralizedTime"; - case 0x19: - return "GraphicString"; - case 0x1A: - return "VisibleString"; // ASCII subset - case 0x1B: - return "GeneralString"; - case 0x1C: - return "UniversalString"; - case 0x1E: - return "BMPString"; - } - return "Universal_" + this.tag.tagNumber.toString(); - case 1: - return "Application_" + this.tag.tagNumber.toString(); - case 2: - return "[" + this.tag.tagNumber.toString() + "]"; // Context - case 3: - return "Private_" + this.tag.tagNumber.toString(); - } - }; - ASN1.prototype.content = function (maxLength) { - if (this.tag === undefined) { - return null; - } - if (maxLength === undefined) { - maxLength = Infinity; - } - var content = this.posContent(); - var len = Math.abs(this.length); - if (!this.tag.isUniversal()) { - if (this.sub !== null) { - return "(" + this.sub.length + " elem)"; - } - return this.stream.parseOctetString(content, content + len, maxLength); - } - switch (this.tag.tagNumber) { - case 0x01: // BOOLEAN - return (this.stream.get(content) === 0) ? "false" : "true"; - case 0x02: // INTEGER - return this.stream.parseInteger(content, content + len); - case 0x03: // BIT_STRING - return this.sub ? "(" + this.sub.length + " elem)" : - this.stream.parseBitString(content, content + len, maxLength); - case 0x04: // OCTET_STRING - return this.sub ? "(" + this.sub.length + " elem)" : - this.stream.parseOctetString(content, content + len, maxLength); - // case 0x05: // NULL - case 0x06: // OBJECT_IDENTIFIER - return this.stream.parseOID(content, content + len, maxLength); - // case 0x07: // ObjectDescriptor - // case 0x08: // EXTERNAL - // case 0x09: // REAL - // case 0x0A: // ENUMERATED - // case 0x0B: // EMBEDDED_PDV - case 0x10: // SEQUENCE - case 0x11: // SET - if (this.sub !== null) { - return "(" + this.sub.length + " elem)"; - } - else { - return "(no elem)"; - } - case 0x0C: // UTF8String - return stringCut(this.stream.parseStringUTF(content, content + len), maxLength); - case 0x12: // NumericString - case 0x13: // PrintableString - case 0x14: // TeletexString - case 0x15: // VideotexString - case 0x16: // IA5String - // case 0x19: // GraphicString - case 0x1A: // VisibleString - // case 0x1B: // GeneralString - // case 0x1C: // UniversalString - return stringCut(this.stream.parseStringISO(content, content + len), maxLength); - case 0x1E: // BMPString - return stringCut(this.stream.parseStringBMP(content, content + len), maxLength); - case 0x17: // UTCTime - case 0x18: // GeneralizedTime - return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17)); - } - return null; - }; - ASN1.prototype.toString = function () { - return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub === null) ? "null" : this.sub.length) + "]"; - }; - ASN1.prototype.toPrettyString = function (indent) { - if (indent === undefined) { - indent = ""; - } - var s = indent + this.typeName() + " @" + this.stream.pos; - if (this.length >= 0) { - s += "+"; - } - s += this.length; - if (this.tag.tagConstructed) { - s += " (constructed)"; - } - else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) { - s += " (encapsulates)"; - } - s += "\n"; - if (this.sub !== null) { - indent += " "; - for (var i = 0, max = this.sub.length; i < max; ++i) { - s += this.sub[i].toPrettyString(indent); - } - } - return s; - }; - ASN1.prototype.posStart = function () { - return this.stream.pos; - }; - ASN1.prototype.posContent = function () { - return this.stream.pos + this.header; - }; - ASN1.prototype.posEnd = function () { - return this.stream.pos + this.header + Math.abs(this.length); - }; - ASN1.prototype.toHexString = function () { - return this.stream.hexDump(this.posStart(), this.posEnd(), true); - }; - ASN1.decodeLength = function (stream) { - var buf = stream.get(); - var len = buf & 0x7F; - if (len == buf) { - return len; - } - // no reason to use Int10, as it would be a huge buffer anyways - if (len > 6) { - throw new Error("Length over 48 bits not supported at position " + (stream.pos - 1)); - } - if (len === 0) { - return null; - } // undefined - buf = 0; - for (var i = 0; i < len; ++i) { - buf = (buf * 256) + stream.get(); - } - return buf; - }; - /** - * Retrieve the hexadecimal value (as a string) of the current ASN.1 element - * @returns {string} - * @public - */ - ASN1.prototype.getHexStringValue = function () { - var hexString = this.toHexString(); - var offset = this.header * 2; - var length = this.length * 2; - return hexString.substr(offset, length); - }; - ASN1.decode = function (str) { - var stream; - if (!(str instanceof Stream)) { - stream = new Stream(str, 0); - } - else { - stream = str; - } - var streamStart = new Stream(stream); - var tag = new ASN1Tag(stream); - var len = ASN1.decodeLength(stream); - var start = stream.pos; - var header = start - streamStart.pos; - var sub = null; - var getSub = function () { - var ret = []; - if (len !== null) { - // definite length - var end = start + len; - while (stream.pos < end) { - ret[ret.length] = ASN1.decode(stream); - } - if (stream.pos != end) { - throw new Error("Content size is not correct for container starting at offset " + start); - } - } - else { - // undefined length - try { - for (;;) { - var s = ASN1.decode(stream); - if (s.tag.isEOC()) { - break; - } - ret[ret.length] = s; - } - len = start - stream.pos; // undefined lengths are represented as negative values - } - catch (e) { - throw new Error("Exception while decoding undefined length content: " + e); - } - } - return ret; - }; - if (tag.tagConstructed) { - // must have valid content - sub = getSub(); - } - else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) { - // sometimes BitString and OctetString are used to encapsulate ASN.1 - try { - if (tag.tagNumber == 0x03) { - if (stream.get() != 0) { - throw new Error("BIT STRINGs with unused bits cannot encapsulate."); - } - } - sub = getSub(); - for (var i = 0; i < sub.length; ++i) { - if (sub[i].tag.isEOC()) { - throw new Error("EOC is not supposed to be actual content."); - } - } - } - catch (e) { - // but silently ignore when they don't - sub = null; - } - } - if (sub === null) { - if (len === null) { - throw new Error("We can't skip over an invalid tag with undefined length at offset " + start); - } - stream.pos = start + Math.abs(len); - } - return new ASN1(streamStart, header, len, tag, sub); - }; - return ASN1; -}()); -var ASN1Tag = /** @class */ (function () { - function ASN1Tag(stream) { - var buf = stream.get(); - this.tagClass = buf >> 6; - this.tagConstructed = ((buf & 0x20) !== 0); - this.tagNumber = buf & 0x1F; - if (this.tagNumber == 0x1F) { // long tag - var n = new Int10(); - do { - buf = stream.get(); - n.mulAdd(128, buf & 0x7F); - } while (buf & 0x80); - this.tagNumber = n.simplify(); - } - } - ASN1Tag.prototype.isUniversal = function () { - return this.tagClass === 0x00; - }; - ASN1Tag.prototype.isEOC = function () { - return this.tagClass === 0x00 && this.tagNumber === 0x00; - }; - return ASN1Tag; -}()); - -// Copyright (c) 2005 Tom Wu -// Bits per digit -var dbits; -// JavaScript engine analysis -var canary = 0xdeadbeefcafe; -var j_lm = ((canary & 0xffffff) == 0xefcafe); -//#region -var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; -var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]; -//#endregion -// (public) Constructor -var BigInteger = /** @class */ (function () { - function BigInteger(a, b, c) { - if (a != null) { - if ("number" == typeof a) { - this.fromNumber(a, b, c); - } - else if (b == null && "string" != typeof a) { - this.fromString(a, 256); - } - else { - this.fromString(a, b); - } - } - } - //#region PUBLIC - // BigInteger.prototype.toString = bnToString; - // (public) return string representation in given radix - BigInteger.prototype.toString = function (b) { - if (this.s < 0) { - return "-" + this.negate().toString(b); - } - var k; - if (b == 16) { - k = 4; - } - else if (b == 8) { - k = 3; - } - else if (b == 2) { - k = 1; - } - else if (b == 32) { - k = 5; - } - else if (b == 4) { - k = 2; - } - else { - return this.toRadix(b); - } - var km = (1 << k) - 1; - var d; - var m = false; - var r = ""; - var i = this.t; - var p = this.DB - (i * this.DB) % k; - if (i-- > 0) { - if (p < this.DB && (d = this[i] >> p) > 0) { - m = true; - r = int2char(d); - } - while (i >= 0) { - if (p < k) { - d = (this[i] & ((1 << p) - 1)) << (k - p); - d |= this[--i] >> (p += this.DB - k); - } - else { - d = (this[i] >> (p -= k)) & km; - if (p <= 0) { - p += this.DB; - --i; - } - } - if (d > 0) { - m = true; - } - if (m) { - r += int2char(d); - } - } - } - return m ? r : "0"; - }; - // BigInteger.prototype.negate = bnNegate; - // (public) -this - BigInteger.prototype.negate = function () { - var r = nbi(); - BigInteger.ZERO.subTo(this, r); - return r; - }; - // BigInteger.prototype.abs = bnAbs; - // (public) |this| - BigInteger.prototype.abs = function () { - return (this.s < 0) ? this.negate() : this; - }; - // BigInteger.prototype.compareTo = bnCompareTo; - // (public) return + if this > a, - if this < a, 0 if equal - BigInteger.prototype.compareTo = function (a) { - var r = this.s - a.s; - if (r != 0) { - return r; - } - var i = this.t; - r = i - a.t; - if (r != 0) { - return (this.s < 0) ? -r : r; - } - while (--i >= 0) { - if ((r = this[i] - a[i]) != 0) { - return r; - } - } - return 0; - }; - // BigInteger.prototype.bitLength = bnBitLength; - // (public) return the number of bits in "this" - BigInteger.prototype.bitLength = function () { - if (this.t <= 0) { - return 0; - } - return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM)); - }; - // BigInteger.prototype.mod = bnMod; - // (public) this mod a - BigInteger.prototype.mod = function (a) { - var r = nbi(); - this.abs().divRemTo(a, null, r); - if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) { - a.subTo(r, r); - } - return r; - }; - // BigInteger.prototype.modPowInt = bnModPowInt; - // (public) this^e % m, 0 <= e < 2^32 - BigInteger.prototype.modPowInt = function (e, m) { - var z; - if (e < 256 || m.isEven()) { - z = new Classic(m); - } - else { - z = new Montgomery(m); - } - return this.exp(e, z); - }; - // BigInteger.prototype.clone = bnClone; - // (public) - BigInteger.prototype.clone = function () { - var r = nbi(); - this.copyTo(r); - return r; - }; - // BigInteger.prototype.intValue = bnIntValue; - // (public) return value as integer - BigInteger.prototype.intValue = function () { - if (this.s < 0) { - if (this.t == 1) { - return this[0] - this.DV; - } - else if (this.t == 0) { - return -1; - } - } - else if (this.t == 1) { - return this[0]; - } - else if (this.t == 0) { - return 0; - } - // assumes 16 < DB < 32 - return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]; - }; - // BigInteger.prototype.byteValue = bnByteValue; - // (public) return value as byte - BigInteger.prototype.byteValue = function () { - return (this.t == 0) ? this.s : (this[0] << 24) >> 24; - }; - // BigInteger.prototype.shortValue = bnShortValue; - // (public) return value as short (assumes DB>=16) - BigInteger.prototype.shortValue = function () { - return (this.t == 0) ? this.s : (this[0] << 16) >> 16; - }; - // BigInteger.prototype.signum = bnSigNum; - // (public) 0 if this == 0, 1 if this > 0 - BigInteger.prototype.signum = function () { - if (this.s < 0) { - return -1; - } - else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) { - return 0; - } - else { - return 1; - } - }; - // BigInteger.prototype.toByteArray = bnToByteArray; - // (public) convert to bigendian byte array - BigInteger.prototype.toByteArray = function () { - var i = this.t; - var r = []; - r[0] = this.s; - var p = this.DB - (i * this.DB) % 8; - var d; - var k = 0; - if (i-- > 0) { - if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) { - r[k++] = d | (this.s << (this.DB - p)); - } - while (i >= 0) { - if (p < 8) { - d = (this[i] & ((1 << p) - 1)) << (8 - p); - d |= this[--i] >> (p += this.DB - 8); - } - else { - d = (this[i] >> (p -= 8)) & 0xff; - if (p <= 0) { - p += this.DB; - --i; - } - } - if ((d & 0x80) != 0) { - d |= -256; - } - if (k == 0 && (this.s & 0x80) != (d & 0x80)) { - ++k; - } - if (k > 0 || d != this.s) { - r[k++] = d; - } - } - } - return r; - }; - // BigInteger.prototype.equals = bnEquals; - BigInteger.prototype.equals = function (a) { - return (this.compareTo(a) == 0); - }; - // BigInteger.prototype.min = bnMin; - BigInteger.prototype.min = function (a) { - return (this.compareTo(a) < 0) ? this : a; - }; - // BigInteger.prototype.max = bnMax; - BigInteger.prototype.max = function (a) { - return (this.compareTo(a) > 0) ? this : a; - }; - // BigInteger.prototype.and = bnAnd; - BigInteger.prototype.and = function (a) { - var r = nbi(); - this.bitwiseTo(a, op_and, r); - return r; - }; - // BigInteger.prototype.or = bnOr; - BigInteger.prototype.or = function (a) { - var r = nbi(); - this.bitwiseTo(a, op_or, r); - return r; - }; - // BigInteger.prototype.xor = bnXor; - BigInteger.prototype.xor = function (a) { - var r = nbi(); - this.bitwiseTo(a, op_xor, r); - return r; - }; - // BigInteger.prototype.andNot = bnAndNot; - BigInteger.prototype.andNot = function (a) { - var r = nbi(); - this.bitwiseTo(a, op_andnot, r); - return r; - }; - // BigInteger.prototype.not = bnNot; - // (public) ~this - BigInteger.prototype.not = function () { - var r = nbi(); - for (var i = 0; i < this.t; ++i) { - r[i] = this.DM & ~this[i]; - } - r.t = this.t; - r.s = ~this.s; - return r; - }; - // BigInteger.prototype.shiftLeft = bnShiftLeft; - // (public) this << n - BigInteger.prototype.shiftLeft = function (n) { - var r = nbi(); - if (n < 0) { - this.rShiftTo(-n, r); - } - else { - this.lShiftTo(n, r); - } - return r; - }; - // BigInteger.prototype.shiftRight = bnShiftRight; - // (public) this >> n - BigInteger.prototype.shiftRight = function (n) { - var r = nbi(); - if (n < 0) { - this.lShiftTo(-n, r); - } - else { - this.rShiftTo(n, r); - } - return r; - }; - // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; - // (public) returns index of lowest 1-bit (or -1 if none) - BigInteger.prototype.getLowestSetBit = function () { - for (var i = 0; i < this.t; ++i) { - if (this[i] != 0) { - return i * this.DB + lbit(this[i]); - } - } - if (this.s < 0) { - return this.t * this.DB; - } - return -1; - }; - // BigInteger.prototype.bitCount = bnBitCount; - // (public) return number of set bits - BigInteger.prototype.bitCount = function () { - var r = 0; - var x = this.s & this.DM; - for (var i = 0; i < this.t; ++i) { - r += cbit(this[i] ^ x); - } - return r; - }; - // BigInteger.prototype.testBit = bnTestBit; - // (public) true iff nth bit is set - BigInteger.prototype.testBit = function (n) { - var j = Math.floor(n / this.DB); - if (j >= this.t) { - return (this.s != 0); - } - return ((this[j] & (1 << (n % this.DB))) != 0); - }; - // BigInteger.prototype.setBit = bnSetBit; - // (public) this | (1< 1) { - var g2 = nbi(); - z.sqrTo(g[1], g2); - while (n <= km) { - g[n] = nbi(); - z.mulTo(g2, g[n - 2], g[n]); - n += 2; - } - } - var j = e.t - 1; - var w; - var is1 = true; - var r2 = nbi(); - var t; - i = nbits(e[j]) - 1; - while (j >= 0) { - if (i >= k1) { - w = (e[j] >> (i - k1)) & km; - } - else { - w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i); - if (j > 0) { - w |= e[j - 1] >> (this.DB + i - k1); - } - } - n = k; - while ((w & 1) == 0) { - w >>= 1; - --n; - } - if ((i -= n) < 0) { - i += this.DB; - --j; - } - if (is1) { // ret == 1, don't bother squaring or multiplying it - g[w].copyTo(r); - is1 = false; - } - else { - while (n > 1) { - z.sqrTo(r, r2); - z.sqrTo(r2, r); - n -= 2; - } - if (n > 0) { - z.sqrTo(r, r2); - } - else { - t = r; - r = r2; - r2 = t; - } - z.mulTo(r2, g[w], r); - } - while (j >= 0 && (e[j] & (1 << i)) == 0) { - z.sqrTo(r, r2); - t = r; - r = r2; - r2 = t; - if (--i < 0) { - i = this.DB - 1; - --j; - } - } - } - return z.revert(r); - }; - // BigInteger.prototype.modInverse = bnModInverse; - // (public) 1/this % m (HAC 14.61) - BigInteger.prototype.modInverse = function (m) { - var ac = m.isEven(); - if ((this.isEven() && ac) || m.signum() == 0) { - return BigInteger.ZERO; - } - var u = m.clone(); - var v = this.clone(); - var a = nbv(1); - var b = nbv(0); - var c = nbv(0); - var d = nbv(1); - while (u.signum() != 0) { - while (u.isEven()) { - u.rShiftTo(1, u); - if (ac) { - if (!a.isEven() || !b.isEven()) { - a.addTo(this, a); - b.subTo(m, b); - } - a.rShiftTo(1, a); - } - else if (!b.isEven()) { - b.subTo(m, b); - } - b.rShiftTo(1, b); - } - while (v.isEven()) { - v.rShiftTo(1, v); - if (ac) { - if (!c.isEven() || !d.isEven()) { - c.addTo(this, c); - d.subTo(m, d); - } - c.rShiftTo(1, c); - } - else if (!d.isEven()) { - d.subTo(m, d); - } - d.rShiftTo(1, d); - } - if (u.compareTo(v) >= 0) { - u.subTo(v, u); - if (ac) { - a.subTo(c, a); - } - b.subTo(d, b); - } - else { - v.subTo(u, v); - if (ac) { - c.subTo(a, c); - } - d.subTo(b, d); - } - } - if (v.compareTo(BigInteger.ONE) != 0) { - return BigInteger.ZERO; - } - if (d.compareTo(m) >= 0) { - return d.subtract(m); - } - if (d.signum() < 0) { - d.addTo(m, d); - } - else { - return d; - } - if (d.signum() < 0) { - return d.add(m); - } - else { - return d; - } - }; - // BigInteger.prototype.pow = bnPow; - // (public) this^e - BigInteger.prototype.pow = function (e) { - return this.exp(e, new NullExp()); - }; - // BigInteger.prototype.gcd = bnGCD; - // (public) gcd(this,a) (HAC 14.54) - BigInteger.prototype.gcd = function (a) { - var x = (this.s < 0) ? this.negate() : this.clone(); - var y = (a.s < 0) ? a.negate() : a.clone(); - if (x.compareTo(y) < 0) { - var t = x; - x = y; - y = t; - } - var i = x.getLowestSetBit(); - var g = y.getLowestSetBit(); - if (g < 0) { - return x; - } - if (i < g) { - g = i; - } - if (g > 0) { - x.rShiftTo(g, x); - y.rShiftTo(g, y); - } - while (x.signum() > 0) { - if ((i = x.getLowestSetBit()) > 0) { - x.rShiftTo(i, x); - } - if ((i = y.getLowestSetBit()) > 0) { - y.rShiftTo(i, y); - } - if (x.compareTo(y) >= 0) { - x.subTo(y, x); - x.rShiftTo(1, x); - } - else { - y.subTo(x, y); - y.rShiftTo(1, y); - } - } - if (g > 0) { - y.lShiftTo(g, y); - } - return y; - }; - // BigInteger.prototype.isProbablePrime = bnIsProbablePrime; - // (public) test primality with certainty >= 1-.5^t - BigInteger.prototype.isProbablePrime = function (t) { - var i; - var x = this.abs(); - if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) { - for (i = 0; i < lowprimes.length; ++i) { - if (x[0] == lowprimes[i]) { - return true; - } - } - return false; - } - if (x.isEven()) { - return false; - } - i = 1; - while (i < lowprimes.length) { - var m = lowprimes[i]; - var j = i + 1; - while (j < lowprimes.length && m < lplim) { - m *= lowprimes[j++]; - } - m = x.modInt(m); - while (i < j) { - if (m % lowprimes[i++] == 0) { - return false; - } - } - } - return x.millerRabin(t); - }; - //#endregion PUBLIC - //#region PROTECTED - // BigInteger.prototype.copyTo = bnpCopyTo; - // (protected) copy this to r - BigInteger.prototype.copyTo = function (r) { - for (var i = this.t - 1; i >= 0; --i) { - r[i] = this[i]; - } - r.t = this.t; - r.s = this.s; - }; - // BigInteger.prototype.fromInt = bnpFromInt; - // (protected) set from integer value x, -DV <= x < DV - BigInteger.prototype.fromInt = function (x) { - this.t = 1; - this.s = (x < 0) ? -1 : 0; - if (x > 0) { - this[0] = x; - } - else if (x < -1) { - this[0] = x + this.DV; - } - else { - this.t = 0; - } - }; - // BigInteger.prototype.fromString = bnpFromString; - // (protected) set from string and radix - BigInteger.prototype.fromString = function (s, b) { - var k; - if (b == 16) { - k = 4; - } - else if (b == 8) { - k = 3; - } - else if (b == 256) { - k = 8; - /* byte array */ - } - else if (b == 2) { - k = 1; - } - else if (b == 32) { - k = 5; - } - else if (b == 4) { - k = 2; - } - else { - this.fromRadix(s, b); - return; - } - this.t = 0; - this.s = 0; - var i = s.length; - var mi = false; - var sh = 0; - while (--i >= 0) { - var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i); - if (x < 0) { - if (s.charAt(i) == "-") { - mi = true; - } - continue; - } - mi = false; - if (sh == 0) { - this[this.t++] = x; - } - else if (sh + k > this.DB) { - this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh; - this[this.t++] = (x >> (this.DB - sh)); - } - else { - this[this.t - 1] |= x << sh; - } - sh += k; - if (sh >= this.DB) { - sh -= this.DB; - } - } - if (k == 8 && ((+s[0]) & 0x80) != 0) { - this.s = -1; - if (sh > 0) { - this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh; - } - } - this.clamp(); - if (mi) { - BigInteger.ZERO.subTo(this, this); - } - }; - // BigInteger.prototype.clamp = bnpClamp; - // (protected) clamp off excess high words - BigInteger.prototype.clamp = function () { - var c = this.s & this.DM; - while (this.t > 0 && this[this.t - 1] == c) { - --this.t; - } - }; - // BigInteger.prototype.dlShiftTo = bnpDLShiftTo; - // (protected) r = this << n*DB - BigInteger.prototype.dlShiftTo = function (n, r) { - var i; - for (i = this.t - 1; i >= 0; --i) { - r[i + n] = this[i]; - } - for (i = n - 1; i >= 0; --i) { - r[i] = 0; - } - r.t = this.t + n; - r.s = this.s; - }; - // BigInteger.prototype.drShiftTo = bnpDRShiftTo; - // (protected) r = this >> n*DB - BigInteger.prototype.drShiftTo = function (n, r) { - for (var i = n; i < this.t; ++i) { - r[i - n] = this[i]; - } - r.t = Math.max(this.t - n, 0); - r.s = this.s; - }; - // BigInteger.prototype.lShiftTo = bnpLShiftTo; - // (protected) r = this << n - BigInteger.prototype.lShiftTo = function (n, r) { - var bs = n % this.DB; - var cbs = this.DB - bs; - var bm = (1 << cbs) - 1; - var ds = Math.floor(n / this.DB); - var c = (this.s << bs) & this.DM; - for (var i = this.t - 1; i >= 0; --i) { - r[i + ds + 1] = (this[i] >> cbs) | c; - c = (this[i] & bm) << bs; - } - for (var i = ds - 1; i >= 0; --i) { - r[i] = 0; - } - r[ds] = c; - r.t = this.t + ds + 1; - r.s = this.s; - r.clamp(); - }; - // BigInteger.prototype.rShiftTo = bnpRShiftTo; - // (protected) r = this >> n - BigInteger.prototype.rShiftTo = function (n, r) { - r.s = this.s; - var ds = Math.floor(n / this.DB); - if (ds >= this.t) { - r.t = 0; - return; - } - var bs = n % this.DB; - var cbs = this.DB - bs; - var bm = (1 << bs) - 1; - r[0] = this[ds] >> bs; - for (var i = ds + 1; i < this.t; ++i) { - r[i - ds - 1] |= (this[i] & bm) << cbs; - r[i - ds] = this[i] >> bs; - } - if (bs > 0) { - r[this.t - ds - 1] |= (this.s & bm) << cbs; - } - r.t = this.t - ds; - r.clamp(); - }; - // BigInteger.prototype.subTo = bnpSubTo; - // (protected) r = this - a - BigInteger.prototype.subTo = function (a, r) { - var i = 0; - var c = 0; - var m = Math.min(a.t, this.t); - while (i < m) { - c += this[i] - a[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - if (a.t < this.t) { - c -= a.s; - while (i < this.t) { - c += this[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while (i < a.t) { - c -= a[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c -= a.s; - } - r.s = (c < 0) ? -1 : 0; - if (c < -1) { - r[i++] = this.DV + c; - } - else if (c > 0) { - r[i++] = c; - } - r.t = i; - r.clamp(); - }; - // BigInteger.prototype.multiplyTo = bnpMultiplyTo; - // (protected) r = this * a, r != this,a (HAC 14.12) - // "this" should be the larger one if appropriate. - BigInteger.prototype.multiplyTo = function (a, r) { - var x = this.abs(); - var y = a.abs(); - var i = x.t; - r.t = i + y.t; - while (--i >= 0) { - r[i] = 0; - } - for (i = 0; i < y.t; ++i) { - r[i + x.t] = x.am(0, y[i], r, i, 0, x.t); - } - r.s = 0; - r.clamp(); - if (this.s != a.s) { - BigInteger.ZERO.subTo(r, r); - } - }; - // BigInteger.prototype.squareTo = bnpSquareTo; - // (protected) r = this^2, r != this (HAC 14.16) - BigInteger.prototype.squareTo = function (r) { - var x = this.abs(); - var i = r.t = 2 * x.t; - while (--i >= 0) { - r[i] = 0; - } - for (i = 0; i < x.t - 1; ++i) { - var c = x.am(i, x[i], r, 2 * i, 0, 1); - if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) { - r[i + x.t] -= x.DV; - r[i + x.t + 1] = 1; - } - } - if (r.t > 0) { - r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1); - } - r.s = 0; - r.clamp(); - }; - // BigInteger.prototype.divRemTo = bnpDivRemTo; - // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) - // r != q, this != m. q or r may be null. - BigInteger.prototype.divRemTo = function (m, q, r) { - var pm = m.abs(); - if (pm.t <= 0) { - return; - } - var pt = this.abs(); - if (pt.t < pm.t) { - if (q != null) { - q.fromInt(0); - } - if (r != null) { - this.copyTo(r); - } - return; - } - if (r == null) { - r = nbi(); - } - var y = nbi(); - var ts = this.s; - var ms = m.s; - var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus - if (nsh > 0) { - pm.lShiftTo(nsh, y); - pt.lShiftTo(nsh, r); - } - else { - pm.copyTo(y); - pt.copyTo(r); - } - var ys = y.t; - var y0 = y[ys - 1]; - if (y0 == 0) { - return; - } - var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0); - var d1 = this.FV / yt; - var d2 = (1 << this.F1) / yt; - var e = 1 << this.F2; - var i = r.t; - var j = i - ys; - var t = (q == null) ? nbi() : q; - y.dlShiftTo(j, t); - if (r.compareTo(t) >= 0) { - r[r.t++] = 1; - r.subTo(t, r); - } - BigInteger.ONE.dlShiftTo(ys, t); - t.subTo(y, y); // "negative" y so we can replace sub with am later - while (y.t < ys) { - y[y.t++] = 0; - } - while (--j >= 0) { - // Estimate quotient digit - var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2); - if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out - y.dlShiftTo(j, t); - r.subTo(t, r); - while (r[i] < --qd) { - r.subTo(t, r); - } - } - } - if (q != null) { - r.drShiftTo(ys, q); - if (ts != ms) { - BigInteger.ZERO.subTo(q, q); - } - } - r.t = ys; - r.clamp(); - if (nsh > 0) { - r.rShiftTo(nsh, r); - } // Denormalize remainder - if (ts < 0) { - BigInteger.ZERO.subTo(r, r); - } - }; - // BigInteger.prototype.invDigit = bnpInvDigit; - // (protected) return "-1/this % 2^DB"; useful for Mont. reduction - // justification: - // xy == 1 (mod m) - // xy = 1+km - // xy(2-xy) = (1+km)(1-km) - // x[y(2-xy)] = 1-k^2m^2 - // x[y(2-xy)] == 1 (mod m^2) - // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 - // should reduce x and y(2-xy) by m^2 at each step to keep size bounded. - // JS multiply "overflows" differently from C/C++, so care is needed here. - BigInteger.prototype.invDigit = function () { - if (this.t < 1) { - return 0; - } - var x = this[0]; - if ((x & 1) == 0) { - return 0; - } - var y = x & 3; // y == 1/x mod 2^2 - y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4 - y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8 - y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16 - // last step - calculate inverse mod DV directly; - // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints - y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits - // we really want the negative inverse, and -DV < y < DV - return (y > 0) ? this.DV - y : -y; - }; - // BigInteger.prototype.isEven = bnpIsEven; - // (protected) true iff this is even - BigInteger.prototype.isEven = function () { - return ((this.t > 0) ? (this[0] & 1) : this.s) == 0; - }; - // BigInteger.prototype.exp = bnpExp; - // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) - BigInteger.prototype.exp = function (e, z) { - if (e > 0xffffffff || e < 1) { - return BigInteger.ONE; - } - var r = nbi(); - var r2 = nbi(); - var g = z.convert(this); - var i = nbits(e) - 1; - g.copyTo(r); - while (--i >= 0) { - z.sqrTo(r, r2); - if ((e & (1 << i)) > 0) { - z.mulTo(r2, g, r); - } - else { - var t = r; - r = r2; - r2 = t; - } - } - return z.revert(r); - }; - // BigInteger.prototype.chunkSize = bnpChunkSize; - // (protected) return x s.t. r^x < DV - BigInteger.prototype.chunkSize = function (r) { - return Math.floor(Math.LN2 * this.DB / Math.log(r)); - }; - // BigInteger.prototype.toRadix = bnpToRadix; - // (protected) convert to radix string - BigInteger.prototype.toRadix = function (b) { - if (b == null) { - b = 10; - } - if (this.signum() == 0 || b < 2 || b > 36) { - return "0"; - } - var cs = this.chunkSize(b); - var a = Math.pow(b, cs); - var d = nbv(a); - var y = nbi(); - var z = nbi(); - var r = ""; - this.divRemTo(d, y, z); - while (y.signum() > 0) { - r = (a + z.intValue()).toString(b).substr(1) + r; - y.divRemTo(d, y, z); - } - return z.intValue().toString(b) + r; - }; - // BigInteger.prototype.fromRadix = bnpFromRadix; - // (protected) convert from radix string - BigInteger.prototype.fromRadix = function (s, b) { - this.fromInt(0); - if (b == null) { - b = 10; - } - var cs = this.chunkSize(b); - var d = Math.pow(b, cs); - var mi = false; - var j = 0; - var w = 0; - for (var i = 0; i < s.length; ++i) { - var x = intAt(s, i); - if (x < 0) { - if (s.charAt(i) == "-" && this.signum() == 0) { - mi = true; - } - continue; - } - w = b * w + x; - if (++j >= cs) { - this.dMultiply(d); - this.dAddOffset(w, 0); - j = 0; - w = 0; - } - } - if (j > 0) { - this.dMultiply(Math.pow(b, j)); - this.dAddOffset(w, 0); - } - if (mi) { - BigInteger.ZERO.subTo(this, this); - } - }; - // BigInteger.prototype.fromNumber = bnpFromNumber; - // (protected) alternate constructor - BigInteger.prototype.fromNumber = function (a, b, c) { - if ("number" == typeof b) { - // new BigInteger(int,int,RNG) - if (a < 2) { - this.fromInt(1); - } - else { - this.fromNumber(a, c); - if (!this.testBit(a - 1)) { - // force MSB set - this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this); - } - if (this.isEven()) { - this.dAddOffset(1, 0); - } // force odd - while (!this.isProbablePrime(b)) { - this.dAddOffset(2, 0); - if (this.bitLength() > a) { - this.subTo(BigInteger.ONE.shiftLeft(a - 1), this); - } - } - } - } - else { - // new BigInteger(int,RNG) - var x = []; - var t = a & 7; - x.length = (a >> 3) + 1; - b.nextBytes(x); - if (t > 0) { - x[0] &= ((1 << t) - 1); - } - else { - x[0] = 0; - } - this.fromString(x, 256); - } - }; - // BigInteger.prototype.bitwiseTo = bnpBitwiseTo; - // (protected) r = this op a (bitwise) - BigInteger.prototype.bitwiseTo = function (a, op, r) { - var i; - var f; - var m = Math.min(a.t, this.t); - for (i = 0; i < m; ++i) { - r[i] = op(this[i], a[i]); - } - if (a.t < this.t) { - f = a.s & this.DM; - for (i = m; i < this.t; ++i) { - r[i] = op(this[i], f); - } - r.t = this.t; - } - else { - f = this.s & this.DM; - for (i = m; i < a.t; ++i) { - r[i] = op(f, a[i]); - } - r.t = a.t; - } - r.s = op(this.s, a.s); - r.clamp(); - }; - // BigInteger.prototype.changeBit = bnpChangeBit; - // (protected) this op (1<>= this.DB; - } - if (a.t < this.t) { - c += a.s; - while (i < this.t) { - c += this[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while (i < a.t) { - c += a[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c += a.s; - } - r.s = (c < 0) ? -1 : 0; - if (c > 0) { - r[i++] = c; - } - else if (c < -1) { - r[i++] = this.DV + c; - } - r.t = i; - r.clamp(); - }; - // BigInteger.prototype.dMultiply = bnpDMultiply; - // (protected) this *= n, this >= 0, 1 < n < DV - BigInteger.prototype.dMultiply = function (n) { - this[this.t] = this.am(0, n - 1, this, 0, 0, this.t); - ++this.t; - this.clamp(); - }; - // BigInteger.prototype.dAddOffset = bnpDAddOffset; - // (protected) this += n << w words, this >= 0 - BigInteger.prototype.dAddOffset = function (n, w) { - if (n == 0) { - return; - } - while (this.t <= w) { - this[this.t++] = 0; - } - this[w] += n; - while (this[w] >= this.DV) { - this[w] -= this.DV; - if (++w >= this.t) { - this[this.t++] = 0; - } - ++this[w]; - } - }; - // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; - // (protected) r = lower n words of "this * a", a.t <= n - // "this" should be the larger one if appropriate. - BigInteger.prototype.multiplyLowerTo = function (a, n, r) { - var i = Math.min(this.t + a.t, n); - r.s = 0; // assumes a,this >= 0 - r.t = i; - while (i > 0) { - r[--i] = 0; - } - for (var j = r.t - this.t; i < j; ++i) { - r[i + this.t] = this.am(0, a[i], r, i, 0, this.t); - } - for (var j = Math.min(a.t, n); i < j; ++i) { - this.am(0, a[i], r, i, 0, n - i); - } - r.clamp(); - }; - // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; - // (protected) r = "this * a" without lower n words, n > 0 - // "this" should be the larger one if appropriate. - BigInteger.prototype.multiplyUpperTo = function (a, n, r) { - --n; - var i = r.t = this.t + a.t - n; - r.s = 0; // assumes a,this >= 0 - while (--i >= 0) { - r[i] = 0; - } - for (i = Math.max(n - this.t, 0); i < a.t; ++i) { - r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n); - } - r.clamp(); - r.drShiftTo(1, r); - }; - // BigInteger.prototype.modInt = bnpModInt; - // (protected) this % n, n < 2^26 - BigInteger.prototype.modInt = function (n) { - if (n <= 0) { - return 0; - } - var d = this.DV % n; - var r = (this.s < 0) ? n - 1 : 0; - if (this.t > 0) { - if (d == 0) { - r = this[0] % n; - } - else { - for (var i = this.t - 1; i >= 0; --i) { - r = (d * r + this[i]) % n; - } - } - } - return r; - }; - // BigInteger.prototype.millerRabin = bnpMillerRabin; - // (protected) true if probably prime (HAC 4.24, Miller-Rabin) - BigInteger.prototype.millerRabin = function (t) { - var n1 = this.subtract(BigInteger.ONE); - var k = n1.getLowestSetBit(); - if (k <= 0) { - return false; - } - var r = n1.shiftRight(k); - t = (t + 1) >> 1; - if (t > lowprimes.length) { - t = lowprimes.length; - } - var a = nbi(); - for (var i = 0; i < t; ++i) { - // Pick bases at random, instead of starting at 2 - a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]); - var y = a.modPow(r, this); - if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { - var j = 1; - while (j++ < k && y.compareTo(n1) != 0) { - y = y.modPowInt(2, this); - if (y.compareTo(BigInteger.ONE) == 0) { - return false; - } - } - if (y.compareTo(n1) != 0) { - return false; - } - } - } - return true; - }; - // BigInteger.prototype.square = bnSquare; - // (public) this^2 - BigInteger.prototype.square = function () { - var r = nbi(); - this.squareTo(r); - return r; - }; - //#region ASYNC - // Public API method - BigInteger.prototype.gcda = function (a, callback) { - var x = (this.s < 0) ? this.negate() : this.clone(); - var y = (a.s < 0) ? a.negate() : a.clone(); - if (x.compareTo(y) < 0) { - var t = x; - x = y; - y = t; - } - var i = x.getLowestSetBit(); - var g = y.getLowestSetBit(); - if (g < 0) { - callback(x); - return; - } - if (i < g) { - g = i; - } - if (g > 0) { - x.rShiftTo(g, x); - y.rShiftTo(g, y); - } - // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen. - var gcda1 = function () { - if ((i = x.getLowestSetBit()) > 0) { - x.rShiftTo(i, x); - } - if ((i = y.getLowestSetBit()) > 0) { - y.rShiftTo(i, y); - } - if (x.compareTo(y) >= 0) { - x.subTo(y, x); - x.rShiftTo(1, x); - } - else { - y.subTo(x, y); - y.rShiftTo(1, y); - } - if (!(x.signum() > 0)) { - if (g > 0) { - y.lShiftTo(g, y); - } - setTimeout(function () { callback(y); }, 0); // escape - } - else { - setTimeout(gcda1, 0); - } - }; - setTimeout(gcda1, 10); - }; - // (protected) alternate constructor - BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) { - if ("number" == typeof b) { - if (a < 2) { - this.fromInt(1); - } - else { - this.fromNumber(a, c); - if (!this.testBit(a - 1)) { - this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this); - } - if (this.isEven()) { - this.dAddOffset(1, 0); - } - var bnp_1 = this; - var bnpfn1_1 = function () { - bnp_1.dAddOffset(2, 0); - if (bnp_1.bitLength() > a) { - bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1); - } - if (bnp_1.isProbablePrime(b)) { - setTimeout(function () { callback(); }, 0); // escape - } - else { - setTimeout(bnpfn1_1, 0); - } - }; - setTimeout(bnpfn1_1, 0); - } - } - else { - var x = []; - var t = a & 7; - x.length = (a >> 3) + 1; - b.nextBytes(x); - if (t > 0) { - x[0] &= ((1 << t) - 1); - } - else { - x[0] = 0; - } - this.fromString(x, 256); - } - }; - return BigInteger; -}()); -//#region REDUCERS -//#region NullExp -var NullExp = /** @class */ (function () { - function NullExp() { - } - // NullExp.prototype.convert = nNop; - NullExp.prototype.convert = function (x) { - return x; - }; - // NullExp.prototype.revert = nNop; - NullExp.prototype.revert = function (x) { - return x; - }; - // NullExp.prototype.mulTo = nMulTo; - NullExp.prototype.mulTo = function (x, y, r) { - x.multiplyTo(y, r); - }; - // NullExp.prototype.sqrTo = nSqrTo; - NullExp.prototype.sqrTo = function (x, r) { - x.squareTo(r); - }; - return NullExp; -}()); -// Modular reduction using "classic" algorithm -var Classic = /** @class */ (function () { - function Classic(m) { - this.m = m; - } - // Classic.prototype.convert = cConvert; - Classic.prototype.convert = function (x) { - if (x.s < 0 || x.compareTo(this.m) >= 0) { - return x.mod(this.m); - } - else { - return x; - } - }; - // Classic.prototype.revert = cRevert; - Classic.prototype.revert = function (x) { - return x; - }; - // Classic.prototype.reduce = cReduce; - Classic.prototype.reduce = function (x) { - x.divRemTo(this.m, null, x); - }; - // Classic.prototype.mulTo = cMulTo; - Classic.prototype.mulTo = function (x, y, r) { - x.multiplyTo(y, r); - this.reduce(r); - }; - // Classic.prototype.sqrTo = cSqrTo; - Classic.prototype.sqrTo = function (x, r) { - x.squareTo(r); - this.reduce(r); - }; - return Classic; -}()); -//#endregion -//#region Montgomery -// Montgomery reduction -var Montgomery = /** @class */ (function () { - function Montgomery(m) { - this.m = m; - this.mp = m.invDigit(); - this.mpl = this.mp & 0x7fff; - this.mph = this.mp >> 15; - this.um = (1 << (m.DB - 15)) - 1; - this.mt2 = 2 * m.t; - } - // Montgomery.prototype.convert = montConvert; - // xR mod m - Montgomery.prototype.convert = function (x) { - var r = nbi(); - x.abs().dlShiftTo(this.m.t, r); - r.divRemTo(this.m, null, r); - if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) { - this.m.subTo(r, r); - } - return r; - }; - // Montgomery.prototype.revert = montRevert; - // x/R mod m - Montgomery.prototype.revert = function (x) { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; - }; - // Montgomery.prototype.reduce = montReduce; - // x = x/R mod m (HAC 14.32) - Montgomery.prototype.reduce = function (x) { - while (x.t <= this.mt2) { - // pad x so am has enough room later - x[x.t++] = 0; - } - for (var i = 0; i < this.m.t; ++i) { - // faster way of calculating u0 = x[i]*mp mod DV - var j = x[i] & 0x7fff; - var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM; - // use am to combine the multiply-shift-add into one call - j = i + this.m.t; - x[j] += this.m.am(0, u0, x, i, 0, this.m.t); - // propagate carry - while (x[j] >= x.DV) { - x[j] -= x.DV; - x[++j]++; - } - } - x.clamp(); - x.drShiftTo(this.m.t, x); - if (x.compareTo(this.m) >= 0) { - x.subTo(this.m, x); - } - }; - // Montgomery.prototype.mulTo = montMulTo; - // r = "xy/R mod m"; x,y != r - Montgomery.prototype.mulTo = function (x, y, r) { - x.multiplyTo(y, r); - this.reduce(r); - }; - // Montgomery.prototype.sqrTo = montSqrTo; - // r = "x^2/R mod m"; x != r - Montgomery.prototype.sqrTo = function (x, r) { - x.squareTo(r); - this.reduce(r); - }; - return Montgomery; -}()); -//#endregion Montgomery -//#region Barrett -// Barrett modular reduction -var Barrett = /** @class */ (function () { - function Barrett(m) { - this.m = m; - // setup Barrett - this.r2 = nbi(); - this.q3 = nbi(); - BigInteger.ONE.dlShiftTo(2 * m.t, this.r2); - this.mu = this.r2.divide(m); - } - // Barrett.prototype.convert = barrettConvert; - Barrett.prototype.convert = function (x) { - if (x.s < 0 || x.t > 2 * this.m.t) { - return x.mod(this.m); - } - else if (x.compareTo(this.m) < 0) { - return x; - } - else { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; - } - }; - // Barrett.prototype.revert = barrettRevert; - Barrett.prototype.revert = function (x) { - return x; - }; - // Barrett.prototype.reduce = barrettReduce; - // x = x mod m (HAC 14.42) - Barrett.prototype.reduce = function (x) { - x.drShiftTo(this.m.t - 1, this.r2); - if (x.t > this.m.t + 1) { - x.t = this.m.t + 1; - x.clamp(); - } - this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); - this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); - while (x.compareTo(this.r2) < 0) { - x.dAddOffset(1, this.m.t + 1); - } - x.subTo(this.r2, x); - while (x.compareTo(this.m) >= 0) { - x.subTo(this.m, x); - } - }; - // Barrett.prototype.mulTo = barrettMulTo; - // r = x*y mod m; x,y != r - Barrett.prototype.mulTo = function (x, y, r) { - x.multiplyTo(y, r); - this.reduce(r); - }; - // Barrett.prototype.sqrTo = barrettSqrTo; - // r = x^2 mod m; x != r - Barrett.prototype.sqrTo = function (x, r) { - x.squareTo(r); - this.reduce(r); - }; - return Barrett; -}()); -//#endregion -//#endregion REDUCERS -// return new, unset BigInteger -function nbi() { return new BigInteger(null); } -function parseBigInt(str, r) { - return new BigInteger(str, r); -} -// am: Compute w_j += (x*this_i), propagate carries, -// c is initial carry, returns final carry. -// c < 3*dvalue, x < 2*dvalue, this_i < dvalue -// We need to select the fastest one that works in this environment. -// am1: use a single mult and divide to get the high bits, -// max digit bits should be 26 because -// max internal value = 2*dvalue^2-2*dvalue (< 2^53) -function am1(i, x, w, j, c, n) { - while (--n >= 0) { - var v = x * this[i++] + w[j] + c; - c = Math.floor(v / 0x4000000); - w[j++] = v & 0x3ffffff; - } - return c; -} -// am2 avoids a big mult-and-extract completely. -// Max digit bits should be <= 30 because we do bitwise ops -// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) -function am2(i, x, w, j, c, n) { - var xl = x & 0x7fff; - var xh = x >> 15; - while (--n >= 0) { - var l = this[i] & 0x7fff; - var h = this[i++] >> 15; - var m = xh * l + h * xl; - l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff); - c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30); - w[j++] = l & 0x3fffffff; - } - return c; -} -// Alternately, set max digit bits to 28 since some -// browsers slow down when dealing with 32-bit numbers. -function am3(i, x, w, j, c, n) { - var xl = x & 0x3fff; - var xh = x >> 14; - while (--n >= 0) { - var l = this[i] & 0x3fff; - var h = this[i++] >> 14; - var m = xh * l + h * xl; - l = xl * l + ((m & 0x3fff) << 14) + w[j] + c; - c = (l >> 28) + (m >> 14) + xh * h; - w[j++] = l & 0xfffffff; - } - return c; -} -// if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) { -// BigInteger.prototype.am = am2; -// dbits = 30; -// } -// else if (j_lm && (navigator.appName != "Netscape")) { -// BigInteger.prototype.am = am1; -// dbits = 26; -// } -// else { // Mozilla/Netscape seems to prefer am3 -// BigInteger.prototype.am = am3; -// dbits = 28; -// } -BigInteger.prototype.am = am1; -dbits = 26; - -BigInteger.prototype.DB = dbits; -BigInteger.prototype.DM = ((1 << dbits) - 1); -BigInteger.prototype.DV = (1 << dbits); -var BI_FP = 52; -BigInteger.prototype.FV = Math.pow(2, BI_FP); -BigInteger.prototype.F1 = BI_FP - dbits; -BigInteger.prototype.F2 = 2 * dbits - BI_FP; -// Digit conversions -var BI_RC = []; -var rr; -var vv; -rr = "0".charCodeAt(0); -for (vv = 0; vv <= 9; ++vv) { - BI_RC[rr++] = vv; -} -rr = "a".charCodeAt(0); -for (vv = 10; vv < 36; ++vv) { - BI_RC[rr++] = vv; -} -rr = "A".charCodeAt(0); -for (vv = 10; vv < 36; ++vv) { - BI_RC[rr++] = vv; -} -function intAt(s, i) { - var c = BI_RC[s.charCodeAt(i)]; - return (c == null) ? -1 : c; -} -// return bigint initialized to value -function nbv(i) { - var r = nbi(); - r.fromInt(i); - return r; -} -// returns bit length of the integer x -function nbits(x) { - var r = 1; - var t; - if ((t = x >>> 16) != 0) { - x = t; - r += 16; - } - if ((t = x >> 8) != 0) { - x = t; - r += 8; - } - if ((t = x >> 4) != 0) { - x = t; - r += 4; - } - if ((t = x >> 2) != 0) { - x = t; - r += 2; - } - if ((t = x >> 1) != 0) { - x = t; - r += 1; - } - return r; -} -// "constants" -BigInteger.ZERO = nbv(0); -BigInteger.ONE = nbv(1); - -// prng4.js - uses Arcfour as a PRNG -var Arcfour = /** @class */ (function () { - function Arcfour() { - this.i = 0; - this.j = 0; - this.S = []; - } - // Arcfour.prototype.init = ARC4init; - // Initialize arcfour context from key, an array of ints, each from [0..255] - Arcfour.prototype.init = function (key) { - var i; - var j; - var t; - for (i = 0; i < 256; ++i) { - this.S[i] = i; - } - j = 0; - for (i = 0; i < 256; ++i) { - j = (j + this.S[i] + key[i % key.length]) & 255; - t = this.S[i]; - this.S[i] = this.S[j]; - this.S[j] = t; - } - this.i = 0; - this.j = 0; - }; - // Arcfour.prototype.next = ARC4next; - Arcfour.prototype.next = function () { - var t; - 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; - return this.S[(t + this.S[this.i]) & 255]; - }; - return Arcfour; -}()); -// Plug in your RNG constructor here -function prng_newstate() { - return new Arcfour(); -} -// Pool size must be a multiple of 4 and greater than 32. -// An array of bytes the size of the pool will be passed to init() -var rng_psize = 256; - -// Random number generator - requires a PRNG backend, e.g. prng4.js -var rng_state; -var rng_pool = null; -var rng_pptr; -// Initialize the pool with junk if needed. -if (rng_pool == null) { - rng_pool = []; - rng_pptr = 0; - var t = void 0; - if (window.crypto && window.crypto.getRandomValues) { - // Extract entropy (2048 bits) from RNG if available - var z = new Uint32Array(256); - window.crypto.getRandomValues(z); - for (t = 0; t < z.length; ++t) { - rng_pool[rng_pptr++] = z[t] & 255; - } - } - // Use mouse events for entropy, if we do not have enough entropy by the time - // we need it, entropy will be generated by Math.random. - var onMouseMoveListener_1 = function (ev) { - this.count = this.count || 0; - if (this.count >= 256 || rng_pptr >= rng_psize) { - if (window.removeEventListener) { - window.removeEventListener("mousemove", onMouseMoveListener_1, false); - } - else if (window.detachEvent) { - window.detachEvent("onmousemove", onMouseMoveListener_1); - } - return; - } - try { - var mouseCoordinates = ev.x + ev.y; - rng_pool[rng_pptr++] = mouseCoordinates & 255; - this.count += 1; - } - catch (e) { - // Sometimes Firefox will deny permission to access event properties for some reason. Ignore. - } - }; - if (window.addEventListener) { - window.addEventListener("mousemove", onMouseMoveListener_1, false); - } - else if (window.attachEvent) { - window.attachEvent("onmousemove", onMouseMoveListener_1); - } -} -function rng_get_byte() { - if (rng_state == null) { - rng_state = prng_newstate(); - // At this point, we may not have collected enough entropy. If not, fall back to Math.random - while (rng_pptr < rng_psize) { - var random = Math.floor(65536 * Math.random()); - rng_pool[rng_pptr++] = random & 255; - } - rng_state.init(rng_pool); - for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) { - rng_pool[rng_pptr] = 0; - } - rng_pptr = 0; - } - // TODO: allow reseeding after first request - return rng_state.next(); -} -var SecureRandom = /** @class */ (function () { - function SecureRandom() { - } - SecureRandom.prototype.nextBytes = function (ba) { - for (var i = 0; i < ba.length; ++i) { - ba[i] = rng_get_byte(); - } - }; - return SecureRandom; -}()); - -// Depends on jsbn.js and rng.js -// function linebrk(s,n) { -// var ret = ""; -// var i = 0; -// while(i + n < s.length) { -// ret += s.substring(i,i+n) + "\n"; -// i += n; -// } -// return ret + s.substring(i,s.length); -// } -// function byte2Hex(b) { -// if(b < 0x10) -// return "0" + b.toString(16); -// else -// return b.toString(16); -// } -function pkcs1pad1(s, n) { - if (n < s.length + 22) { - console.error("Message too long for RSA"); - return null; - } - var len = n - s.length - 6; - var filler = ""; - for (var f = 0; f < len; f += 2) { - filler += "ff"; - } - var m = "0001" + filler + "00" + s; - return parseBigInt(m, 16); -} -// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint -function pkcs1pad2(s, n) { - if (n < s.length + 11) { // TODO: fix for utf-8 - console.error("Message too long for RSA"); - return null; - } - var ba = []; - var i = s.length - 1; - while (i >= 0 && n > 0) { - var c = s.charCodeAt(i--); - if (c < 128) { // encode using utf-8 - ba[--n] = c; - } - else if ((c > 127) && (c < 2048)) { - ba[--n] = (c & 63) | 128; - ba[--n] = (c >> 6) | 192; - } - else { - ba[--n] = (c & 63) | 128; - ba[--n] = ((c >> 6) & 63) | 128; - ba[--n] = (c >> 12) | 224; - } - } - ba[--n] = 0; - var rng = new SecureRandom(); - var x = []; - while (n > 2) { // random non-zero pad - x[0] = 0; - while (x[0] == 0) { - rng.nextBytes(x); - } - ba[--n] = x[0]; - } - ba[--n] = 2; - ba[--n] = 0; - return new BigInteger(ba); -} -// "empty" RSA key constructor -var RSAKey = /** @class */ (function () { - function RSAKey() { - this.n = null; - this.e = 0; - this.d = null; - this.p = null; - this.q = null; - this.dmp1 = null; - this.dmq1 = null; - this.coeff = null; - } - //#region PROTECTED - // protected - // RSAKey.prototype.doPublic = RSADoPublic; - // Perform raw public operation on "x": return x^e (mod n) - RSAKey.prototype.doPublic = function (x) { - return x.modPowInt(this.e, this.n); - }; - // RSAKey.prototype.doPrivate = RSADoPrivate; - // Perform raw private operation on "x": return x^d (mod n) - RSAKey.prototype.doPrivate = function (x) { - if (this.p == null || this.q == null) { - return x.modPow(this.d, this.n); - } - // TODO: re-calculate any missing CRT params - var xp = x.mod(this.p).modPow(this.dmp1, this.p); - var xq = x.mod(this.q).modPow(this.dmq1, this.q); - while (xp.compareTo(xq) < 0) { - xp = xp.add(this.p); - } - return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq); - }; - //#endregion PROTECTED - //#region PUBLIC - // RSAKey.prototype.setPublic = RSASetPublic; - // Set the public key fields N and e from hex strings - RSAKey.prototype.setPublic = function (N, E) { - if (N != null && E != null && N.length > 0 && E.length > 0) { - this.n = parseBigInt(N, 16); - this.e = parseInt(E, 16); - } - else { - console.error("Invalid RSA public key"); - } - }; - // RSAKey.prototype.encrypt = RSAEncrypt; - // Return the PKCS#1 RSA encryption of "text" as an even-length hex string - RSAKey.prototype.encrypt = function (text) { - var m = pkcs1pad2(text, (this.n.bitLength() + 7) >> 3); - if (m == null) { - return null; - } - var c = this.doPublic(m); - if (c == null) { - return null; - } - var h = c.toString(16); - if ((h.length & 1) == 0) { - return h; - } - else { - return "0" + h; - } - }; - // RSAKey.prototype.setPrivate = RSASetPrivate; - // Set the private key fields N, e, and d from hex strings - RSAKey.prototype.setPrivate = function (N, E, D) { - if (N != null && E != null && N.length > 0 && E.length > 0) { - this.n = parseBigInt(N, 16); - this.e = parseInt(E, 16); - this.d = parseBigInt(D, 16); - } - else { - console.error("Invalid RSA private key"); - } - }; - // RSAKey.prototype.setPrivateEx = RSASetPrivateEx; - // Set the private key fields N, e, d and CRT params from hex strings - RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) { - if (N != null && E != null && N.length > 0 && E.length > 0) { - this.n = parseBigInt(N, 16); - this.e = parseInt(E, 16); - this.d = parseBigInt(D, 16); - this.p = parseBigInt(P, 16); - this.q = parseBigInt(Q, 16); - this.dmp1 = parseBigInt(DP, 16); - this.dmq1 = parseBigInt(DQ, 16); - this.coeff = parseBigInt(C, 16); - } - else { - console.error("Invalid RSA private key"); - } - }; - // RSAKey.prototype.generate = RSAGenerate; - // Generate a new random private key B bits long, using public expt E - RSAKey.prototype.generate = function (B, E) { - var rng = new SecureRandom(); - var qs = B >> 1; - this.e = parseInt(E, 16); - var ee = new BigInteger(E, 16); - for (;;) { - for (;;) { - this.p = new BigInteger(B - qs, 1, rng); - if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) { - break; - } - } - for (;;) { - this.q = new BigInteger(qs, 1, rng); - if (this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) { - break; - } - } - if (this.p.compareTo(this.q) <= 0) { - var t = this.p; - this.p = this.q; - this.q = t; - } - var p1 = this.p.subtract(BigInteger.ONE); - var q1 = this.q.subtract(BigInteger.ONE); - var phi = p1.multiply(q1); - if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) { - this.n = this.p.multiply(this.q); - this.d = ee.modInverse(phi); - this.dmp1 = this.d.mod(p1); - this.dmq1 = this.d.mod(q1); - this.coeff = this.q.modInverse(this.p); - break; - } - } - }; - // RSAKey.prototype.decrypt = RSADecrypt; - // Return the PKCS#1 RSA decryption of "ctext". - // "ctext" is an even-length hex string and the output is a plain string. - RSAKey.prototype.decrypt = function (ctext) { - var c = parseBigInt(ctext, 16); - var m = this.doPrivate(c); - if (m == null) { - return null; - } - return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3); - }; - // Generate a new random private key B bits long, using public expt E - RSAKey.prototype.generateAsync = function (B, E, callback) { - var rng = new SecureRandom(); - var qs = B >> 1; - this.e = parseInt(E, 16); - var ee = new BigInteger(E, 16); - var rsa = this; - // These functions have non-descript names because they were originally for(;;) loops. - // I don't know about cryptography to give them better names than loop1-4. - var loop1 = function () { - var loop4 = function () { - if (rsa.p.compareTo(rsa.q) <= 0) { - var t = rsa.p; - rsa.p = rsa.q; - rsa.q = t; - } - var p1 = rsa.p.subtract(BigInteger.ONE); - var q1 = rsa.q.subtract(BigInteger.ONE); - var phi = p1.multiply(q1); - if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) { - rsa.n = rsa.p.multiply(rsa.q); - rsa.d = ee.modInverse(phi); - rsa.dmp1 = rsa.d.mod(p1); - rsa.dmq1 = rsa.d.mod(q1); - rsa.coeff = rsa.q.modInverse(rsa.p); - setTimeout(function () { callback(); }, 0); // escape - } - else { - setTimeout(loop1, 0); - } - }; - var loop3 = function () { - rsa.q = nbi(); - rsa.q.fromNumberAsync(qs, 1, rng, function () { - rsa.q.subtract(BigInteger.ONE).gcda(ee, function (r) { - if (r.compareTo(BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) { - setTimeout(loop4, 0); - } - else { - setTimeout(loop3, 0); - } - }); - }); - }; - var loop2 = function () { - rsa.p = nbi(); - rsa.p.fromNumberAsync(B - qs, 1, rng, function () { - rsa.p.subtract(BigInteger.ONE).gcda(ee, function (r) { - if (r.compareTo(BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) { - setTimeout(loop3, 0); - } - else { - setTimeout(loop2, 0); - } - }); - }); - }; - setTimeout(loop2, 0); - }; - setTimeout(loop1, 0); - }; - RSAKey.prototype.sign = function (text, digestMethod, digestName) { - var header = getDigestHeader(digestName); - var digest = header + digestMethod(text).toString(); - var m = pkcs1pad1(digest, this.n.bitLength() / 4); - if (m == null) { - return null; - } - var c = this.doPrivate(m); - if (c == null) { - return null; - } - var h = c.toString(16); - if ((h.length & 1) == 0) { - return h; - } - else { - return "0" + h; - } - }; - RSAKey.prototype.verify = function (text, signature, digestMethod) { - var c = parseBigInt(signature, 16); - var m = this.doPublic(c); - if (m == null) { - return null; - } - var unpadded = m.toString(16).replace(/^1f+00/, ""); - var digest = removeDigestHeader(unpadded); - return digest == digestMethod(text).toString(); - }; - return RSAKey; -}()); -// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext -function pkcs1unpad2(d, n) { - var b = d.toByteArray(); - var i = 0; - while (i < b.length && b[i] == 0) { - ++i; - } - if (b.length - i != n - 1 || b[i] != 2) { - return null; - } - ++i; - while (b[i] != 0) { - if (++i >= b.length) { - return null; - } - } - var ret = ""; - while (++i < b.length) { - var c = b[i] & 255; - if (c < 128) { // utf-8 decode - ret += String.fromCharCode(c); - } - else if ((c > 191) && (c < 224)) { - ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63)); - ++i; - } - else { - ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63)); - i += 2; - } - } - return ret; -} -// https://tools.ietf.org/html/rfc3447#page-43 -var DIGEST_HEADERS = { - md2: "3020300c06082a864886f70d020205000410", - md5: "3020300c06082a864886f70d020505000410", - sha1: "3021300906052b0e03021a05000414", - sha224: "302d300d06096086480165030402040500041c", - sha256: "3031300d060960864801650304020105000420", - sha384: "3041300d060960864801650304020205000430", - sha512: "3051300d060960864801650304020305000440", - ripemd160: "3021300906052b2403020105000414", -}; -function getDigestHeader(name) { - return DIGEST_HEADERS[name] || ""; -} -function removeDigestHeader(str) { - for (var name_1 in DIGEST_HEADERS) { - if (DIGEST_HEADERS.hasOwnProperty(name_1)) { - var header = DIGEST_HEADERS[name_1]; - var len = header.length; - if (str.substr(0, len) == header) { - return str.substr(len); - } - } - } - return str; -} -// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string -// function RSAEncryptB64(text) { -// var h = this.encrypt(text); -// if(h) return hex2b64(h); else return null; -// } -// public -// RSAKey.prototype.encrypt_b64 = RSAEncryptB64; - -/*! -Copyright (c) 2011, Yahoo! Inc. All rights reserved. -Code licensed under the BSD License: -http://developer.yahoo.com/yui/license.html -version: 2.9.0 -*/ -var YAHOO = {}; -YAHOO.lang = { - /** - * Utility to set up the prototype, constructor and superclass properties to - * support an inheritance strategy that can chain constructors and methods. - * Static members will not be inherited. - * - * @method extend - * @static - * @param {Function} subc the object to modify - * @param {Function} superc the object to inherit - * @param {Object} overrides additional properties/methods to add to the - * subclass prototype. These will override the - * matching items obtained from the superclass - * if present. - */ - extend: function(subc, superc, overrides) { - if (! superc || ! subc) { - throw new Error("YAHOO.lang.extend failed, please check that " + - "all dependencies are included."); - } - - var F = function() {}; - F.prototype = superc.prototype; - subc.prototype = new F(); - subc.prototype.constructor = subc; - subc.superclass = superc.prototype; - - if (superc.prototype.constructor == Object.prototype.constructor) { - superc.prototype.constructor = superc; - } - - if (overrides) { - var i; - for (i in overrides) { - subc.prototype[i] = overrides[i]; - } - - /* - * IE will not enumerate native functions in a derived object even if the - * function was overridden. This is a workaround for specific functions - * we care about on the Object prototype. - * @property _IEEnumFix - * @param {Function} r the object to receive the augmentation - * @param {Function} s the object that supplies the properties to augment - * @static - * @private - */ - var _IEEnumFix = function() {}, - ADD = ["toString", "valueOf"]; - try { - if (/MSIE/.test(navigator.userAgent)) { - _IEEnumFix = function(r, s) { - for (i = 0; i < ADD.length; i = i + 1) { - var fname = ADD[i], f = s[fname]; - if (typeof f === 'function' && f != Object.prototype[fname]) { - r[fname] = f; - } - } - }; - } - } catch (ex) {} _IEEnumFix(subc.prototype, overrides); - } - } -}; - -/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license - */ - -/** - * @fileOverview - * @name asn1-1.0.js - * @author Kenji Urushima kenji.urushima@gmail.com - * @version asn1 1.0.13 (2017-Jun-02) - * @since jsrsasign 2.1 - * @license MIT License - */ - -/** - * kjur's class library name space - *

- * This name space provides following name spaces: - *

    - *
  • {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
  • - *
  • {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
  • - *
  • {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature - * class and utilities
  • - *
- *

- * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2. - * @name KJUR - * @namespace kjur's class library name space - */ -var KJUR = {}; - -/** - * kjur's ASN.1 class library name space - *

- * This is ITU-T X.690 ASN.1 DER encoder class library and - * class structure and methods is very similar to - * org.bouncycastle.asn1 package of - * well known BouncyCaslte Cryptography Library. - *

PROVIDING ASN.1 PRIMITIVES

- * Here are ASN.1 DER primitive classes. - *
    - *
  • 0x01 {@link KJUR.asn1.DERBoolean}
  • - *
  • 0x02 {@link KJUR.asn1.DERInteger}
  • - *
  • 0x03 {@link KJUR.asn1.DERBitString}
  • - *
  • 0x04 {@link KJUR.asn1.DEROctetString}
  • - *
  • 0x05 {@link KJUR.asn1.DERNull}
  • - *
  • 0x06 {@link KJUR.asn1.DERObjectIdentifier}
  • - *
  • 0x0a {@link KJUR.asn1.DEREnumerated}
  • - *
  • 0x0c {@link KJUR.asn1.DERUTF8String}
  • - *
  • 0x12 {@link KJUR.asn1.DERNumericString}
  • - *
  • 0x13 {@link KJUR.asn1.DERPrintableString}
  • - *
  • 0x14 {@link KJUR.asn1.DERTeletexString}
  • - *
  • 0x16 {@link KJUR.asn1.DERIA5String}
  • - *
  • 0x17 {@link KJUR.asn1.DERUTCTime}
  • - *
  • 0x18 {@link KJUR.asn1.DERGeneralizedTime}
  • - *
  • 0x30 {@link KJUR.asn1.DERSequence}
  • - *
  • 0x31 {@link KJUR.asn1.DERSet}
  • - *
- *

OTHER ASN.1 CLASSES

- *
    - *
  • {@link KJUR.asn1.ASN1Object}
  • - *
  • {@link KJUR.asn1.DERAbstractString}
  • - *
  • {@link KJUR.asn1.DERAbstractTime}
  • - *
  • {@link KJUR.asn1.DERAbstractStructured}
  • - *
  • {@link KJUR.asn1.DERTaggedObject}
  • - *
- *

SUB NAME SPACES

- *
    - *
  • {@link KJUR.asn1.cades} - CAdES long term signature format
  • - *
  • {@link KJUR.asn1.cms} - Cryptographic Message Syntax
  • - *
  • {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
  • - *
  • {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
  • - *
  • {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
  • - *
- *

- * NOTE: Please ignore method summary and document of this namespace. - * This caused by a bug of jsdoc2. - * @name KJUR.asn1 - * @namespace - */ -if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) KJUR.asn1 = {}; - -/** - * ASN1 utilities class - * @name KJUR.asn1.ASN1Util - * @class ASN1 utilities class - * @since asn1 1.0.2 - */ -KJUR.asn1.ASN1Util = new function() { - this.integerToByteHex = function(i) { - var h = i.toString(16); - if ((h.length % 2) == 1) h = '0' + h; - return h; - }; - this.bigIntToMinTwosComplementsHex = function(bigIntegerValue) { - var h = bigIntegerValue.toString(16); - if (h.substr(0, 1) != '-') { - if (h.length % 2 == 1) { - h = '0' + h; - } else { - if (! h.match(/^[0-7]/)) { - h = '00' + h; - } - } - } else { - var hPos = h.substr(1); - var xorLen = hPos.length; - if (xorLen % 2 == 1) { - xorLen += 1; - } else { - if (! h.match(/^[0-7]/)) { - xorLen += 2; - } - } - var hMask = ''; - for (var i = 0; i < xorLen; i++) { - hMask += 'f'; - } - var biMask = new BigInteger(hMask, 16); - var biNeg = biMask.xor(bigIntegerValue).add(BigInteger.ONE); - h = biNeg.toString(16).replace(/^-/, ''); - } - return h; - }; - /** - * get PEM string from hexadecimal data and header string - * @name getPEMStringFromHex - * @memberOf KJUR.asn1.ASN1Util - * @function - * @param {String} dataHex hexadecimal string of PEM body - * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY') - * @return {String} PEM formatted string of input data - * @description - * This method converts a hexadecimal string to a PEM string with - * a specified header. Its line break will be CRLF("\r\n"). - * @example - * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY'); - * // value of pem will be: - * -----BEGIN PRIVATE KEY----- - * YWFh - * -----END PRIVATE KEY----- - */ - this.getPEMStringFromHex = function(dataHex, pemHeader) { - return hextopem(dataHex, pemHeader); - }; - - /** - * generate ASN1Object specifed by JSON parameters - * @name newObject - * @memberOf KJUR.asn1.ASN1Util - * @function - * @param {Array} param JSON parameter to generate ASN1Object - * @return {KJUR.asn1.ASN1Object} generated object - * @since asn1 1.0.3 - * @description - * generate any ASN1Object specified by JSON param - * including ASN.1 primitive or structured. - * Generally 'param' can be described as follows: - *
- * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER} - *
- * 'TYPE-OF-ASN1OBJ' can be one of following symbols: - *
    - *
  • 'bool' - DERBoolean
  • - *
  • 'int' - DERInteger
  • - *
  • 'bitstr' - DERBitString
  • - *
  • 'octstr' - DEROctetString
  • - *
  • 'null' - DERNull
  • - *
  • 'oid' - DERObjectIdentifier
  • - *
  • 'enum' - DEREnumerated
  • - *
  • 'utf8str' - DERUTF8String
  • - *
  • 'numstr' - DERNumericString
  • - *
  • 'prnstr' - DERPrintableString
  • - *
  • 'telstr' - DERTeletexString
  • - *
  • 'ia5str' - DERIA5String
  • - *
  • 'utctime' - DERUTCTime
  • - *
  • 'gentime' - DERGeneralizedTime
  • - *
  • 'seq' - DERSequence
  • - *
  • 'set' - DERSet
  • - *
  • 'tag' - DERTaggedObject
  • - *
- * @example - * newObject({'prnstr': 'aaa'}); - * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]}) - * // ASN.1 Tagged Object - * newObject({'tag': {'tag': 'a1', - * 'explicit': true, - * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}}); - * // more simple representation of ASN.1 Tagged Object - * newObject({'tag': ['a1', - * true, - * {'seq': [ - * {'int': 3}, - * {'prnstr': 'aaa'}]} - * ]}); - */ - this.newObject = function(param) { - var _KJUR = KJUR, - _KJUR_asn1 = _KJUR.asn1, - _DERBoolean = _KJUR_asn1.DERBoolean, - _DERInteger = _KJUR_asn1.DERInteger, - _DERBitString = _KJUR_asn1.DERBitString, - _DEROctetString = _KJUR_asn1.DEROctetString, - _DERNull = _KJUR_asn1.DERNull, - _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, - _DEREnumerated = _KJUR_asn1.DEREnumerated, - _DERUTF8String = _KJUR_asn1.DERUTF8String, - _DERNumericString = _KJUR_asn1.DERNumericString, - _DERPrintableString = _KJUR_asn1.DERPrintableString, - _DERTeletexString = _KJUR_asn1.DERTeletexString, - _DERIA5String = _KJUR_asn1.DERIA5String, - _DERUTCTime = _KJUR_asn1.DERUTCTime, - _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, - _DERSequence = _KJUR_asn1.DERSequence, - _DERSet = _KJUR_asn1.DERSet, - _DERTaggedObject = _KJUR_asn1.DERTaggedObject, - _newObject = _KJUR_asn1.ASN1Util.newObject; - - var keys = Object.keys(param); - if (keys.length != 1) - throw "key of param shall be only one."; - var key = keys[0]; - - if (":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":" + key + ":") == -1) - throw "undefined key: " + key; - - if (key == "bool") return new _DERBoolean(param[key]); - if (key == "int") return new _DERInteger(param[key]); - if (key == "bitstr") return new _DERBitString(param[key]); - if (key == "octstr") return new _DEROctetString(param[key]); - if (key == "null") return new _DERNull(param[key]); - if (key == "oid") return new _DERObjectIdentifier(param[key]); - if (key == "enum") return new _DEREnumerated(param[key]); - if (key == "utf8str") return new _DERUTF8String(param[key]); - if (key == "numstr") return new _DERNumericString(param[key]); - if (key == "prnstr") return new _DERPrintableString(param[key]); - if (key == "telstr") return new _DERTeletexString(param[key]); - if (key == "ia5str") return new _DERIA5String(param[key]); - if (key == "utctime") return new _DERUTCTime(param[key]); - if (key == "gentime") return new _DERGeneralizedTime(param[key]); - - if (key == "seq") { - var paramList = param[key]; - var a = []; - for (var i = 0; i < paramList.length; i++) { - var asn1Obj = _newObject(paramList[i]); - a.push(asn1Obj); - } - return new _DERSequence({'array': a}); - } - - if (key == "set") { - var paramList = param[key]; - var a = []; - for (var i = 0; i < paramList.length; i++) { - var asn1Obj = _newObject(paramList[i]); - a.push(asn1Obj); - } - return new _DERSet({'array': a}); - } - - if (key == "tag") { - var tagParam = param[key]; - if (Object.prototype.toString.call(tagParam) === '[object Array]' && - tagParam.length == 3) { - var obj = _newObject(tagParam[2]); - return new _DERTaggedObject({tag: tagParam[0], - explicit: tagParam[1], - obj: obj}); - } else { - var newParam = {}; - if (tagParam.explicit !== undefined) - newParam.explicit = tagParam.explicit; - if (tagParam.tag !== undefined) - newParam.tag = tagParam.tag; - if (tagParam.obj === undefined) - throw "obj shall be specified for 'tag'."; - newParam.obj = _newObject(tagParam.obj); - return new _DERTaggedObject(newParam); - } - } - }; - - /** - * get encoded hexadecimal string of ASN1Object specifed by JSON parameters - * @name jsonToASN1HEX - * @memberOf KJUR.asn1.ASN1Util - * @function - * @param {Array} param JSON parameter to generate ASN1Object - * @return hexadecimal string of ASN1Object - * @since asn1 1.0.4 - * @description - * As for ASN.1 object representation of JSON object, - * please see {@link newObject}. - * @example - * jsonToASN1HEX({'prnstr': 'aaa'}); - */ - this.jsonToASN1HEX = function(param) { - var asn1Obj = this.newObject(param); - return asn1Obj.getEncodedHex(); - }; -}; - -/** - * get dot noted oid number string from hexadecimal value of OID - * @name oidHexToInt - * @memberOf KJUR.asn1.ASN1Util - * @function - * @param {String} hex hexadecimal value of object identifier - * @return {String} dot noted string of object identifier - * @since jsrsasign 4.8.3 asn1 1.0.7 - * @description - * This static method converts from hexadecimal string representation of - * ASN.1 value of object identifier to oid number string. - * @example - * KJUR.asn1.ASN1Util.oidHexToInt('550406') → "2.5.4.6" - */ -KJUR.asn1.ASN1Util.oidHexToInt = function(hex) { - var s = ""; - var i01 = parseInt(hex.substr(0, 2), 16); - var i0 = Math.floor(i01 / 40); - var i1 = i01 % 40; - var s = i0 + "." + i1; - - var binbuf = ""; - for (var i = 2; i < hex.length; i += 2) { - var value = parseInt(hex.substr(i, 2), 16); - var bin = ("00000000" + value.toString(2)).slice(- 8); - binbuf = binbuf + bin.substr(1, 7); - if (bin.substr(0, 1) == "0") { - var bi = new BigInteger(binbuf, 2); - s = s + "." + bi.toString(10); - binbuf = ""; - } - } - return s; -}; - -/** - * get hexadecimal value of object identifier from dot noted oid value - * @name oidIntToHex - * @memberOf KJUR.asn1.ASN1Util - * @function - * @param {String} oidString dot noted string of object identifier - * @return {String} hexadecimal value of object identifier - * @since jsrsasign 4.8.3 asn1 1.0.7 - * @description - * This static method converts from object identifier value string. - * to hexadecimal string representation of it. - * @example - * KJUR.asn1.ASN1Util.oidIntToHex("2.5.4.6") → "550406" - */ -KJUR.asn1.ASN1Util.oidIntToHex = function(oidString) { - var itox = function(i) { - var h = i.toString(16); - if (h.length == 1) h = '0' + h; - return h; - }; - - var roidtox = function(roid) { - var h = ''; - var bi = new BigInteger(roid, 10); - var b = bi.toString(2); - var padLen = 7 - b.length % 7; - if (padLen == 7) padLen = 0; - var bPad = ''; - for (var i = 0; i < padLen; i++) bPad += '0'; - b = bPad + b; - for (var i = 0; i < b.length - 1; i += 7) { - var b8 = b.substr(i, 7); - if (i != b.length - 7) b8 = '1' + b8; - h += itox(parseInt(b8, 2)); - } - return h; - }; - - if (! oidString.match(/^[0-9.]+$/)) { - throw "malformed oid string: " + oidString; - } - var h = ''; - var a = oidString.split('.'); - var i0 = parseInt(a[0]) * 40 + parseInt(a[1]); - h += itox(i0); - a.splice(0, 2); - for (var i = 0; i < a.length; i++) { - h += roidtox(a[i]); - } - return h; -}; - - -// ******************************************************************** -// Abstract ASN.1 Classes -// ******************************************************************** - -// ******************************************************************** - -/** - * base class for ASN.1 DER encoder object - * @name KJUR.asn1.ASN1Object - * @class base class for ASN.1 DER encoder object - * @property {Boolean} isModified flag whether internal data was changed - * @property {String} hTLV hexadecimal string of ASN.1 TLV - * @property {String} hT hexadecimal string of ASN.1 TLV tag(T) - * @property {String} hL hexadecimal string of ASN.1 TLV length(L) - * @property {String} hV hexadecimal string of ASN.1 TLV value(V) - * @description - */ -KJUR.asn1.ASN1Object = function() { - var hV = ''; - - /** - * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V) - * @name getLengthHexFromValue - * @memberOf KJUR.asn1.ASN1Object# - * @function - * @return {String} hexadecimal string of ASN.1 TLV length(L) - */ - this.getLengthHexFromValue = function() { - if (typeof this.hV == "undefined" || this.hV == null) { - throw "this.hV is null or undefined."; - } - if (this.hV.length % 2 == 1) { - throw "value hex must be even length: n=" + hV.length + ",v=" + this.hV; - } - var n = this.hV.length / 2; - var hN = n.toString(16); - if (hN.length % 2 == 1) { - hN = "0" + hN; - } - if (n < 128) { - return hN; - } else { - var hNlen = hN.length / 2; - if (hNlen > 15) { - throw "ASN.1 length too long to represent by 8x: n = " + n.toString(16); - } - var head = 128 + hNlen; - return head.toString(16) + hN; - } - }; - - /** - * get hexadecimal string of ASN.1 TLV bytes - * @name getEncodedHex - * @memberOf KJUR.asn1.ASN1Object# - * @function - * @return {String} hexadecimal string of ASN.1 TLV - */ - this.getEncodedHex = function() { - if (this.hTLV == null || this.isModified) { - this.hV = this.getFreshValueHex(); - this.hL = this.getLengthHexFromValue(); - this.hTLV = this.hT + this.hL + this.hV; - this.isModified = false; - //alert("first time: " + this.hTLV); - } - return this.hTLV; - }; - - /** - * get hexadecimal string of ASN.1 TLV value(V) bytes - * @name getValueHex - * @memberOf KJUR.asn1.ASN1Object# - * @function - * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes - */ - this.getValueHex = function() { - this.getEncodedHex(); - return this.hV; - }; - - this.getFreshValueHex = function() { - return ''; - }; -}; - -// == BEGIN DERAbstractString ================================================ -/** - * base class for ASN.1 DER string classes - * @name KJUR.asn1.DERAbstractString - * @class base class for ASN.1 DER string classes - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @property {String} s internal string of value - * @extends KJUR.asn1.ASN1Object - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • str - specify initial ASN.1 value(V) by a string
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
- * NOTE: 'params' can be omitted. - */ -KJUR.asn1.DERAbstractString = function(params) { - KJUR.asn1.DERAbstractString.superclass.constructor.call(this); - - /** - * get string value of this string object - * @name getString - * @memberOf KJUR.asn1.DERAbstractString# - * @function - * @return {String} string value of this string object - */ - this.getString = function() { - return this.s; - }; - - /** - * set value by a string - * @name setString - * @memberOf KJUR.asn1.DERAbstractString# - * @function - * @param {String} newS value by a string to set - */ - this.setString = function(newS) { - this.hTLV = null; - this.isModified = true; - this.s = newS; - this.hV = stohex(this.s); - }; - - /** - * set value by a hexadecimal string - * @name setStringHex - * @memberOf KJUR.asn1.DERAbstractString# - * @function - * @param {String} newHexString value by a hexadecimal string to set - */ - this.setStringHex = function(newHexString) { - this.hTLV = null; - this.isModified = true; - this.s = null; - this.hV = newHexString; - }; - - this.getFreshValueHex = function() { - return this.hV; - }; - - if (typeof params != "undefined") { - if (typeof params == "string") { - this.setString(params); - } else if (typeof params['str'] != "undefined") { - this.setString(params['str']); - } else if (typeof params['hex'] != "undefined") { - this.setStringHex(params['hex']); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object); -// == END DERAbstractString ================================================ - -// == BEGIN DERAbstractTime ================================================== -/** - * base class for ASN.1 DER Generalized/UTCTime class - * @name KJUR.asn1.DERAbstractTime - * @class base class for ASN.1 DER Generalized/UTCTime class - * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'}) - * @extends KJUR.asn1.ASN1Object - * @description - * @see KJUR.asn1.ASN1Object - superclass - */ -KJUR.asn1.DERAbstractTime = function(params) { - KJUR.asn1.DERAbstractTime.superclass.constructor.call(this); - - // --- PRIVATE METHODS -------------------- - this.localDateToUTC = function(d) { - utc = d.getTime() + (d.getTimezoneOffset() * 60000); - var utcDate = new Date(utc); - return utcDate; - }; - - /* - * format date string by Data object - * @name formatDate - * @memberOf KJUR.asn1.AbstractTime; - * @param {Date} dateObject - * @param {string} type 'utc' or 'gen' - * @param {boolean} withMillis flag for with millisections or not - * @description - * 'withMillis' flag is supported from asn1 1.0.6. - */ - this.formatDate = function(dateObject, type, withMillis) { - var pad = this.zeroPadding; - var d = this.localDateToUTC(dateObject); - var year = String(d.getFullYear()); - if (type == 'utc') year = year.substr(2, 2); - var month = pad(String(d.getMonth() + 1), 2); - var day = pad(String(d.getDate()), 2); - var hour = pad(String(d.getHours()), 2); - var min = pad(String(d.getMinutes()), 2); - var sec = pad(String(d.getSeconds()), 2); - var s = year + month + day + hour + min + sec; - if (withMillis === true) { - var millis = d.getMilliseconds(); - if (millis != 0) { - var sMillis = pad(String(millis), 3); - sMillis = sMillis.replace(/[0]+$/, ""); - s = s + "." + sMillis; - } - } - return s + "Z"; - }; - - this.zeroPadding = function(s, len) { - if (s.length >= len) return s; - return new Array(len - s.length + 1).join('0') + s; - }; - - // --- PUBLIC METHODS -------------------- - /** - * get string value of this string object - * @name getString - * @memberOf KJUR.asn1.DERAbstractTime# - * @function - * @return {String} string value of this time object - */ - this.getString = function() { - return this.s; - }; - - /** - * set value by a string - * @name setString - * @memberOf KJUR.asn1.DERAbstractTime# - * @function - * @param {String} newS value by a string to set such like "130430235959Z" - */ - this.setString = function(newS) { - this.hTLV = null; - this.isModified = true; - this.s = newS; - this.hV = stohex(newS); - }; - - /** - * set value by a Date object - * @name setByDateValue - * @memberOf KJUR.asn1.DERAbstractTime# - * @function - * @param {Integer} year year of date (ex. 2013) - * @param {Integer} month month of date between 1 and 12 (ex. 12) - * @param {Integer} day day of month - * @param {Integer} hour hours of date - * @param {Integer} min minutes of date - * @param {Integer} sec seconds of date - */ - this.setByDateValue = function(year, month, day, hour, min, sec) { - var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0)); - this.setByDate(dateObject); - }; - - this.getFreshValueHex = function() { - return this.hV; - }; -}; -YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object); -// == END DERAbstractTime ================================================== - -// == BEGIN DERAbstractStructured ============================================ -/** - * base class for ASN.1 DER structured class - * @name KJUR.asn1.DERAbstractStructured - * @class base class for ASN.1 DER structured class - * @property {Array} asn1Array internal array of ASN1Object - * @extends KJUR.asn1.ASN1Object - * @description - * @see KJUR.asn1.ASN1Object - superclass - */ -KJUR.asn1.DERAbstractStructured = function(params) { - KJUR.asn1.DERAbstractString.superclass.constructor.call(this); - - /** - * set value by array of ASN1Object - * @name setByASN1ObjectArray - * @memberOf KJUR.asn1.DERAbstractStructured# - * @function - * @param {array} asn1ObjectArray array of ASN1Object to set - */ - this.setByASN1ObjectArray = function(asn1ObjectArray) { - this.hTLV = null; - this.isModified = true; - this.asn1Array = asn1ObjectArray; - }; - - /** - * append an ASN1Object to internal array - * @name appendASN1Object - * @memberOf KJUR.asn1.DERAbstractStructured# - * @function - * @param {ASN1Object} asn1Object to add - */ - this.appendASN1Object = function(asn1Object) { - this.hTLV = null; - this.isModified = true; - this.asn1Array.push(asn1Object); - }; - - this.asn1Array = new Array(); - if (typeof params != "undefined") { - if (typeof params['array'] != "undefined") { - this.asn1Array = params['array']; - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object); - - -// ******************************************************************** -// ASN.1 Object Classes -// ******************************************************************** - -// ******************************************************************** -/** - * class for ASN.1 DER Boolean - * @name KJUR.asn1.DERBoolean - * @class class for ASN.1 DER Boolean - * @extends KJUR.asn1.ASN1Object - * @description - * @see KJUR.asn1.ASN1Object - superclass +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ -KJUR.asn1.DERBoolean = function() { - KJUR.asn1.DERBoolean.superclass.constructor.call(this); - this.hT = "01"; - this.hTLV = "0101ff"; -}; -YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object); - -// ******************************************************************** -/** - * class for ASN.1 DER Integer - * @name KJUR.asn1.DERInteger - * @class class for ASN.1 DER Integer - * @extends KJUR.asn1.ASN1Object - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • int - specify initial ASN.1 value(V) by integer value
  • - *
  • bigint - specify initial ASN.1 value(V) by BigInteger object
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
- * NOTE: 'params' can be omitted. - */ -KJUR.asn1.DERInteger = function(params) { - KJUR.asn1.DERInteger.superclass.constructor.call(this); - this.hT = "02"; - - /** - * set value by Tom Wu's BigInteger object - * @name setByBigInteger - * @memberOf KJUR.asn1.DERInteger# - * @function - * @param {BigInteger} bigIntegerValue to set - */ - this.setByBigInteger = function(bigIntegerValue) { - this.hTLV = null; - this.isModified = true; - this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue); - }; - - /** - * set value by integer value - * @name setByInteger - * @memberOf KJUR.asn1.DERInteger - * @function - * @param {Integer} integer value to set - */ - this.setByInteger = function(intValue) { - var bi = new BigInteger(String(intValue), 10); - this.setByBigInteger(bi); - }; - - /** - * set value by integer value - * @name setValueHex - * @memberOf KJUR.asn1.DERInteger# - * @function - * @param {String} hexadecimal string of integer value - * @description - *
- * NOTE: Value shall be represented by minimum octet length of - * two's complement representation. - * @example - * new KJUR.asn1.DERInteger(123); - * new KJUR.asn1.DERInteger({'int': 123}); - * new KJUR.asn1.DERInteger({'hex': '1fad'}); - */ - this.setValueHex = function(newHexString) { - this.hV = newHexString; - }; - - this.getFreshValueHex = function() { - return this.hV; - }; - - if (typeof params != "undefined") { - if (typeof params['bigint'] != "undefined") { - this.setByBigInteger(params['bigint']); - } else if (typeof params['int'] != "undefined") { - this.setByInteger(params['int']); - } else if (typeof params == "number") { - this.setByInteger(params); - } else if (typeof params['hex'] != "undefined") { - this.setValueHex(params['hex']); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object); - -// ******************************************************************** -/** - * class for ASN.1 DER encoded BitString primitive - * @name KJUR.asn1.DERBitString - * @class class for ASN.1 DER encoded BitString primitive - * @extends KJUR.asn1.ASN1Object - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • bin - specify binary string (ex. '10111')
  • - *
  • array - specify array of boolean (ex. [true,false,true,true])
  • - *
  • hex - specify hexadecimal string of ASN.1 value(V) including unused bits
  • - *
  • obj - specify {@link KJUR.asn1.ASN1Util.newObject} - * argument for "BitString encapsulates" structure.
  • - *
- * NOTE1: 'params' can be omitted.
- * NOTE2: 'obj' parameter have been supported since - * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
- * @example - * // default constructor - * o = new KJUR.asn1.DERBitString(); - * // initialize with binary string - * o = new KJUR.asn1.DERBitString({bin: "1011"}); - * // initialize with boolean array - * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]}); - * // initialize with hexadecimal string (04 is unused bits) - * o = new KJUR.asn1.DEROctetString({hex: "04bac0"}); - * // initialize with ASN1Util.newObject argument for encapsulated - * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}}); - * // above generates a ASN.1 data like this: - * // BIT STRING, encapsulates { - * // SEQUENCE { - * // INTEGER 3 - * // PrintableString 'aaa' - * // } - * // } - */ -KJUR.asn1.DERBitString = function(params) { - if (params !== undefined && typeof params.obj !== "undefined") { - var o = KJUR.asn1.ASN1Util.newObject(params.obj); - params.hex = "00" + o.getEncodedHex(); - } - KJUR.asn1.DERBitString.superclass.constructor.call(this); - this.hT = "03"; - - /** - * set ASN.1 value(V) by a hexadecimal string including unused bits - * @name setHexValueIncludingUnusedBits - * @memberOf KJUR.asn1.DERBitString# - * @function - * @param {String} newHexStringIncludingUnusedBits - */ - this.setHexValueIncludingUnusedBits = function(newHexStringIncludingUnusedBits) { - this.hTLV = null; - this.isModified = true; - this.hV = newHexStringIncludingUnusedBits; - }; - - /** - * set ASN.1 value(V) by unused bit and hexadecimal string of value - * @name setUnusedBitsAndHexValue - * @memberOf KJUR.asn1.DERBitString# - * @function - * @param {Integer} unusedBits - * @param {String} hValue - */ - this.setUnusedBitsAndHexValue = function(unusedBits, hValue) { - if (unusedBits < 0 || 7 < unusedBits) { - throw "unused bits shall be from 0 to 7: u = " + unusedBits; - } - var hUnusedBits = "0" + unusedBits; - this.hTLV = null; - this.isModified = true; - this.hV = hUnusedBits + hValue; - }; - - /** - * set ASN.1 DER BitString by binary string
- * @name setByBinaryString - * @memberOf KJUR.asn1.DERBitString# - * @function - * @param {String} binaryString binary value string (i.e. '10111') - * @description - * Its unused bits will be calculated automatically by length of - * 'binaryValue'.
- * NOTE: Trailing zeros '0' will be ignored. - * @example - * o = new KJUR.asn1.DERBitString(); - * o.setByBooleanArray("01011"); - */ - this.setByBinaryString = function(binaryString) { - binaryString = binaryString.replace(/0+$/, ''); - var unusedBits = 8 - binaryString.length % 8; - if (unusedBits == 8) unusedBits = 0; - for (var i = 0; i <= unusedBits; i++) { - binaryString += '0'; - } - var h = ''; - for (var i = 0; i < binaryString.length - 1; i += 8) { - var b = binaryString.substr(i, 8); - var x = parseInt(b, 2).toString(16); - if (x.length == 1) x = '0' + x; - h += x; - } - this.hTLV = null; - this.isModified = true; - this.hV = '0' + unusedBits + h; - }; - - /** - * set ASN.1 TLV value(V) by an array of boolean
- * @name setByBooleanArray - * @memberOf KJUR.asn1.DERBitString# - * @function - * @param {array} booleanArray array of boolean (ex. [true, false, true]) - * @description - * NOTE: Trailing falses will be ignored in the ASN.1 DER Object. - * @example - * o = new KJUR.asn1.DERBitString(); - * o.setByBooleanArray([false, true, false, true, true]); - */ - this.setByBooleanArray = function(booleanArray) { - var s = ''; - for (var i = 0; i < booleanArray.length; i++) { - if (booleanArray[i] == true) { - s += '1'; - } else { - s += '0'; - } - } - this.setByBinaryString(s); - }; - - /** - * generate an array of falses with specified length
- * @name newFalseArray - * @memberOf KJUR.asn1.DERBitString - * @function - * @param {Integer} nLength length of array to generate - * @return {array} array of boolean falses - * @description - * This static method may be useful to initialize boolean array. - * @example - * o = new KJUR.asn1.DERBitString(); - * o.newFalseArray(3) → [false, false, false] - */ - this.newFalseArray = function(nLength) { - var a = new Array(nLength); - for (var i = 0; i < nLength; i++) { - a[i] = false; - } - return a; - }; - - this.getFreshValueHex = function() { - return this.hV; - }; - - if (typeof params != "undefined") { - if (typeof params == "string" && params.toLowerCase().match(/^[0-9a-f]+$/)) { - this.setHexValueIncludingUnusedBits(params); - } else if (typeof params['hex'] != "undefined") { - this.setHexValueIncludingUnusedBits(params['hex']); - } else if (typeof params['bin'] != "undefined") { - this.setByBinaryString(params['bin']); - } else if (typeof params['array'] != "undefined") { - this.setByBooleanArray(params['array']); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object); - -// ******************************************************************** -/** - * class for ASN.1 DER OctetString
- * @name KJUR.asn1.DEROctetString - * @class class for ASN.1 DER OctetString - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * This class provides ASN.1 OctetString simple type.
- * Supported "params" attributes are: - *
    - *
  • str - to set a string as a value
  • - *
  • hex - to set a hexadecimal string as a value
  • - *
  • obj - to set a encapsulated ASN.1 value by JSON object - * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
  • - *
- * NOTE: A parameter 'obj' have been supported - * for "OCTET STRING, encapsulates" structure. - * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25). - * @see KJUR.asn1.DERAbstractString - superclass - * @example - * // default constructor - * o = new KJUR.asn1.DEROctetString(); - * // initialize with string - * o = new KJUR.asn1.DEROctetString({str: "aaa"}); - * // initialize with hexadecimal string - * o = new KJUR.asn1.DEROctetString({hex: "616161"}); - * // initialize with ASN1Util.newObject argument - * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}}); - * // above generates a ASN.1 data like this: - * // OCTET STRING, encapsulates { - * // SEQUENCE { - * // INTEGER 3 - * // PrintableString 'aaa' - * // } - * // } - */ -KJUR.asn1.DEROctetString = function(params) { - if (params !== undefined && typeof params.obj !== "undefined") { - var o = KJUR.asn1.ASN1Util.newObject(params.obj); - params.hex = o.getEncodedHex(); - } - KJUR.asn1.DEROctetString.superclass.constructor.call(this, params); - this.hT = "04"; -}; -YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString); - -// ******************************************************************** -/** - * class for ASN.1 DER Null - * @name KJUR.asn1.DERNull - * @class class for ASN.1 DER Null - * @extends KJUR.asn1.ASN1Object - * @description - * @see KJUR.asn1.ASN1Object - superclass - */ -KJUR.asn1.DERNull = function() { - KJUR.asn1.DERNull.superclass.constructor.call(this); - this.hT = "05"; - this.hTLV = "0500"; -}; -YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object); - -// ******************************************************************** -/** - * class for ASN.1 DER ObjectIdentifier - * @name KJUR.asn1.DERObjectIdentifier - * @class class for ASN.1 DER ObjectIdentifier - * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'}) - * @extends KJUR.asn1.ASN1Object - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
- * NOTE: 'params' can be omitted. - */ -KJUR.asn1.DERObjectIdentifier = function(params) { - var itox = function(i) { - var h = i.toString(16); - if (h.length == 1) h = '0' + h; - return h; - }; - var roidtox = function(roid) { - var h = ''; - var bi = new BigInteger(roid, 10); - var b = bi.toString(2); - var padLen = 7 - b.length % 7; - if (padLen == 7) padLen = 0; - var bPad = ''; - for (var i = 0; i < padLen; i++) bPad += '0'; - b = bPad + b; - for (var i = 0; i < b.length - 1; i += 7) { - var b8 = b.substr(i, 7); - if (i != b.length - 7) b8 = '1' + b8; - h += itox(parseInt(b8, 2)); - } - return h; - }; - - KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this); - this.hT = "06"; - - /** - * set value by a hexadecimal string - * @name setValueHex - * @memberOf KJUR.asn1.DERObjectIdentifier# - * @function - * @param {String} newHexString hexadecimal value of OID bytes - */ - this.setValueHex = function(newHexString) { - this.hTLV = null; - this.isModified = true; - this.s = null; - this.hV = newHexString; - }; - - /** - * set value by a OID string
- * @name setValueOidString - * @memberOf KJUR.asn1.DERObjectIdentifier# - * @function - * @param {String} oidString OID string (ex. 2.5.4.13) - * @example - * o = new KJUR.asn1.DERObjectIdentifier(); - * o.setValueOidString("2.5.4.13"); - */ - this.setValueOidString = function(oidString) { - if (! oidString.match(/^[0-9.]+$/)) { - throw "malformed oid string: " + oidString; - } - var h = ''; - var a = oidString.split('.'); - var i0 = parseInt(a[0]) * 40 + parseInt(a[1]); - h += itox(i0); - a.splice(0, 2); - for (var i = 0; i < a.length; i++) { - h += roidtox(a[i]); - } - this.hTLV = null; - this.isModified = true; - this.s = null; - this.hV = h; - }; - - /** - * set value by a OID name - * @name setValueName - * @memberOf KJUR.asn1.DERObjectIdentifier# - * @function - * @param {String} oidName OID name (ex. 'serverAuth') - * @since 1.0.1 - * @description - * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'. - * Otherwise raise error. - * @example - * o = new KJUR.asn1.DERObjectIdentifier(); - * o.setValueName("serverAuth"); - */ - this.setValueName = function(oidName) { - var oid = KJUR.asn1.x509.OID.name2oid(oidName); - if (oid !== '') { - this.setValueOidString(oid); - } else { - throw "DERObjectIdentifier oidName undefined: " + oidName; - } - }; - - this.getFreshValueHex = function() { - return this.hV; - }; - - if (params !== undefined) { - if (typeof params === "string") { - if (params.match(/^[0-2].[0-9.]+$/)) { - this.setValueOidString(params); - } else { - this.setValueName(params); - } - } else if (params.oid !== undefined) { - this.setValueOidString(params.oid); - } else if (params.hex !== undefined) { - this.setValueHex(params.hex); - } else if (params.name !== undefined) { - this.setValueName(params.name); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object); - -// ******************************************************************** -/** - * class for ASN.1 DER Enumerated - * @name KJUR.asn1.DEREnumerated - * @class class for ASN.1 DER Enumerated - * @extends KJUR.asn1.ASN1Object - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • int - specify initial ASN.1 value(V) by integer value
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
- * NOTE: 'params' can be omitted. - * @example - * new KJUR.asn1.DEREnumerated(123); - * new KJUR.asn1.DEREnumerated({int: 123}); - * new KJUR.asn1.DEREnumerated({hex: '1fad'}); - */ -KJUR.asn1.DEREnumerated = function(params) { - KJUR.asn1.DEREnumerated.superclass.constructor.call(this); - this.hT = "0a"; +if (typeof require !== 'undefined') { + Math.random = function() { + const crypto = require('crypto'); + const num = parseInt(crypto.randomBytes(20).toString('hex').substr(0, 14), 16); + return num / Math.pow(10, num.toString().length); + } +} else if (typeof crypto !== 'undefined') { + Math.random = function() { + const numArray = crypto.getRandomValues(new Uint32Array(2)); + const num = numArray[0] * Math.pow(10, numArray[1].toString().length) + numArray[1]; + return num / Math.pow(10, num.toString().length); + } +} +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["JSEncrypt"] = factory(); + else + root["JSEncrypt"] = factory(); +})(window, function() { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ - /** - * set value by Tom Wu's BigInteger object - * @name setByBigInteger - * @memberOf KJUR.asn1.DEREnumerated# - * @function - * @param {BigInteger} bigIntegerValue to set - */ - this.setByBigInteger = function(bigIntegerValue) { - this.hTLV = null; - this.isModified = true; - this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue); - }; +/***/ "./lib/JSEncrypt.js": +/*!**************************!*\ + !*** ./lib/JSEncrypt.js ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - /** - * set value by integer value - * @name setByInteger - * @memberOf KJUR.asn1.DEREnumerated# - * @function - * @param {Integer} integer value to set - */ - this.setByInteger = function(intValue) { - var bi = new BigInteger(String(intValue), 10); - this.setByBigInteger(bi); - }; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* binding */ JSEncrypt)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./JSEncryptRSAKey */ \"./lib/JSEncryptRSAKey.js\");\n/* harmony import */ var _version_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./version.json */ \"./lib/version.json\");\n\n\n\n/**\n *\n * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour\n * possible parameters are:\n * - default_key_size {number} default: 1024 the key size in bit\n * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent\n * - log {boolean} default: false whether log warn/error or not\n * @constructor\n */\nvar JSEncrypt = /** @class */ (function () {\n function JSEncrypt(options) {\n options = options || {};\n this.default_key_size = options.default_key_size ? parseInt(options.default_key_size, 10) : 1024;\n this.default_public_exponent = options.default_public_exponent || \"010001\"; // 65537 default openssl public exponent for rsa key type\n this.log = options.log || false;\n // The private and public key.\n this.key = null;\n }\n /**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\n JSEncrypt.prototype.setKey = function (key) {\n if (this.log && this.key) {\n console.warn(\"A key was already set, overriding existing.\");\n }\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey(key);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPrivateKey = function (privkey) {\n // Create the key.\n this.setKey(privkey);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPublicKey = function (pubkey) {\n // Sets the public key.\n this.setKey(pubkey);\n };\n /**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\n JSEncrypt.prototype.decrypt = function (str) {\n // Return the decrypted string.\n try {\n return this.getKey().decrypt((0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\n JSEncrypt.prototype.encrypt = function (str) {\n // Return the encrypted string.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().encrypt(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's sign.\n * @param {string} str the string to sign\n * @param {function} digestMethod hash method\n * @param {string} digestName the name of the hash algorithm\n * @return {string} the signature encoded in base64\n * @public\n */\n JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {\n // return the RSA signature of 'str' in 'hex' format.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().sign(str, digestMethod, digestName));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's verify.\n * @param {string} str the string to verify\n * @param {string} signature the signature encoded in base64 to compare the string to\n * @param {function} digestMethod hash method\n * @return {boolean} whether the data and signature match\n * @public\n */\n JSEncrypt.prototype.verify = function (str, signature, digestMethod) {\n // Return the decrypted 'digest' of the signature.\n try {\n return this.getKey().verify(str, (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(signature), digestMethod);\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\n JSEncrypt.prototype.getKey = function (cb) {\n // Only create new if it does not exist.\n if (!this.key) {\n // Get a new private key.\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey();\n if (cb && {}.toString.call(cb) === \"[object Function]\") {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\n return;\n }\n // Generate the key.\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateKey();\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateBaseKeyB64();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicKey();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicBaseKeyB64();\n };\n JSEncrypt.version = _version_json__WEBPACK_IMPORTED_MODULE_2__.version;\n return JSEncrypt;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncrypt.js?"); - /** - * set value by integer value - * @name setValueHex - * @memberOf KJUR.asn1.DEREnumerated# - * @function - * @param {String} hexadecimal string of integer value - * @description - *
- * NOTE: Value shall be represented by minimum octet length of - * two's complement representation. - */ - this.setValueHex = function(newHexString) { - this.hV = newHexString; - }; +/***/ }), - this.getFreshValueHex = function() { - return this.hV; - }; +/***/ "./lib/JSEncryptRSAKey.js": +/*!********************************!*\ + !*** ./lib/JSEncryptRSAKey.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - if (typeof params != "undefined") { - if (typeof params['int'] != "undefined") { - this.setByInteger(params['int']); - } else if (typeof params == "number") { - this.setByInteger(params); - } else if (typeof params['hex'] != "undefined") { - this.setValueHex(params['hex']); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncryptRSAKey\": () => (/* binding */ JSEncryptRSAKey)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/asn1js/hex */ \"./lib/lib/asn1js/hex.js\");\n/* harmony import */ var _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/asn1js/base64 */ \"./lib/lib/asn1js/base64.js\");\n/* harmony import */ var _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/asn1js/asn1 */ \"./lib/lib/asn1js/asn1.js\");\n/* harmony import */ var _lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/jsbn/rsa */ \"./lib/lib/jsbn/rsa.js\");\n/* harmony import */ var _lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/jsrsasign/asn1-1.0 */ \"./lib/lib/jsrsasign/asn1-1.0.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n/**\n * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.\n * This object is just a decorator for parsing the key parameter\n * @param {string|Object} key - The key in string format, or an object containing\n * the parameters needed to build a RSAKey object.\n * @constructor\n */\nvar JSEncryptRSAKey = /** @class */ (function (_super) {\n __extends(JSEncryptRSAKey, _super);\n function JSEncryptRSAKey(key) {\n var _this = _super.call(this) || this;\n // Call the super constructor.\n // RSAKey.call(this);\n // If a key key was provided.\n if (key) {\n // If this is a string...\n if (typeof key === \"string\") {\n _this.parseKey(key);\n }\n else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||\n JSEncryptRSAKey.hasPublicKeyProperty(key)) {\n // Set the values for the key.\n _this.parsePropertiesFrom(key);\n }\n }\n return _this;\n }\n /**\n * Method to parse a pem encoded string containing both a public or private key.\n * The method will translate the pem encoded string in a der encoded string and\n * will parse private key and public key parameters. This method accepts public key\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n *\n * @todo Check how many rsa formats use the same format of pkcs #1.\n *\n * The format is defined as:\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * it's possible to examine the structure of the keys obtained from openssl using\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n * @private\n */\n JSEncryptRSAKey.prototype.parseKey = function (pem) {\n try {\n var modulus = 0;\n var public_exponent = 0;\n var reHex = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/;\n var der = reHex.test(pem) ? _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__.Hex.decode(pem) : _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__.Base64.unarmor(pem);\n var asn1 = _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__.ASN1.decode(der);\n // Fixes a bug with OpenSSL 1.0+ private keys\n if (asn1.sub.length === 3) {\n asn1 = asn1.sub[2].sub[0];\n }\n if (asn1.sub.length === 9) {\n // Parse the private key.\n modulus = asn1.sub[1].getHexStringValue(); // bigint\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[2].getHexStringValue(); // int\n this.e = parseInt(public_exponent, 16);\n var private_exponent = asn1.sub[3].getHexStringValue(); // bigint\n this.d = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(private_exponent, 16);\n var prime1 = asn1.sub[4].getHexStringValue(); // bigint\n this.p = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime1, 16);\n var prime2 = asn1.sub[5].getHexStringValue(); // bigint\n this.q = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime2, 16);\n var exponent1 = asn1.sub[6].getHexStringValue(); // bigint\n this.dmp1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent1, 16);\n var exponent2 = asn1.sub[7].getHexStringValue(); // bigint\n this.dmq1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent2, 16);\n var coefficient = asn1.sub[8].getHexStringValue(); // bigint\n this.coeff = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(coefficient, 16);\n }\n else if (asn1.sub.length === 2) {\n // Parse the public key.\n var bit_string = asn1.sub[1];\n var sequence = bit_string.sub[0];\n modulus = sequence.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = sequence.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n else {\n return false;\n }\n return true;\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa key.\n *\n * The translation follow the ASN.1 notation :\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER, -- (inverse of q) mod p\n * }\n * @returns {string} DER Encoded String representing the rsa private key\n * @private\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKey = function () {\n var options = {\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: 0 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.d }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.p }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.q }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmp1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmq1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.coeff })\n ]\n };\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence(options);\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPrivateBaseKey());\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\n * The representation follow the ASN.1 notation :\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * @returns {string} DER Encoded String representing the rsa public key\n * @private\n */\n JSEncryptRSAKey.prototype.getPublicBaseKey = function () {\n var first_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERObjectIdentifier({ oid: \"1.2.840.113549.1.1.1\" }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERNull()\n ]\n });\n var second_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e })\n ]\n });\n var bit_string = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERBitString({\n hex: \"00\" + second_sequence.getEncodedHex()\n });\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n first_sequence,\n bit_string\n ]\n });\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPublicBaseKey());\n };\n /**\n * wrap the string in block of width chars. The default value for rsa keys is 64\n * characters.\n * @param {string} str the pem encoded string without header and footer\n * @param {Number} [width=64] - the length the string has to be wrapped at\n * @returns {string}\n * @private\n */\n JSEncryptRSAKey.wordwrap = function (str, width) {\n width = width || 64;\n if (!str) {\n return str;\n }\n var regex = \"(.{1,\" + width + \"})( +|$\\n?)|(.{1,\" + width + \"})\";\n return str.match(RegExp(regex, \"g\")).join(\"\\n\");\n };\n /**\n * Retrieve the pem encoded private key\n * @returns {string} the pem encoded private key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateKey = function () {\n var key = \"-----BEGIN RSA PRIVATE KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + \"\\n\";\n key += \"-----END RSA PRIVATE KEY-----\";\n return key;\n };\n /**\n * Retrieve the pem encoded public key\n * @returns {string} the pem encoded public key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicKey = function () {\n var key = \"-----BEGIN PUBLIC KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + \"\\n\";\n key += \"-----END PUBLIC KEY-----\";\n return key;\n };\n /**\n * Check if the object contains the necessary parameters to populate the rsa modulus\n * and public exponent parameters.\n * @param {Object} [obj={}] - An object that may contain the two public key\n * parameters\n * @returns {boolean} true if the object contains both the modulus and the public exponent\n * properties (n and e)\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\n * be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPublicKeyProperty = function (obj) {\n obj = obj || {};\n return (obj.hasOwnProperty(\"n\") &&\n obj.hasOwnProperty(\"e\"));\n };\n /**\n * Check if the object contains ALL the parameters of an RSA key.\n * @param {Object} [obj={}] - An object that may contain nine rsa key\n * parameters\n * @returns {boolean} true if the object contains all the parameters needed\n * @todo check for types of the parameters all the parameters but the public exponent\n * should be parseable bigint objects, the public exponent should be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) {\n obj = obj || {};\n return (obj.hasOwnProperty(\"n\") &&\n obj.hasOwnProperty(\"e\") &&\n obj.hasOwnProperty(\"d\") &&\n obj.hasOwnProperty(\"p\") &&\n obj.hasOwnProperty(\"q\") &&\n obj.hasOwnProperty(\"dmp1\") &&\n obj.hasOwnProperty(\"dmq1\") &&\n obj.hasOwnProperty(\"coeff\"));\n };\n /**\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n * include the modulus and public exponent (n, e) parameters.\n * @param {Object} obj - the object containing rsa parameters\n * @private\n */\n JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) {\n this.n = obj.n;\n this.e = obj.e;\n if (obj.hasOwnProperty(\"d\")) {\n this.d = obj.d;\n this.p = obj.p;\n this.q = obj.q;\n this.dmp1 = obj.dmp1;\n this.dmq1 = obj.dmq1;\n this.coeff = obj.coeff;\n }\n };\n return JSEncryptRSAKey;\n}(_lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__.RSAKey));\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncryptRSAKey.js?"); -// ******************************************************************** -/** - * class for ASN.1 DER UTF8String - * @name KJUR.asn1.DERUTF8String - * @class class for ASN.1 DER UTF8String - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * @see KJUR.asn1.DERAbstractString - superclass - */ -KJUR.asn1.DERUTF8String = function(params) { - KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params); - this.hT = "0c"; -}; -YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString); +/***/ }), -// ******************************************************************** -/** - * class for ASN.1 DER NumericString - * @name KJUR.asn1.DERNumericString - * @class class for ASN.1 DER NumericString - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * @see KJUR.asn1.DERAbstractString - superclass - */ -KJUR.asn1.DERNumericString = function(params) { - KJUR.asn1.DERNumericString.superclass.constructor.call(this, params); - this.hT = "12"; -}; -YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString); +/***/ "./lib/index.js": +/*!**********************!*\ + !*** ./lib/index.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -// ******************************************************************** -/** - * class for ASN.1 DER PrintableString - * @name KJUR.asn1.DERPrintableString - * @class class for ASN.1 DER PrintableString - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * @see KJUR.asn1.DERAbstractString - superclass - */ -KJUR.asn1.DERPrintableString = function(params) { - KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params); - this.hT = "13"; -}; -YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* reexport safe */ _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./JSEncrypt */ \"./lib/JSEncrypt.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/index.js?"); -// ******************************************************************** -/** - * class for ASN.1 DER TeletexString - * @name KJUR.asn1.DERTeletexString - * @class class for ASN.1 DER TeletexString - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * @see KJUR.asn1.DERAbstractString - superclass - */ -KJUR.asn1.DERTeletexString = function(params) { - KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params); - this.hT = "14"; -}; -YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString); +/***/ }), -// ******************************************************************** -/** - * class for ASN.1 DER IA5String - * @name KJUR.asn1.DERIA5String - * @class class for ASN.1 DER IA5String - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * @see KJUR.asn1.DERAbstractString - superclass - */ -KJUR.asn1.DERIA5String = function(params) { - KJUR.asn1.DERIA5String.superclass.constructor.call(this, params); - this.hT = "16"; -}; -YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString); +/***/ "./lib/lib/asn1js/asn1.js": +/*!********************************!*\ + !*** ./lib/lib/asn1js/asn1.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -// ******************************************************************** -/** - * class for ASN.1 DER UTCTime - * @name KJUR.asn1.DERUTCTime - * @class class for ASN.1 DER UTCTime - * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'}) - * @extends KJUR.asn1.DERAbstractTime - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
  • date - specify Date object.
  • - *
- * NOTE: 'params' can be omitted. - *

EXAMPLES

- * @example - * d1 = new KJUR.asn1.DERUTCTime(); - * d1.setString('130430125959Z'); - * - * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'}); - * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))}); - * d4 = new KJUR.asn1.DERUTCTime('130430125959Z'); - */ -KJUR.asn1.DERUTCTime = function(params) { - KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params); - this.hT = "17"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Stream\": () => (/* binding */ Stream),\n/* harmony export */ \"ASN1\": () => (/* binding */ ASN1),\n/* harmony export */ \"ASN1Tag\": () => (/* binding */ ASN1Tag)\n/* harmony export */ });\n/* harmony import */ var _int10__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int10 */ \"./lib/lib/asn1js/int10.js\");\n// ASN.1 JavaScript decoder\n// Copyright (c) 2008-2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n/*global oids */\n\nvar ellipsis = \"\\u2026\";\nvar reTimeS = /^(\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nvar reTimeL = /^(\\d\\d\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nfunction stringCut(str, len) {\n if (str.length > len) {\n str = str.substring(0, len) + ellipsis;\n }\n return str;\n}\nvar Stream = /** @class */ (function () {\n function Stream(enc, pos) {\n this.hexDigits = \"0123456789ABCDEF\";\n if (enc instanceof Stream) {\n this.enc = enc.enc;\n this.pos = enc.pos;\n }\n else {\n // enc should be an array or a binary string\n this.enc = enc;\n this.pos = pos;\n }\n }\n Stream.prototype.get = function (pos) {\n if (pos === undefined) {\n pos = this.pos++;\n }\n if (pos >= this.enc.length) {\n throw new Error(\"Requesting byte offset \" + pos + \" on a stream of length \" + this.enc.length);\n }\n return (\"string\" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];\n };\n Stream.prototype.hexByte = function (b) {\n return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);\n };\n Stream.prototype.hexDump = function (start, end, raw) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n if (raw !== true) {\n switch (i & 0xF) {\n case 0x7:\n s += \" \";\n break;\n case 0xF:\n s += \"\\n\";\n break;\n default:\n s += \" \";\n }\n }\n }\n return s;\n };\n Stream.prototype.isASCII = function (start, end) {\n for (var i = start; i < end; ++i) {\n var c = this.get(i);\n if (c < 32 || c > 176) {\n return false;\n }\n }\n return true;\n };\n Stream.prototype.parseStringISO = function (start, end) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += String.fromCharCode(this.get(i));\n }\n return s;\n };\n Stream.prototype.parseStringUTF = function (start, end) {\n var s = \"\";\n for (var i = start; i < end;) {\n var c = this.get(i++);\n if (c < 128) {\n s += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));\n }\n else {\n s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));\n }\n }\n return s;\n };\n Stream.prototype.parseStringBMP = function (start, end) {\n var str = \"\";\n var hi;\n var lo;\n for (var i = start; i < end;) {\n hi = this.get(i++);\n lo = this.get(i++);\n str += String.fromCharCode((hi << 8) | lo);\n }\n return str;\n };\n Stream.prototype.parseTime = function (start, end, shortYear) {\n var s = this.parseStringISO(start, end);\n var m = (shortYear ? reTimeS : reTimeL).exec(s);\n if (!m) {\n return \"Unrecognized time: \" + s;\n }\n if (shortYear) {\n // to avoid querying the timer, use the fixed range [1970, 2069]\n // it will conform with ITU X.400 [-10, +40] sliding window until 2030\n m[1] = +m[1];\n m[1] += (+m[1] < 70) ? 2000 : 1900;\n }\n s = m[1] + \"-\" + m[2] + \"-\" + m[3] + \" \" + m[4];\n if (m[5]) {\n s += \":\" + m[5];\n if (m[6]) {\n s += \":\" + m[6];\n if (m[7]) {\n s += \".\" + m[7];\n }\n }\n }\n if (m[8]) {\n s += \" UTC\";\n if (m[8] != \"Z\") {\n s += m[8];\n if (m[9]) {\n s += \":\" + m[9];\n }\n }\n }\n return s;\n };\n Stream.prototype.parseInteger = function (start, end) {\n var v = this.get(start);\n var neg = (v > 127);\n var pad = neg ? 255 : 0;\n var len;\n var s = \"\";\n // skip unuseful bits (not allowed in DER)\n while (v == pad && ++start < end) {\n v = this.get(start);\n }\n len = end - start;\n if (len === 0) {\n return neg ? -1 : 0;\n }\n // show bit length of huge integers\n if (len > 4) {\n s = v;\n len <<= 3;\n while (((+s ^ pad) & 0x80) == 0) {\n s = +s << 1;\n --len;\n }\n s = \"(\" + len + \" bit)\\n\";\n }\n // decode the integer\n if (neg) {\n v = v - 256;\n }\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10(v);\n for (var i = start + 1; i < end; ++i) {\n n.mulAdd(256, this.get(i));\n }\n return s + n.toString();\n };\n Stream.prototype.parseBitString = function (start, end, maxLength) {\n var unusedBit = this.get(start);\n var lenBit = ((end - start - 1) << 3) - unusedBit;\n var intro = \"(\" + lenBit + \" bit)\\n\";\n var s = \"\";\n for (var i = start + 1; i < end; ++i) {\n var b = this.get(i);\n var skip = (i == end - 1) ? unusedBit : 0;\n for (var j = 7; j >= skip; --j) {\n s += (b >> j) & 1 ? \"1\" : \"0\";\n }\n if (s.length > maxLength) {\n return intro + stringCut(s, maxLength);\n }\n }\n return intro + s;\n };\n Stream.prototype.parseOctetString = function (start, end, maxLength) {\n if (this.isASCII(start, end)) {\n return stringCut(this.parseStringISO(start, end), maxLength);\n }\n var len = end - start;\n var s = \"(\" + len + \" byte)\\n\";\n maxLength /= 2; // we work in bytes\n if (len > maxLength) {\n end = start + maxLength;\n }\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n }\n if (len > maxLength) {\n s += ellipsis;\n }\n return s;\n };\n Stream.prototype.parseOID = function (start, end, maxLength) {\n var s = \"\";\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n var bits = 0;\n for (var i = start; i < end; ++i) {\n var v = this.get(i);\n n.mulAdd(128, v & 0x7F);\n bits += 7;\n if (!(v & 0x80)) { // finished\n if (s === \"\") {\n n = n.simplify();\n if (n instanceof _int10__WEBPACK_IMPORTED_MODULE_0__.Int10) {\n n.sub(80);\n s = \"2.\" + n.toString();\n }\n else {\n var m = n < 80 ? n < 40 ? 0 : 1 : 2;\n s = m + \".\" + (n - m * 40);\n }\n }\n else {\n s += \".\" + n.toString();\n }\n if (s.length > maxLength) {\n return stringCut(s, maxLength);\n }\n n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n bits = 0;\n }\n }\n if (bits > 0) {\n s += \".incomplete\";\n }\n return s;\n };\n return Stream;\n}());\n\nvar ASN1 = /** @class */ (function () {\n function ASN1(stream, header, length, tag, sub) {\n if (!(tag instanceof ASN1Tag)) {\n throw new Error(\"Invalid tag value.\");\n }\n this.stream = stream;\n this.header = header;\n this.length = length;\n this.tag = tag;\n this.sub = sub;\n }\n ASN1.prototype.typeName = function () {\n switch (this.tag.tagClass) {\n case 0: // universal\n switch (this.tag.tagNumber) {\n case 0x00:\n return \"EOC\";\n case 0x01:\n return \"BOOLEAN\";\n case 0x02:\n return \"INTEGER\";\n case 0x03:\n return \"BIT_STRING\";\n case 0x04:\n return \"OCTET_STRING\";\n case 0x05:\n return \"NULL\";\n case 0x06:\n return \"OBJECT_IDENTIFIER\";\n case 0x07:\n return \"ObjectDescriptor\";\n case 0x08:\n return \"EXTERNAL\";\n case 0x09:\n return \"REAL\";\n case 0x0A:\n return \"ENUMERATED\";\n case 0x0B:\n return \"EMBEDDED_PDV\";\n case 0x0C:\n return \"UTF8String\";\n case 0x10:\n return \"SEQUENCE\";\n case 0x11:\n return \"SET\";\n case 0x12:\n return \"NumericString\";\n case 0x13:\n return \"PrintableString\"; // ASCII subset\n case 0x14:\n return \"TeletexString\"; // aka T61String\n case 0x15:\n return \"VideotexString\";\n case 0x16:\n return \"IA5String\"; // ASCII\n case 0x17:\n return \"UTCTime\";\n case 0x18:\n return \"GeneralizedTime\";\n case 0x19:\n return \"GraphicString\";\n case 0x1A:\n return \"VisibleString\"; // ASCII subset\n case 0x1B:\n return \"GeneralString\";\n case 0x1C:\n return \"UniversalString\";\n case 0x1E:\n return \"BMPString\";\n }\n return \"Universal_\" + this.tag.tagNumber.toString();\n case 1:\n return \"Application_\" + this.tag.tagNumber.toString();\n case 2:\n return \"[\" + this.tag.tagNumber.toString() + \"]\"; // Context\n case 3:\n return \"Private_\" + this.tag.tagNumber.toString();\n }\n };\n ASN1.prototype.content = function (maxLength) {\n if (this.tag === undefined) {\n return null;\n }\n if (maxLength === undefined) {\n maxLength = Infinity;\n }\n var content = this.posContent();\n var len = Math.abs(this.length);\n if (!this.tag.isUniversal()) {\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n return this.stream.parseOctetString(content, content + len, maxLength);\n }\n switch (this.tag.tagNumber) {\n case 0x01: // BOOLEAN\n return (this.stream.get(content) === 0) ? \"false\" : \"true\";\n case 0x02: // INTEGER\n return this.stream.parseInteger(content, content + len);\n case 0x03: // BIT_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseBitString(content, content + len, maxLength);\n case 0x04: // OCTET_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseOctetString(content, content + len, maxLength);\n // case 0x05: // NULL\n case 0x06: // OBJECT_IDENTIFIER\n return this.stream.parseOID(content, content + len, maxLength);\n // case 0x07: // ObjectDescriptor\n // case 0x08: // EXTERNAL\n // case 0x09: // REAL\n // case 0x0A: // ENUMERATED\n // case 0x0B: // EMBEDDED_PDV\n case 0x10: // SEQUENCE\n case 0x11: // SET\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n else {\n return \"(no elem)\";\n }\n case 0x0C: // UTF8String\n return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);\n case 0x12: // NumericString\n case 0x13: // PrintableString\n case 0x14: // TeletexString\n case 0x15: // VideotexString\n case 0x16: // IA5String\n // case 0x19: // GraphicString\n case 0x1A: // VisibleString\n // case 0x1B: // GeneralString\n // case 0x1C: // UniversalString\n return stringCut(this.stream.parseStringISO(content, content + len), maxLength);\n case 0x1E: // BMPString\n return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);\n case 0x17: // UTCTime\n case 0x18: // GeneralizedTime\n return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));\n }\n return null;\n };\n ASN1.prototype.toString = function () {\n return this.typeName() + \"@\" + this.stream.pos + \"[header:\" + this.header + \",length:\" + this.length + \",sub:\" + ((this.sub === null) ? \"null\" : this.sub.length) + \"]\";\n };\n ASN1.prototype.toPrettyString = function (indent) {\n if (indent === undefined) {\n indent = \"\";\n }\n var s = indent + this.typeName() + \" @\" + this.stream.pos;\n if (this.length >= 0) {\n s += \"+\";\n }\n s += this.length;\n if (this.tag.tagConstructed) {\n s += \" (constructed)\";\n }\n else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {\n s += \" (encapsulates)\";\n }\n s += \"\\n\";\n if (this.sub !== null) {\n indent += \" \";\n for (var i = 0, max = this.sub.length; i < max; ++i) {\n s += this.sub[i].toPrettyString(indent);\n }\n }\n return s;\n };\n ASN1.prototype.posStart = function () {\n return this.stream.pos;\n };\n ASN1.prototype.posContent = function () {\n return this.stream.pos + this.header;\n };\n ASN1.prototype.posEnd = function () {\n return this.stream.pos + this.header + Math.abs(this.length);\n };\n ASN1.prototype.toHexString = function () {\n return this.stream.hexDump(this.posStart(), this.posEnd(), true);\n };\n ASN1.decodeLength = function (stream) {\n var buf = stream.get();\n var len = buf & 0x7F;\n if (len == buf) {\n return len;\n }\n // no reason to use Int10, as it would be a huge buffer anyways\n if (len > 6) {\n throw new Error(\"Length over 48 bits not supported at position \" + (stream.pos - 1));\n }\n if (len === 0) {\n return null;\n } // undefined\n buf = 0;\n for (var i = 0; i < len; ++i) {\n buf = (buf * 256) + stream.get();\n }\n return buf;\n };\n /**\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\n * @returns {string}\n * @public\n */\n ASN1.prototype.getHexStringValue = function () {\n var hexString = this.toHexString();\n var offset = this.header * 2;\n var length = this.length * 2;\n return hexString.substr(offset, length);\n };\n ASN1.decode = function (str) {\n var stream;\n if (!(str instanceof Stream)) {\n stream = new Stream(str, 0);\n }\n else {\n stream = str;\n }\n var streamStart = new Stream(stream);\n var tag = new ASN1Tag(stream);\n var len = ASN1.decodeLength(stream);\n var start = stream.pos;\n var header = start - streamStart.pos;\n var sub = null;\n var getSub = function () {\n var ret = [];\n if (len !== null) {\n // definite length\n var end = start + len;\n while (stream.pos < end) {\n ret[ret.length] = ASN1.decode(stream);\n }\n if (stream.pos != end) {\n throw new Error(\"Content size is not correct for container starting at offset \" + start);\n }\n }\n else {\n // undefined length\n try {\n for (;;) {\n var s = ASN1.decode(stream);\n if (s.tag.isEOC()) {\n break;\n }\n ret[ret.length] = s;\n }\n len = start - stream.pos; // undefined lengths are represented as negative values\n }\n catch (e) {\n throw new Error(\"Exception while decoding undefined length content: \" + e);\n }\n }\n return ret;\n };\n if (tag.tagConstructed) {\n // must have valid content\n sub = getSub();\n }\n else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {\n // sometimes BitString and OctetString are used to encapsulate ASN.1\n try {\n if (tag.tagNumber == 0x03) {\n if (stream.get() != 0) {\n throw new Error(\"BIT STRINGs with unused bits cannot encapsulate.\");\n }\n }\n sub = getSub();\n for (var i = 0; i < sub.length; ++i) {\n if (sub[i].tag.isEOC()) {\n throw new Error(\"EOC is not supposed to be actual content.\");\n }\n }\n }\n catch (e) {\n // but silently ignore when they don't\n sub = null;\n }\n }\n if (sub === null) {\n if (len === null) {\n throw new Error(\"We can't skip over an invalid tag with undefined length at offset \" + start);\n }\n stream.pos = start + Math.abs(len);\n }\n return new ASN1(streamStart, header, len, tag, sub);\n };\n return ASN1;\n}());\n\nvar ASN1Tag = /** @class */ (function () {\n function ASN1Tag(stream) {\n var buf = stream.get();\n this.tagClass = buf >> 6;\n this.tagConstructed = ((buf & 0x20) !== 0);\n this.tagNumber = buf & 0x1F;\n if (this.tagNumber == 0x1F) { // long tag\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n do {\n buf = stream.get();\n n.mulAdd(128, buf & 0x7F);\n } while (buf & 0x80);\n this.tagNumber = n.simplify();\n }\n }\n ASN1Tag.prototype.isUniversal = function () {\n return this.tagClass === 0x00;\n };\n ASN1Tag.prototype.isEOC = function () {\n return this.tagClass === 0x00 && this.tagNumber === 0x00;\n };\n return ASN1Tag;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/asn1.js?"); - /** - * set value by a Date object
- * @name setByDate - * @memberOf KJUR.asn1.DERUTCTime# - * @function - * @param {Date} dateObject Date object to set ASN.1 value(V) - * @example - * o = new KJUR.asn1.DERUTCTime(); - * o.setByDate(new Date("2016/12/31")); - */ - this.setByDate = function(dateObject) { - this.hTLV = null; - this.isModified = true; - this.date = dateObject; - this.s = this.formatDate(this.date, 'utc'); - this.hV = stohex(this.s); - }; +/***/ }), - this.getFreshValueHex = function() { - if (typeof this.date == "undefined" && typeof this.s == "undefined") { - this.date = new Date(); - this.s = this.formatDate(this.date, 'utc'); - this.hV = stohex(this.s); - } - return this.hV; - }; +/***/ "./lib/lib/asn1js/base64.js": +/*!**********************************!*\ + !*** ./lib/lib/asn1js/base64.js ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - if (params !== undefined) { - if (params.str !== undefined) { - this.setString(params.str); - } else if (typeof params == "string" && params.match(/^[0-9]{12}Z$/)) { - this.setString(params); - } else if (params.hex !== undefined) { - this.setStringHex(params.hex); - } else if (params.date !== undefined) { - this.setByDate(params.date); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Base64\": () => (/* binding */ Base64)\n/* harmony export */ });\n// Base64 JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Base64 = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n var ignore = \"= \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = Object.create(null);\n for (i = 0; i < 64; ++i) {\n decoder[b64.charAt(i)] = i;\n }\n decoder['-'] = 62; //+\n decoder['_'] = 63; //-\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 4) {\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n out[out.length] = bits & 0xFF;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 6;\n }\n }\n switch (char_count) {\n case 1:\n throw new Error(\"Base64 encoding incomplete: at least 2 bits missing\");\n case 2:\n out[out.length] = (bits >> 10);\n break;\n case 3:\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n break;\n }\n return out;\n },\n re: /-----BEGIN [^-]+-----([A-Za-z0-9+\\/=\\s]+)-----END [^-]+-----|begin-base64[^\\n]+\\n([A-Za-z0-9+\\/=\\s]+)====/,\n unarmor: function (a) {\n var m = Base64.re.exec(a);\n if (m) {\n if (m[1]) {\n a = m[1];\n }\n else if (m[2]) {\n a = m[2];\n }\n else {\n throw new Error(\"RegExp out of sync\");\n }\n }\n return Base64.decode(a);\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/base64.js?"); -// ******************************************************************** -/** - * class for ASN.1 DER GeneralizedTime - * @name KJUR.asn1.DERGeneralizedTime - * @class class for ASN.1 DER GeneralizedTime - * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'}) - * @property {Boolean} withMillis flag to show milliseconds or not - * @extends KJUR.asn1.DERAbstractTime - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
  • date - specify Date object.
  • - *
  • millis - specify flag to show milliseconds (from 1.0.6)
  • - *
- * NOTE1: 'params' can be omitted. - * NOTE2: 'withMillis' property is supported from asn1 1.0.6. - */ -KJUR.asn1.DERGeneralizedTime = function(params) { - KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params); - this.hT = "18"; - this.withMillis = false; +/***/ }), - /** - * set value by a Date object - * @name setByDate - * @memberOf KJUR.asn1.DERGeneralizedTime# - * @function - * @param {Date} dateObject Date object to set ASN.1 value(V) - * @example - * When you specify UTC time, use 'Date.UTC' method like this:
- * o1 = new DERUTCTime(); - * o1.setByDate(date); - * - * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59 - */ - this.setByDate = function(dateObject) { - this.hTLV = null; - this.isModified = true; - this.date = dateObject; - this.s = this.formatDate(this.date, 'gen', this.withMillis); - this.hV = stohex(this.s); - }; +/***/ "./lib/lib/asn1js/hex.js": +/*!*******************************!*\ + !*** ./lib/lib/asn1js/hex.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - this.getFreshValueHex = function() { - if (this.date === undefined && this.s === undefined) { - this.date = new Date(); - this.s = this.formatDate(this.date, 'gen', this.withMillis); - this.hV = stohex(this.s); - } - return this.hV; - }; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Hex\": () => (/* binding */ Hex)\n/* harmony export */ });\n// Hex JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Hex = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var hex = \"0123456789ABCDEF\";\n var ignore = \" \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = {};\n for (i = 0; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n hex = hex.toLowerCase();\n for (i = 10; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 2) {\n out[out.length] = bits;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 4;\n }\n }\n if (char_count) {\n throw new Error(\"Hex encoding incomplete: 4 bits missing\");\n }\n return out;\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/hex.js?"); - if (params !== undefined) { - if (params.str !== undefined) { - this.setString(params.str); - } else if (typeof params == "string" && params.match(/^[0-9]{14}Z$/)) { - this.setString(params); - } else if (params.hex !== undefined) { - this.setStringHex(params.hex); - } else if (params.date !== undefined) { - this.setByDate(params.date); - } - if (params.millis === true) { - this.withMillis = true; - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime); +/***/ }), -// ******************************************************************** -/** - * class for ASN.1 DER Sequence - * @name KJUR.asn1.DERSequence - * @class class for ASN.1 DER Sequence - * @extends KJUR.asn1.DERAbstractStructured - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • array - specify array of ASN1Object to set elements of content
  • - *
- * NOTE: 'params' can be omitted. - */ -KJUR.asn1.DERSequence = function(params) { - KJUR.asn1.DERSequence.superclass.constructor.call(this, params); - this.hT = "30"; - this.getFreshValueHex = function() { - var h = ''; - for (var i = 0; i < this.asn1Array.length; i++) { - var asn1Obj = this.asn1Array[i]; - h += asn1Obj.getEncodedHex(); - } - this.hV = h; - return this.hV; - }; -}; -YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured); +/***/ "./lib/lib/asn1js/int10.js": +/*!*********************************!*\ + !*** ./lib/lib/asn1js/int10.js ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -// ******************************************************************** -/** - * class for ASN.1 DER Set - * @name KJUR.asn1.DERSet - * @class class for ASN.1 DER Set - * @extends KJUR.asn1.DERAbstractStructured - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • array - specify array of ASN1Object to set elements of content
  • - *
  • sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
  • - *
- * NOTE1: 'params' can be omitted.
- * NOTE2: sortflag is supported since 1.0.5. - */ -KJUR.asn1.DERSet = function(params) { - KJUR.asn1.DERSet.superclass.constructor.call(this, params); - this.hT = "31"; - this.sortFlag = true; // item shall be sorted only in ASN.1 DER - this.getFreshValueHex = function() { - var a = new Array(); - for (var i = 0; i < this.asn1Array.length; i++) { - var asn1Obj = this.asn1Array[i]; - a.push(asn1Obj.getEncodedHex()); - } - if (this.sortFlag == true) a.sort(); - this.hV = a.join(''); - return this.hV; - }; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Int10\": () => (/* binding */ Int10)\n/* harmony export */ });\n// Big integer base-10 printing library\n// Copyright (c) 2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256\nvar Int10 = /** @class */ (function () {\n function Int10(value) {\n this.buf = [+value || 0];\n }\n Int10.prototype.mulAdd = function (m, c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] * m + c;\n if (t < max) {\n c = 0;\n }\n else {\n c = 0 | (t / max);\n t -= c * max;\n }\n b[i] = t;\n }\n if (c > 0) {\n b[i] = c;\n }\n };\n Int10.prototype.sub = function (c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] - c;\n if (t < 0) {\n t += max;\n c = 1;\n }\n else {\n c = 0;\n }\n b[i] = t;\n }\n while (b[b.length - 1] === 0) {\n b.pop();\n }\n };\n Int10.prototype.toString = function (base) {\n if ((base || 10) != 10) {\n throw new Error(\"only base 10 is supported\");\n }\n var b = this.buf;\n var s = b[b.length - 1].toString();\n for (var i = b.length - 2; i >= 0; --i) {\n s += (max + b[i]).toString().substring(1);\n }\n return s;\n };\n Int10.prototype.valueOf = function () {\n var b = this.buf;\n var v = 0;\n for (var i = b.length - 1; i >= 0; --i) {\n v = v * max + b[i];\n }\n return v;\n };\n Int10.prototype.simplify = function () {\n var b = this.buf;\n return (b.length == 1) ? b[0] : this;\n };\n return Int10;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/int10.js?"); - if (typeof params != "undefined") { - if (typeof params.sortflag != "undefined" && - params.sortflag == false) - this.sortFlag = false; - } -}; -YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured); - -// ******************************************************************** -/** - * class for ASN.1 DER TaggedObject - * @name KJUR.asn1.DERTaggedObject - * @class class for ASN.1 DER TaggedObject - * @extends KJUR.asn1.ASN1Object - * @description - *
- * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object. - * For example, if you find '[1]' tag in a ASN.1 dump, - * 'tagNoHex' will be 'a1'. - *
- * As for optional argument 'params' for constructor, you can specify *ANY* of - * following properties: - *
    - *
  • explicit - specify true if this is explicit tag otherwise false - * (default is 'true').
  • - *
  • tag - specify tag (default is 'a0' which means [0])
  • - *
  • obj - specify ASN1Object which is tagged
  • - *
- * @example - * d1 = new KJUR.asn1.DERUTF8String({'str':'a'}); - * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1}); - * hex = d2.getEncodedHex(); - */ -KJUR.asn1.DERTaggedObject = function(params) { - KJUR.asn1.DERTaggedObject.superclass.constructor.call(this); - this.hT = "a0"; - this.hV = ''; - this.isExplicit = true; - this.asn1Object = null; - - /** - * set value by an ASN1Object - * @name setString - * @memberOf KJUR.asn1.DERTaggedObject# - * @function - * @param {Boolean} isExplicitFlag flag for explicit/implicit tag - * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag - * @param {ASN1Object} asn1Object ASN.1 to encapsulate - */ - this.setASN1Object = function(isExplicitFlag, tagNoHex, asn1Object) { - this.hT = tagNoHex; - this.isExplicit = isExplicitFlag; - this.asn1Object = asn1Object; - if (this.isExplicit) { - this.hV = this.asn1Object.getEncodedHex(); - this.hTLV = null; - this.isModified = true; - } else { - this.hV = null; - this.hTLV = asn1Object.getEncodedHex(); - this.hTLV = this.hTLV.replace(/^../, tagNoHex); - this.isModified = false; - } - }; - - this.getFreshValueHex = function() { - return this.hV; - }; - - if (typeof params != "undefined") { - if (typeof params['tag'] != "undefined") { - this.hT = params['tag']; - } - if (typeof params['explicit'] != "undefined") { - this.isExplicit = params['explicit']; - } - if (typeof params['obj'] != "undefined") { - this.asn1Object = params['obj']; - this.setASN1Object(this.isExplicit, this.hT, this.asn1Object); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object); - -/** - * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object. - * This object is just a decorator for parsing the key parameter - * @param {string|Object} key - The key in string format, or an object containing - * the parameters needed to build a RSAKey object. - * @constructor - */ -var JSEncryptRSAKey = /** @class */ (function (_super) { - __extends(JSEncryptRSAKey, _super); - function JSEncryptRSAKey(key) { - var _this = _super.call(this) || this; - // Call the super constructor. - // RSAKey.call(this); - // If a key key was provided. - if (key) { - // If this is a string... - if (typeof key === "string") { - _this.parseKey(key); - } - else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) || - JSEncryptRSAKey.hasPublicKeyProperty(key)) { - // Set the values for the key. - _this.parsePropertiesFrom(key); - } - } - return _this; - } - /** - * Method to parse a pem encoded string containing both a public or private key. - * The method will translate the pem encoded string in a der encoded string and - * will parse private key and public key parameters. This method accepts public key - * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1). - * - * @todo Check how many rsa formats use the same format of pkcs #1. - * - * The format is defined as: - * PublicKeyInfo ::= SEQUENCE { - * algorithm AlgorithmIdentifier, - * PublicKey BIT STRING - * } - * Where AlgorithmIdentifier is: - * AlgorithmIdentifier ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm - * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1) - * } - * and PublicKey is a SEQUENCE encapsulated in a BIT STRING - * RSAPublicKey ::= SEQUENCE { - * modulus INTEGER, -- n - * publicExponent INTEGER -- e - * } - * it's possible to examine the structure of the keys obtained from openssl using - * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/ - * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer - * @private - */ - JSEncryptRSAKey.prototype.parseKey = function (pem) { - try { - var modulus = 0; - var public_exponent = 0; - var reHex = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/; - var der = reHex.test(pem) ? Hex.decode(pem) : Base64.unarmor(pem); - var asn1 = ASN1.decode(der); - // Fixes a bug with OpenSSL 1.0+ private keys - if (asn1.sub.length === 3) { - asn1 = asn1.sub[2].sub[0]; - } - if (asn1.sub.length === 9) { - // Parse the private key. - modulus = asn1.sub[1].getHexStringValue(); // bigint - this.n = parseBigInt(modulus, 16); - public_exponent = asn1.sub[2].getHexStringValue(); // int - this.e = parseInt(public_exponent, 16); - var private_exponent = asn1.sub[3].getHexStringValue(); // bigint - this.d = parseBigInt(private_exponent, 16); - var prime1 = asn1.sub[4].getHexStringValue(); // bigint - this.p = parseBigInt(prime1, 16); - var prime2 = asn1.sub[5].getHexStringValue(); // bigint - this.q = parseBigInt(prime2, 16); - var exponent1 = asn1.sub[6].getHexStringValue(); // bigint - this.dmp1 = parseBigInt(exponent1, 16); - var exponent2 = asn1.sub[7].getHexStringValue(); // bigint - this.dmq1 = parseBigInt(exponent2, 16); - var coefficient = asn1.sub[8].getHexStringValue(); // bigint - this.coeff = parseBigInt(coefficient, 16); - } - else if (asn1.sub.length === 2) { - // Parse the public key. - var bit_string = asn1.sub[1]; - var sequence = bit_string.sub[0]; - modulus = sequence.sub[0].getHexStringValue(); - this.n = parseBigInt(modulus, 16); - public_exponent = sequence.sub[1].getHexStringValue(); - this.e = parseInt(public_exponent, 16); - } - else { - return false; - } - return true; - } - catch (ex) { - return false; - } - }; - /** - * Translate rsa parameters in a hex encoded string representing the rsa key. - * - * The translation follow the ASN.1 notation : - * RSAPrivateKey ::= SEQUENCE { - * version Version, - * modulus INTEGER, -- n - * publicExponent INTEGER, -- e - * privateExponent INTEGER, -- d - * prime1 INTEGER, -- p - * prime2 INTEGER, -- q - * exponent1 INTEGER, -- d mod (p1) - * exponent2 INTEGER, -- d mod (q-1) - * coefficient INTEGER, -- (inverse of q) mod p - * } - * @returns {string} DER Encoded String representing the rsa private key - * @private - */ - JSEncryptRSAKey.prototype.getPrivateBaseKey = function () { - var options = { - array: [ - new KJUR.asn1.DERInteger({ int: 0 }), - new KJUR.asn1.DERInteger({ bigint: this.n }), - new KJUR.asn1.DERInteger({ int: this.e }), - new KJUR.asn1.DERInteger({ bigint: this.d }), - new KJUR.asn1.DERInteger({ bigint: this.p }), - new KJUR.asn1.DERInteger({ bigint: this.q }), - new KJUR.asn1.DERInteger({ bigint: this.dmp1 }), - new KJUR.asn1.DERInteger({ bigint: this.dmq1 }), - new KJUR.asn1.DERInteger({ bigint: this.coeff }) - ] - }; - var seq = new KJUR.asn1.DERSequence(options); - return seq.getEncodedHex(); - }; - /** - * base64 (pem) encoded version of the DER encoded representation - * @returns {string} pem encoded representation without header and footer - * @public - */ - JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () { - return hex2b64(this.getPrivateBaseKey()); - }; - /** - * Translate rsa parameters in a hex encoded string representing the rsa public key. - * The representation follow the ASN.1 notation : - * PublicKeyInfo ::= SEQUENCE { - * algorithm AlgorithmIdentifier, - * PublicKey BIT STRING - * } - * Where AlgorithmIdentifier is: - * AlgorithmIdentifier ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm - * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1) - * } - * and PublicKey is a SEQUENCE encapsulated in a BIT STRING - * RSAPublicKey ::= SEQUENCE { - * modulus INTEGER, -- n - * publicExponent INTEGER -- e - * } - * @returns {string} DER Encoded String representing the rsa public key - * @private - */ - JSEncryptRSAKey.prototype.getPublicBaseKey = function () { - var first_sequence = new KJUR.asn1.DERSequence({ - array: [ - new KJUR.asn1.DERObjectIdentifier({ oid: "1.2.840.113549.1.1.1" }), - new KJUR.asn1.DERNull() - ] - }); - var second_sequence = new KJUR.asn1.DERSequence({ - array: [ - new KJUR.asn1.DERInteger({ bigint: this.n }), - new KJUR.asn1.DERInteger({ int: this.e }) - ] - }); - var bit_string = new KJUR.asn1.DERBitString({ - hex: "00" + second_sequence.getEncodedHex() - }); - var seq = new KJUR.asn1.DERSequence({ - array: [ - first_sequence, - bit_string - ] - }); - return seq.getEncodedHex(); - }; - /** - * base64 (pem) encoded version of the DER encoded representation - * @returns {string} pem encoded representation without header and footer - * @public - */ - JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () { - return hex2b64(this.getPublicBaseKey()); - }; - /** - * wrap the string in block of width chars. The default value for rsa keys is 64 - * characters. - * @param {string} str the pem encoded string without header and footer - * @param {Number} [width=64] - the length the string has to be wrapped at - * @returns {string} - * @private - */ - JSEncryptRSAKey.wordwrap = function (str, width) { - width = width || 64; - if (!str) { - return str; - } - var regex = "(.{1," + width + "})( +|$\n?)|(.{1," + width + "})"; - return str.match(RegExp(regex, "g")).join("\n"); - }; - /** - * Retrieve the pem encoded private key - * @returns {string} the pem encoded private key with header/footer - * @public - */ - JSEncryptRSAKey.prototype.getPrivateKey = function () { - var key = "-----BEGIN RSA PRIVATE KEY-----\n"; - key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + "\n"; - key += "-----END RSA PRIVATE KEY-----"; - return key; - }; - /** - * Retrieve the pem encoded public key - * @returns {string} the pem encoded public key with header/footer - * @public - */ - JSEncryptRSAKey.prototype.getPublicKey = function () { - var key = "-----BEGIN PUBLIC KEY-----\n"; - key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + "\n"; - key += "-----END PUBLIC KEY-----"; - return key; - }; - /** - * Check if the object contains the necessary parameters to populate the rsa modulus - * and public exponent parameters. - * @param {Object} [obj={}] - An object that may contain the two public key - * parameters - * @returns {boolean} true if the object contains both the modulus and the public exponent - * properties (n and e) - * @todo check for types of n and e. N should be a parseable bigInt object, E should - * be a parseable integer number - * @private - */ - JSEncryptRSAKey.hasPublicKeyProperty = function (obj) { - obj = obj || {}; - return (obj.hasOwnProperty("n") && - obj.hasOwnProperty("e")); - }; - /** - * Check if the object contains ALL the parameters of an RSA key. - * @param {Object} [obj={}] - An object that may contain nine rsa key - * parameters - * @returns {boolean} true if the object contains all the parameters needed - * @todo check for types of the parameters all the parameters but the public exponent - * should be parseable bigint objects, the public exponent should be a parseable integer number - * @private - */ - JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) { - obj = obj || {}; - return (obj.hasOwnProperty("n") && - obj.hasOwnProperty("e") && - obj.hasOwnProperty("d") && - obj.hasOwnProperty("p") && - obj.hasOwnProperty("q") && - obj.hasOwnProperty("dmp1") && - obj.hasOwnProperty("dmq1") && - obj.hasOwnProperty("coeff")); - }; - /** - * Parse the properties of obj in the current rsa object. Obj should AT LEAST - * include the modulus and public exponent (n, e) parameters. - * @param {Object} obj - the object containing rsa parameters - * @private - */ - JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) { - this.n = obj.n; - this.e = obj.e; - if (obj.hasOwnProperty("d")) { - this.d = obj.d; - this.p = obj.p; - this.q = obj.q; - this.dmp1 = obj.dmp1; - this.dmq1 = obj.dmq1; - this.coeff = obj.coeff; - } - }; - return JSEncryptRSAKey; -}(RSAKey)); - -/** - * - * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour - * possible parameters are: - * - default_key_size {number} default: 1024 the key size in bit - * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent - * - log {boolean} default: false whether log warn/error or not - * @constructor - */ -var JSEncrypt = /** @class */ (function () { - function JSEncrypt(options) { - options = options || {}; - this.default_key_size = parseInt(options.default_key_size, 10) || 1024; - this.default_public_exponent = options.default_public_exponent || "010001"; // 65537 default openssl public exponent for rsa key type - this.log = options.log || false; - // The private and public key. - this.key = null; - } - /** - * Method to set the rsa key parameter (one method is enough to set both the public - * and the private key, since the private key contains the public key paramenters) - * Log a warning if logs are enabled - * @param {Object|string} key the pem encoded string or an object (with or without header/footer) - * @public - */ - JSEncrypt.prototype.setKey = function (key) { - if (this.log && this.key) { - console.warn("A key was already set, overriding existing."); - } - this.key = new JSEncryptRSAKey(key); - }; - /** - * Proxy method for setKey, for api compatibility - * @see setKey - * @public - */ - JSEncrypt.prototype.setPrivateKey = function (privkey) { - // Create the key. - this.setKey(privkey); - }; - /** - * Proxy method for setKey, for api compatibility - * @see setKey - * @public - */ - JSEncrypt.prototype.setPublicKey = function (pubkey) { - // Sets the public key. - this.setKey(pubkey); - }; - /** - * Proxy method for RSAKey object's decrypt, decrypt the string using the private - * components of the rsa key object. Note that if the object was not set will be created - * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor - * @param {string} str base64 encoded crypted string to decrypt - * @return {string} the decrypted string - * @public - */ - JSEncrypt.prototype.decrypt = function (str) { - // Return the decrypted string. - try { - return this.getKey().decrypt(b64tohex(str)); - } - catch (ex) { - return false; - } - }; - /** - * Proxy method for RSAKey object's encrypt, encrypt the string using the public - * components of the rsa key object. Note that if the object was not set will be created - * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor - * @param {string} str the string to encrypt - * @return {string} the encrypted string encoded in base64 - * @public - */ - JSEncrypt.prototype.encrypt = function (str) { - // Return the encrypted string. - try { - return hex2b64(this.getKey().encrypt(str)); - } - catch (ex) { - return false; - } - }; - /** - * Proxy method for RSAKey object's sign. - * @param {string} str the string to sign - * @param {function} digestMethod hash method - * @param {string} digestName the name of the hash algorithm - * @return {string} the signature encoded in base64 - * @public - */ - JSEncrypt.prototype.sign = function (str, digestMethod, digestName) { - // return the RSA signature of 'str' in 'hex' format. - try { - return hex2b64(this.getKey().sign(str, digestMethod, digestName)); - } - catch (ex) { - return false; - } - }; - /** - * Proxy method for RSAKey object's verify. - * @param {string} str the string to verify - * @param {string} signature the signature encoded in base64 to compare the string to - * @param {function} digestMethod hash method - * @return {boolean} whether the data and signature match - * @public - */ - JSEncrypt.prototype.verify = function (str, signature, digestMethod) { - // Return the decrypted 'digest' of the signature. - try { - return this.getKey().verify(str, b64tohex(signature), digestMethod); - } - catch (ex) { - return false; - } - }; - /** - * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object - * will be created and returned - * @param {callback} [cb] the callback to be called if we want the key to be generated - * in an async fashion - * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object - * @public - */ - JSEncrypt.prototype.getKey = function (cb) { - // Only create new if it does not exist. - if (!this.key) { - // Get a new private key. - this.key = new JSEncryptRSAKey(); - if (cb && {}.toString.call(cb) === "[object Function]") { - this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb); - return; - } - // Generate the key. - this.key.generate(this.default_key_size, this.default_public_exponent); - } - return this.key; - }; - /** - * Returns the pem encoded representation of the private key - * If the key doesn't exists a new key will be created - * @returns {string} pem encoded representation of the private key WITH header and footer - * @public - */ - JSEncrypt.prototype.getPrivateKey = function () { - // Return the private representation of this key. - return this.getKey().getPrivateKey(); - }; - /** - * Returns the pem encoded representation of the private key - * If the key doesn't exists a new key will be created - * @returns {string} pem encoded representation of the private key WITHOUT header and footer - * @public - */ - JSEncrypt.prototype.getPrivateKeyB64 = function () { - // Return the private representation of this key. - return this.getKey().getPrivateBaseKeyB64(); - }; - /** - * Returns the pem encoded representation of the public key - * If the key doesn't exists a new key will be created - * @returns {string} pem encoded representation of the public key WITH header and footer - * @public - */ - JSEncrypt.prototype.getPublicKey = function () { - // Return the private representation of this key. - return this.getKey().getPublicKey(); - }; - /** - * Returns the pem encoded representation of the public key - * If the key doesn't exists a new key will be created - * @returns {string} pem encoded representation of the public key WITHOUT header and footer - * @public - */ - JSEncrypt.prototype.getPublicKeyB64 = function () { - // Return the private representation of this key. - return this.getKey().getPublicBaseKeyB64(); - }; - JSEncrypt.version = "3.0.0-rc.1"; - return JSEncrypt; -}()); +/***/ }), -window.JSEncrypt = JSEncrypt; +/***/ "./lib/lib/jsbn/base64.js": +/*!********************************!*\ + !*** ./lib/lib/jsbn/base64.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -exports.JSEncrypt = JSEncrypt; -exports.default = JSEncrypt; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"hex2b64\": () => (/* binding */ hex2b64),\n/* harmony export */ \"b64tohex\": () => (/* binding */ b64tohex),\n/* harmony export */ \"b64toBA\": () => (/* binding */ b64toBA)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n\nvar b64map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar b64pad = \"=\";\nfunction hex2b64(h) {\n var i;\n var c;\n var ret = \"\";\n for (i = 0; i + 3 <= h.length; i += 3) {\n c = parseInt(h.substring(i, i + 3), 16);\n ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);\n }\n if (i + 1 == h.length) {\n c = parseInt(h.substring(i, i + 1), 16);\n ret += b64map.charAt(c << 2);\n }\n else if (i + 2 == h.length) {\n c = parseInt(h.substring(i, i + 2), 16);\n ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);\n }\n while ((ret.length & 3) > 0) {\n ret += b64pad;\n }\n return ret;\n}\n// convert a base64 string to hex\nfunction b64tohex(s) {\n var ret = \"\";\n var i;\n var k = 0; // b64 state, 0-3\n var slop = 0;\n for (i = 0; i < s.length; ++i) {\n if (s.charAt(i) == b64pad) {\n break;\n }\n var v = b64map.indexOf(s.charAt(i));\n if (v < 0) {\n continue;\n }\n if (k == 0) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 1;\n }\n else if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n slop = v & 0xf;\n k = 2;\n }\n else if (k == 2) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop);\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 3;\n }\n else {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v & 0xf);\n k = 0;\n }\n }\n if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop << 2);\n }\n return ret;\n}\n// convert a base64 string to a byte/number array\nfunction b64toBA(s) {\n // piggyback on b64tohex for now, optimize later\n var h = b64tohex(s);\n var i;\n var a = [];\n for (i = 0; 2 * i < h.length; ++i) {\n a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);\n }\n return a;\n}\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/base64.js?"); -Object.defineProperty(exports, '__esModule', { value: true }); +/***/ }), -}))); +/***/ "./lib/lib/jsbn/jsbn.js": +/*!******************************!*\ + !*** ./lib/lib/jsbn/jsbn.js ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BigInteger\": () => (/* binding */ BigInteger),\n/* harmony export */ \"nbi\": () => (/* binding */ nbi),\n/* harmony export */ \"parseBigInt\": () => (/* binding */ parseBigInt),\n/* harmony export */ \"intAt\": () => (/* binding */ intAt),\n/* harmony export */ \"nbv\": () => (/* binding */ nbv),\n/* harmony export */ \"nbits\": () => (/* binding */ nbits)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n// Bits per digit\nvar dbits;\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary & 0xffffff) == 0xefcafe);\n//#region\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\n//#endregion\n// (public) Constructor\nvar BigInteger = /** @class */ (function () {\n function BigInteger(a, b, c) {\n if (a != null) {\n if (\"number\" == typeof a) {\n this.fromNumber(a, b, c);\n }\n else if (b == null && \"string\" != typeof a) {\n this.fromString(a, 256);\n }\n else {\n this.fromString(a, b);\n }\n }\n }\n //#region PUBLIC\n // BigInteger.prototype.toString = bnToString;\n // (public) return string representation in given radix\n BigInteger.prototype.toString = function (b) {\n if (this.s < 0) {\n return \"-\" + this.negate().toString(b);\n }\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n return this.toRadix(b);\n }\n var km = (1 << k) - 1;\n var d;\n var m = false;\n var r = \"\";\n var i = this.t;\n var p = this.DB - (i * this.DB) % k;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & ((1 << p) - 1)) << (k - p);\n d |= this[--i] >> (p += this.DB - k);\n }\n else {\n d = (this[i] >> (p -= k)) & km;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if (d > 0) {\n m = true;\n }\n if (m) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n }\n }\n return m ? r : \"0\";\n };\n // BigInteger.prototype.negate = bnNegate;\n // (public) -this\n BigInteger.prototype.negate = function () {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n };\n // BigInteger.prototype.abs = bnAbs;\n // (public) |this|\n BigInteger.prototype.abs = function () {\n return (this.s < 0) ? this.negate() : this;\n };\n // BigInteger.prototype.compareTo = bnCompareTo;\n // (public) return + if this > a, - if this < a, 0 if equal\n BigInteger.prototype.compareTo = function (a) {\n var r = this.s - a.s;\n if (r != 0) {\n return r;\n }\n var i = this.t;\n r = i - a.t;\n if (r != 0) {\n return (this.s < 0) ? -r : r;\n }\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) {\n return r;\n }\n }\n return 0;\n };\n // BigInteger.prototype.bitLength = bnBitLength;\n // (public) return the number of bits in \"this\"\n BigInteger.prototype.bitLength = function () {\n if (this.t <= 0) {\n return 0;\n }\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\n };\n // BigInteger.prototype.mod = bnMod;\n // (public) this mod a\n BigInteger.prototype.mod = function (a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n a.subTo(r, r);\n }\n return r;\n };\n // BigInteger.prototype.modPowInt = bnModPowInt;\n // (public) this^e % m, 0 <= e < 2^32\n BigInteger.prototype.modPowInt = function (e, m) {\n var z;\n if (e < 256 || m.isEven()) {\n z = new Classic(m);\n }\n else {\n z = new Montgomery(m);\n }\n return this.exp(e, z);\n };\n // BigInteger.prototype.clone = bnClone;\n // (public)\n BigInteger.prototype.clone = function () {\n var r = nbi();\n this.copyTo(r);\n return r;\n };\n // BigInteger.prototype.intValue = bnIntValue;\n // (public) return value as integer\n BigInteger.prototype.intValue = function () {\n if (this.s < 0) {\n if (this.t == 1) {\n return this[0] - this.DV;\n }\n else if (this.t == 0) {\n return -1;\n }\n }\n else if (this.t == 1) {\n return this[0];\n }\n else if (this.t == 0) {\n return 0;\n }\n // assumes 16 < DB < 32\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\n };\n // BigInteger.prototype.byteValue = bnByteValue;\n // (public) return value as byte\n BigInteger.prototype.byteValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\n };\n // BigInteger.prototype.shortValue = bnShortValue;\n // (public) return value as short (assumes DB>=16)\n BigInteger.prototype.shortValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\n };\n // BigInteger.prototype.signum = bnSigNum;\n // (public) 0 if this == 0, 1 if this > 0\n BigInteger.prototype.signum = function () {\n if (this.s < 0) {\n return -1;\n }\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {\n return 0;\n }\n else {\n return 1;\n }\n };\n // BigInteger.prototype.toByteArray = bnToByteArray;\n // (public) convert to bigendian byte array\n BigInteger.prototype.toByteArray = function () {\n var i = this.t;\n var r = [];\n r[0] = this.s;\n var p = this.DB - (i * this.DB) % 8;\n var d;\n var k = 0;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {\n r[k++] = d | (this.s << (this.DB - p));\n }\n while (i >= 0) {\n if (p < 8) {\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\n d |= this[--i] >> (p += this.DB - 8);\n }\n else {\n d = (this[i] >> (p -= 8)) & 0xff;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if ((d & 0x80) != 0) {\n d |= -256;\n }\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) {\n ++k;\n }\n if (k > 0 || d != this.s) {\n r[k++] = d;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.equals = bnEquals;\n BigInteger.prototype.equals = function (a) {\n return (this.compareTo(a) == 0);\n };\n // BigInteger.prototype.min = bnMin;\n BigInteger.prototype.min = function (a) {\n return (this.compareTo(a) < 0) ? this : a;\n };\n // BigInteger.prototype.max = bnMax;\n BigInteger.prototype.max = function (a) {\n return (this.compareTo(a) > 0) ? this : a;\n };\n // BigInteger.prototype.and = bnAnd;\n BigInteger.prototype.and = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_and, r);\n return r;\n };\n // BigInteger.prototype.or = bnOr;\n BigInteger.prototype.or = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_or, r);\n return r;\n };\n // BigInteger.prototype.xor = bnXor;\n BigInteger.prototype.xor = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_xor, r);\n return r;\n };\n // BigInteger.prototype.andNot = bnAndNot;\n BigInteger.prototype.andNot = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_andnot, r);\n return r;\n };\n // BigInteger.prototype.not = bnNot;\n // (public) ~this\n BigInteger.prototype.not = function () {\n var r = nbi();\n for (var i = 0; i < this.t; ++i) {\n r[i] = this.DM & ~this[i];\n }\n r.t = this.t;\n r.s = ~this.s;\n return r;\n };\n // BigInteger.prototype.shiftLeft = bnShiftLeft;\n // (public) this << n\n BigInteger.prototype.shiftLeft = function (n) {\n var r = nbi();\n if (n < 0) {\n this.rShiftTo(-n, r);\n }\n else {\n this.lShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.shiftRight = bnShiftRight;\n // (public) this >> n\n BigInteger.prototype.shiftRight = function (n) {\n var r = nbi();\n if (n < 0) {\n this.lShiftTo(-n, r);\n }\n else {\n this.rShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n // (public) returns index of lowest 1-bit (or -1 if none)\n BigInteger.prototype.getLowestSetBit = function () {\n for (var i = 0; i < this.t; ++i) {\n if (this[i] != 0) {\n return i * this.DB + (0,_util__WEBPACK_IMPORTED_MODULE_0__.lbit)(this[i]);\n }\n }\n if (this.s < 0) {\n return this.t * this.DB;\n }\n return -1;\n };\n // BigInteger.prototype.bitCount = bnBitCount;\n // (public) return number of set bits\n BigInteger.prototype.bitCount = function () {\n var r = 0;\n var x = this.s & this.DM;\n for (var i = 0; i < this.t; ++i) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.cbit)(this[i] ^ x);\n }\n return r;\n };\n // BigInteger.prototype.testBit = bnTestBit;\n // (public) true iff nth bit is set\n BigInteger.prototype.testBit = function (n) {\n var j = Math.floor(n / this.DB);\n if (j >= this.t) {\n return (this.s != 0);\n }\n return ((this[j] & (1 << (n % this.DB))) != 0);\n };\n // BigInteger.prototype.setBit = bnSetBit;\n // (public) this | (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n var j = e.t - 1;\n var w;\n var is1 = true;\n var r2 = nbi();\n var t;\n i = nbits(e[j]) - 1;\n while (j >= 0) {\n if (i >= k1) {\n w = (e[j] >> (i - k1)) & km;\n }\n else {\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\n if (j > 0) {\n w |= e[j - 1] >> (this.DB + i - k1);\n }\n }\n n = k;\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n if (is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n if (n > 0) {\n z.sqrTo(r, r2);\n }\n else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.modInverse = bnModInverse;\n // (public) 1/this % m (HAC 14.61)\n BigInteger.prototype.modInverse = function (m) {\n var ac = m.isEven();\n if ((this.isEven() && ac) || m.signum() == 0) {\n return BigInteger.ZERO;\n }\n var u = m.clone();\n var v = this.clone();\n var a = nbv(1);\n var b = nbv(0);\n var c = nbv(0);\n var d = nbv(1);\n while (u.signum() != 0) {\n while (u.isEven()) {\n u.rShiftTo(1, u);\n if (ac) {\n if (!a.isEven() || !b.isEven()) {\n a.addTo(this, a);\n b.subTo(m, b);\n }\n a.rShiftTo(1, a);\n }\n else if (!b.isEven()) {\n b.subTo(m, b);\n }\n b.rShiftTo(1, b);\n }\n while (v.isEven()) {\n v.rShiftTo(1, v);\n if (ac) {\n if (!c.isEven() || !d.isEven()) {\n c.addTo(this, c);\n d.subTo(m, d);\n }\n c.rShiftTo(1, c);\n }\n else if (!d.isEven()) {\n d.subTo(m, d);\n }\n d.rShiftTo(1, d);\n }\n if (u.compareTo(v) >= 0) {\n u.subTo(v, u);\n if (ac) {\n a.subTo(c, a);\n }\n b.subTo(d, b);\n }\n else {\n v.subTo(u, v);\n if (ac) {\n c.subTo(a, c);\n }\n d.subTo(b, d);\n }\n }\n if (v.compareTo(BigInteger.ONE) != 0) {\n return BigInteger.ZERO;\n }\n if (d.compareTo(m) >= 0) {\n return d.subtract(m);\n }\n if (d.signum() < 0) {\n d.addTo(m, d);\n }\n else {\n return d;\n }\n if (d.signum() < 0) {\n return d.add(m);\n }\n else {\n return d;\n }\n };\n // BigInteger.prototype.pow = bnPow;\n // (public) this^e\n BigInteger.prototype.pow = function (e) {\n return this.exp(e, new NullExp());\n };\n // BigInteger.prototype.gcd = bnGCD;\n // (public) gcd(this,a) (HAC 14.54)\n BigInteger.prototype.gcd = function (a) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n return x;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n while (x.signum() > 0) {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n }\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n return y;\n };\n // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n // (public) test primality with certainty >= 1-.5^t\n BigInteger.prototype.isProbablePrime = function (t) {\n var i;\n var x = this.abs();\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\n for (i = 0; i < lowprimes.length; ++i) {\n if (x[0] == lowprimes[i]) {\n return true;\n }\n }\n return false;\n }\n if (x.isEven()) {\n return false;\n }\n i = 1;\n while (i < lowprimes.length) {\n var m = lowprimes[i];\n var j = i + 1;\n while (j < lowprimes.length && m < lplim) {\n m *= lowprimes[j++];\n }\n m = x.modInt(m);\n while (i < j) {\n if (m % lowprimes[i++] == 0) {\n return false;\n }\n }\n }\n return x.millerRabin(t);\n };\n //#endregion PUBLIC\n //#region PROTECTED\n // BigInteger.prototype.copyTo = bnpCopyTo;\n // (protected) copy this to r\n BigInteger.prototype.copyTo = function (r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n r.t = this.t;\n r.s = this.s;\n };\n // BigInteger.prototype.fromInt = bnpFromInt;\n // (protected) set from integer value x, -DV <= x < DV\n BigInteger.prototype.fromInt = function (x) {\n this.t = 1;\n this.s = (x < 0) ? -1 : 0;\n if (x > 0) {\n this[0] = x;\n }\n else if (x < -1) {\n this[0] = x + this.DV;\n }\n else {\n this.t = 0;\n }\n };\n // BigInteger.prototype.fromString = bnpFromString;\n // (protected) set from string and radix\n BigInteger.prototype.fromString = function (s, b) {\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 256) {\n k = 8;\n /* byte array */\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n this.fromRadix(s, b);\n return;\n }\n this.t = 0;\n this.s = 0;\n var i = s.length;\n var mi = false;\n var sh = 0;\n while (--i >= 0) {\n var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\") {\n mi = true;\n }\n continue;\n }\n mi = false;\n if (sh == 0) {\n this[this.t++] = x;\n }\n else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\n this[this.t++] = (x >> (this.DB - sh));\n }\n else {\n this[this.t - 1] |= x << sh;\n }\n sh += k;\n if (sh >= this.DB) {\n sh -= this.DB;\n }\n }\n if (k == 8 && ((+s[0]) & 0x80) != 0) {\n this.s = -1;\n if (sh > 0) {\n this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\n }\n }\n this.clamp();\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.clamp = bnpClamp;\n // (protected) clamp off excess high words\n BigInteger.prototype.clamp = function () {\n var c = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n };\n // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n // (protected) r = this << n*DB\n BigInteger.prototype.dlShiftTo = function (n, r) {\n var i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r.t = this.t + n;\n r.s = this.s;\n };\n // BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n // (protected) r = this >> n*DB\n BigInteger.prototype.drShiftTo = function (n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n };\n // BigInteger.prototype.lShiftTo = bnpLShiftTo;\n // (protected) r = this << n\n BigInteger.prototype.lShiftTo = function (n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB);\n var c = (this.s << bs) & this.DM;\n for (var i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = (this[i] >> cbs) | c;\n c = (this[i] & bm) << bs;\n }\n for (var i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n };\n // BigInteger.prototype.rShiftTo = bnpRShiftTo;\n // (protected) r = this >> n\n BigInteger.prototype.rShiftTo = function (n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n if (bs > 0) {\n r[this.t - ds - 1] |= (this.s & bm) << cbs;\n }\n r.t = this.t - ds;\n r.clamp();\n };\n // BigInteger.prototype.subTo = bnpSubTo;\n // (protected) r = this - a\n BigInteger.prototype.subTo = function (a, r) {\n var i = 0;\n var c = 0;\n var m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c -= a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c < -1) {\n r[i++] = this.DV + c;\n }\n else if (c > 0) {\n r[i++] = c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyTo = function (a, r) {\n var x = this.abs();\n var y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n r.s = 0;\n r.clamp();\n if (this.s != a.s) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.squareTo = bnpSquareTo;\n // (protected) r = this^2, r != this (HAC 14.16)\n BigInteger.prototype.squareTo = function (r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n if (r.t > 0) {\n r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n }\n r.s = 0;\n r.clamp();\n };\n // BigInteger.prototype.divRemTo = bnpDivRemTo;\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n BigInteger.prototype.divRemTo = function (m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) {\n return;\n }\n var pt = this.abs();\n if (pt.t < pm.t) {\n if (q != null) {\n q.fromInt(0);\n }\n if (r != null) {\n this.copyTo(r);\n }\n return;\n }\n if (r == null) {\n r = nbi();\n }\n var y = nbi();\n var ts = this.s;\n var ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n }\n else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) {\n return;\n }\n var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt;\n var d2 = (1 << this.F1) / yt;\n var e = 1 << this.F2;\n var i = r.t;\n var j = i - ys;\n var t = (q == null) ? nbi() : q;\n y.dlShiftTo(j, t);\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n while (--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) {\n BigInteger.ZERO.subTo(q, q);\n }\n }\n r.t = ys;\n r.clamp();\n if (nsh > 0) {\n r.rShiftTo(nsh, r);\n } // Denormalize remainder\n if (ts < 0) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.invDigit = bnpInvDigit;\n // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n BigInteger.prototype.invDigit = function () {\n if (this.t < 1) {\n return 0;\n }\n var x = this[0];\n if ((x & 1) == 0) {\n return 0;\n }\n var y = x & 3; // y == 1/x mod 2^2\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y > 0) ? this.DV - y : -y;\n };\n // BigInteger.prototype.isEven = bnpIsEven;\n // (protected) true iff this is even\n BigInteger.prototype.isEven = function () {\n return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;\n };\n // BigInteger.prototype.exp = bnpExp;\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n BigInteger.prototype.exp = function (e, z) {\n if (e > 0xffffffff || e < 1) {\n return BigInteger.ONE;\n }\n var r = nbi();\n var r2 = nbi();\n var g = z.convert(this);\n var i = nbits(e) - 1;\n g.copyTo(r);\n while (--i >= 0) {\n z.sqrTo(r, r2);\n if ((e & (1 << i)) > 0) {\n z.mulTo(r2, g, r);\n }\n else {\n var t = r;\n r = r2;\n r2 = t;\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.chunkSize = bnpChunkSize;\n // (protected) return x s.t. r^x < DV\n BigInteger.prototype.chunkSize = function (r) {\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\n };\n // BigInteger.prototype.toRadix = bnpToRadix;\n // (protected) convert to radix string\n BigInteger.prototype.toRadix = function (b) {\n if (b == null) {\n b = 10;\n }\n if (this.signum() == 0 || b < 2 || b > 36) {\n return \"0\";\n }\n var cs = this.chunkSize(b);\n var a = Math.pow(b, cs);\n var d = nbv(a);\n var y = nbi();\n var z = nbi();\n var r = \"\";\n this.divRemTo(d, y, z);\n while (y.signum() > 0) {\n r = (a + z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d, y, z);\n }\n return z.intValue().toString(b) + r;\n };\n // BigInteger.prototype.fromRadix = bnpFromRadix;\n // (protected) convert from radix string\n BigInteger.prototype.fromRadix = function (s, b) {\n this.fromInt(0);\n if (b == null) {\n b = 10;\n }\n var cs = this.chunkSize(b);\n var d = Math.pow(b, cs);\n var mi = false;\n var j = 0;\n var w = 0;\n for (var i = 0; i < s.length; ++i) {\n var x = intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\" && this.signum() == 0) {\n mi = true;\n }\n continue;\n }\n w = b * w + x;\n if (++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w, 0);\n j = 0;\n w = 0;\n }\n }\n if (j > 0) {\n this.dMultiply(Math.pow(b, j));\n this.dAddOffset(w, 0);\n }\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.fromNumber = bnpFromNumber;\n // (protected) alternate constructor\n BigInteger.prototype.fromNumber = function (a, b, c) {\n if (\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n } // force odd\n while (!this.isProbablePrime(b)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > a) {\n this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\n }\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n // (protected) r = this op a (bitwise)\n BigInteger.prototype.bitwiseTo = function (a, op, r) {\n var i;\n var f;\n var m = Math.min(a.t, this.t);\n for (i = 0; i < m; ++i) {\n r[i] = op(this[i], a[i]);\n }\n if (a.t < this.t) {\n f = a.s & this.DM;\n for (i = m; i < this.t; ++i) {\n r[i] = op(this[i], f);\n }\n r.t = this.t;\n }\n else {\n f = this.s & this.DM;\n for (i = m; i < a.t; ++i) {\n r[i] = op(f, a[i]);\n }\n r.t = a.t;\n }\n r.s = op(this.s, a.s);\n r.clamp();\n };\n // BigInteger.prototype.changeBit = bnpChangeBit;\n // (protected) this op (1<>= this.DB;\n }\n if (a.t < this.t) {\n c += a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c > 0) {\n r[i++] = c;\n }\n else if (c < -1) {\n r[i++] = this.DV + c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.dMultiply = bnpDMultiply;\n // (protected) this *= n, this >= 0, 1 < n < DV\n BigInteger.prototype.dMultiply = function (n) {\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n };\n // BigInteger.prototype.dAddOffset = bnpDAddOffset;\n // (protected) this += n << w words, this >= 0\n BigInteger.prototype.dAddOffset = function (n, w) {\n if (n == 0) {\n return;\n }\n while (this.t <= w) {\n this[this.t++] = 0;\n }\n this[w] += n;\n while (this[w] >= this.DV) {\n this[w] -= this.DV;\n if (++w >= this.t) {\n this[this.t++] = 0;\n }\n ++this[w];\n }\n };\n // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n // (protected) r = lower n words of \"this * a\", a.t <= n\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyLowerTo = function (a, n, r) {\n var i = Math.min(this.t + a.t, n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while (i > 0) {\n r[--i] = 0;\n }\n for (var j = r.t - this.t; i < j; ++i) {\n r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\n }\n for (var j = Math.min(a.t, n); i < j; ++i) {\n this.am(0, a[i], r, i, 0, n - i);\n }\n r.clamp();\n };\n // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyUpperTo = function (a, n, r) {\n --n;\n var i = r.t = this.t + a.t - n;\n r.s = 0; // assumes a,this >= 0\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) {\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\n }\n r.clamp();\n r.drShiftTo(1, r);\n };\n // BigInteger.prototype.modInt = bnpModInt;\n // (protected) this % n, n < 2^26\n BigInteger.prototype.modInt = function (n) {\n if (n <= 0) {\n return 0;\n }\n var d = this.DV % n;\n var r = (this.s < 0) ? n - 1 : 0;\n if (this.t > 0) {\n if (d == 0) {\n r = this[0] % n;\n }\n else {\n for (var i = this.t - 1; i >= 0; --i) {\n r = (d * r + this[i]) % n;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.millerRabin = bnpMillerRabin;\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n BigInteger.prototype.millerRabin = function (t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if (k <= 0) {\n return false;\n }\n var r = n1.shiftRight(k);\n t = (t + 1) >> 1;\n if (t > lowprimes.length) {\n t = lowprimes.length;\n }\n var a = nbi();\n for (var i = 0; i < t; ++i) {\n // Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n var y = a.modPow(r, this);\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while (j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2, this);\n if (y.compareTo(BigInteger.ONE) == 0) {\n return false;\n }\n }\n if (y.compareTo(n1) != 0) {\n return false;\n }\n }\n }\n return true;\n };\n // BigInteger.prototype.square = bnSquare;\n // (public) this^2\n BigInteger.prototype.square = function () {\n var r = nbi();\n this.squareTo(r);\n return r;\n };\n //#region ASYNC\n // Public API method\n BigInteger.prototype.gcda = function (a, callback) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n callback(x);\n return;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.\n var gcda1 = function () {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n if (!(x.signum() > 0)) {\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n setTimeout(function () { callback(y); }, 0); // escape\n }\n else {\n setTimeout(gcda1, 0);\n }\n };\n setTimeout(gcda1, 10);\n };\n // (protected) alternate constructor\n BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) {\n if (\"number\" == typeof b) {\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n }\n var bnp_1 = this;\n var bnpfn1_1 = function () {\n bnp_1.dAddOffset(2, 0);\n if (bnp_1.bitLength() > a) {\n bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1);\n }\n if (bnp_1.isProbablePrime(b)) {\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(bnpfn1_1, 0);\n }\n };\n setTimeout(bnpfn1_1, 0);\n }\n }\n else {\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n return BigInteger;\n}());\n\n//#region REDUCERS\n//#region NullExp\nvar NullExp = /** @class */ (function () {\n function NullExp() {\n }\n // NullExp.prototype.convert = nNop;\n NullExp.prototype.convert = function (x) {\n return x;\n };\n // NullExp.prototype.revert = nNop;\n NullExp.prototype.revert = function (x) {\n return x;\n };\n // NullExp.prototype.mulTo = nMulTo;\n NullExp.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n };\n // NullExp.prototype.sqrTo = nSqrTo;\n NullExp.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n };\n return NullExp;\n}());\n// Modular reduction using \"classic\" algorithm\nvar Classic = /** @class */ (function () {\n function Classic(m) {\n this.m = m;\n }\n // Classic.prototype.convert = cConvert;\n Classic.prototype.convert = function (x) {\n if (x.s < 0 || x.compareTo(this.m) >= 0) {\n return x.mod(this.m);\n }\n else {\n return x;\n }\n };\n // Classic.prototype.revert = cRevert;\n Classic.prototype.revert = function (x) {\n return x;\n };\n // Classic.prototype.reduce = cReduce;\n Classic.prototype.reduce = function (x) {\n x.divRemTo(this.m, null, x);\n };\n // Classic.prototype.mulTo = cMulTo;\n Classic.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Classic.prototype.sqrTo = cSqrTo;\n Classic.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Classic;\n}());\n//#endregion\n//#region Montgomery\n// Montgomery reduction\nvar Montgomery = /** @class */ (function () {\n function Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << (m.DB - 15)) - 1;\n this.mt2 = 2 * m.t;\n }\n // Montgomery.prototype.convert = montConvert;\n // xR mod m\n Montgomery.prototype.convert = function (x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n this.m.subTo(r, r);\n }\n return r;\n };\n // Montgomery.prototype.revert = montRevert;\n // x/R mod m\n Montgomery.prototype.revert = function (x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n };\n // Montgomery.prototype.reduce = montReduce;\n // x = x/R mod m (HAC 14.32)\n Montgomery.prototype.reduce = function (x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n // propagate carry\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Montgomery.prototype.mulTo = montMulTo;\n // r = \"xy/R mod m\"; x,y != r\n Montgomery.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Montgomery.prototype.sqrTo = montSqrTo;\n // r = \"x^2/R mod m\"; x != r\n Montgomery.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Montgomery;\n}());\n//#endregion Montgomery\n//#region Barrett\n// Barrett modular reduction\nvar Barrett = /** @class */ (function () {\n function Barrett(m) {\n this.m = m;\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\n this.mu = this.r2.divide(m);\n }\n // Barrett.prototype.convert = barrettConvert;\n Barrett.prototype.convert = function (x) {\n if (x.s < 0 || x.t > 2 * this.m.t) {\n return x.mod(this.m);\n }\n else if (x.compareTo(this.m) < 0) {\n return x;\n }\n else {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n };\n // Barrett.prototype.revert = barrettRevert;\n Barrett.prototype.revert = function (x) {\n return x;\n };\n // Barrett.prototype.reduce = barrettReduce;\n // x = x mod m (HAC 14.42)\n Barrett.prototype.reduce = function (x) {\n x.drShiftTo(this.m.t - 1, this.r2);\n if (x.t > this.m.t + 1) {\n x.t = this.m.t + 1;\n x.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (x.compareTo(this.r2) < 0) {\n x.dAddOffset(1, this.m.t + 1);\n }\n x.subTo(this.r2, x);\n while (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Barrett.prototype.mulTo = barrettMulTo;\n // r = x*y mod m; x,y != r\n Barrett.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Barrett.prototype.sqrTo = barrettSqrTo;\n // r = x^2 mod m; x != r\n Barrett.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Barrett;\n}());\n//#endregion\n//#endregion REDUCERS\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\nfunction parseBigInt(str, r) {\n return new BigInteger(str, r);\n}\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\nvar inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n // am2 avoids a big mult-and-extract completely.\n // Max digit bits should be <= 30 because we do bitwise ops\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n BigInteger.prototype.am = function am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff;\n var xh = x >> 15;\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n return c;\n };\n dbits = 30;\n}\nelse if (inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n // am1: use a single mult and divide to get the high bits,\n // max digit bits should be 26 because\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n BigInteger.prototype.am = function am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n return c;\n };\n dbits = 26;\n}\nelse { // Mozilla/Netscape seems to prefer am3\n // Alternately, set max digit bits to 28 since some\n // browsers slow down when dealing with 32-bit numbers.\n BigInteger.prototype.am = function am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff;\n var xh = x >> 14;\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n return c;\n };\n dbits = 28;\n}\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1 << dbits) - 1);\nBigInteger.prototype.DV = (1 << dbits);\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n// Digit conversions\nvar BI_RC = [];\nvar rr;\nvar vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return (c == null) ? -1 : c;\n}\n// return bigint initialized to value\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n}\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1;\n var t;\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n return r;\n}\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/jsbn.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/prng4.js": +/*!*******************************!*\ + !*** ./lib/lib/jsbn/prng4.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Arcfour\": () => (/* binding */ Arcfour),\n/* harmony export */ \"prng_newstate\": () => (/* binding */ prng_newstate),\n/* harmony export */ \"rng_psize\": () => (/* binding */ rng_psize)\n/* harmony export */ });\n// prng4.js - uses Arcfour as a PRNG\nvar Arcfour = /** @class */ (function () {\n function Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = [];\n }\n // Arcfour.prototype.init = ARC4init;\n // Initialize arcfour context from key, an array of ints, each from [0..255]\n Arcfour.prototype.init = function (key) {\n var i;\n var j;\n var t;\n for (i = 0; i < 256; ++i) {\n this.S[i] = i;\n }\n j = 0;\n for (i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n };\n // Arcfour.prototype.next = ARC4next;\n Arcfour.prototype.next = function () {\n var t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n };\n return Arcfour;\n}());\n\n// Plug in your RNG constructor here\nfunction prng_newstate() {\n return new Arcfour();\n}\n// Pool size must be a multiple of 4 and greater than 32.\n// An array of bytes the size of the pool will be passed to init()\nvar rng_psize = 256;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/prng4.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/rng.js": +/*!*****************************!*\ + !*** ./lib/lib/jsbn/rng.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SecureRandom\": () => (/* binding */ SecureRandom)\n/* harmony export */ });\n/* harmony import */ var _prng4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./prng4 */ \"./lib/lib/jsbn/prng4.js\");\n// Random number generator - requires a PRNG backend, e.g. prng4.js\n\nvar rng_state;\nvar rng_pool = null;\nvar rng_pptr;\n// Initialize the pool with junk if needed.\nif (rng_pool == null) {\n rng_pool = [];\n rng_pptr = 0;\n var t = void 0;\n if (window.crypto && window.crypto.getRandomValues) {\n // Extract entropy (2048 bits) from RNG if available\n var z = new Uint32Array(256);\n window.crypto.getRandomValues(z);\n for (t = 0; t < z.length; ++t) {\n rng_pool[rng_pptr++] = z[t] & 255;\n }\n }\n // Use mouse events for entropy, if we do not have enough entropy by the time\n // we need it, entropy will be generated by Math.random.\n var count = 0;\n var onMouseMoveListener_1 = function (ev) {\n count = count || 0;\n if (count >= 256 || rng_pptr >= _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n if (window.removeEventListener) {\n window.removeEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.detachEvent) {\n window.detachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n return;\n }\n try {\n var mouseCoordinates = ev.x + ev.y;\n rng_pool[rng_pptr++] = mouseCoordinates & 255;\n count += 1;\n }\n catch (e) {\n // Sometimes Firefox will deny permission to access event properties for some reason. Ignore.\n }\n };\n if (window.addEventListener) {\n window.addEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.attachEvent) {\n window.attachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n}\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_state = (0,_prng4__WEBPACK_IMPORTED_MODULE_0__.prng_newstate)();\n // At this point, we may not have collected enough entropy. If not, fall back to Math.random\n while (rng_pptr < _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n var random = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = random & 255;\n }\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\n rng_pool[rng_pptr] = 0;\n }\n rng_pptr = 0;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n}\nvar SecureRandom = /** @class */ (function () {\n function SecureRandom() {\n }\n SecureRandom.prototype.nextBytes = function (ba) {\n for (var i = 0; i < ba.length; ++i) {\n ba[i] = rng_get_byte();\n }\n };\n return SecureRandom;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rng.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/rsa.js": +/*!*****************************!*\ + !*** ./lib/lib/jsbn/rsa.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"RSAKey\": () => (/* binding */ RSAKey)\n/* harmony export */ });\n/* harmony import */ var _jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _rng__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rng */ \"./lib/lib/jsbn/rng.js\");\n// Depends on jsbn.js and rng.js\n// Version 1.1: support utf-8 encoding in pkcs1pad2\n// convert a (hex) string to a bignum object\n\n\n// function linebrk(s,n) {\n// var ret = \"\";\n// var i = 0;\n// while(i + n < s.length) {\n// ret += s.substring(i,i+n) + \"\\n\";\n// i += n;\n// }\n// return ret + s.substring(i,s.length);\n// }\n// function byte2Hex(b) {\n// if(b < 0x10)\n// return \"0\" + b.toString(16);\n// else\n// return b.toString(16);\n// }\nfunction pkcs1pad1(s, n) {\n if (n < s.length + 22) {\n console.error(\"Message too long for RSA\");\n return null;\n }\n var len = n - s.length - 6;\n var filler = \"\";\n for (var f = 0; f < len; f += 2) {\n filler += \"ff\";\n }\n var m = \"0001\" + filler + \"00\" + s;\n return (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(m, 16);\n}\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\nfunction pkcs1pad2(s, n) {\n if (n < s.length + 11) { // TODO: fix for utf-8\n console.error(\"Message too long for RSA\");\n return null;\n }\n var ba = [];\n var i = s.length - 1;\n while (i >= 0 && n > 0) {\n var c = s.charCodeAt(i--);\n if (c < 128) { // encode using utf-8\n ba[--n] = c;\n }\n else if ((c > 127) && (c < 2048)) {\n ba[--n] = (c & 63) | 128;\n ba[--n] = (c >> 6) | 192;\n }\n else {\n ba[--n] = (c & 63) | 128;\n ba[--n] = ((c >> 6) & 63) | 128;\n ba[--n] = (c >> 12) | 224;\n }\n }\n ba[--n] = 0;\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var x = [];\n while (n > 2) { // random non-zero pad\n x[0] = 0;\n while (x[0] == 0) {\n rng.nextBytes(x);\n }\n ba[--n] = x[0];\n }\n ba[--n] = 2;\n ba[--n] = 0;\n return new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(ba);\n}\n// \"empty\" RSA key constructor\nvar RSAKey = /** @class */ (function () {\n function RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n }\n //#region PROTECTED\n // protected\n // RSAKey.prototype.doPublic = RSADoPublic;\n // Perform raw public operation on \"x\": return x^e (mod n)\n RSAKey.prototype.doPublic = function (x) {\n return x.modPowInt(this.e, this.n);\n };\n // RSAKey.prototype.doPrivate = RSADoPrivate;\n // Perform raw private operation on \"x\": return x^d (mod n)\n RSAKey.prototype.doPrivate = function (x) {\n if (this.p == null || this.q == null) {\n return x.modPow(this.d, this.n);\n }\n // TODO: re-calculate any missing CRT params\n var xp = x.mod(this.p).modPow(this.dmp1, this.p);\n var xq = x.mod(this.q).modPow(this.dmq1, this.q);\n while (xp.compareTo(xq) < 0) {\n xp = xp.add(this.p);\n }\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n };\n //#endregion PROTECTED\n //#region PUBLIC\n // RSAKey.prototype.setPublic = RSASetPublic;\n // Set the public key fields N and e from hex strings\n RSAKey.prototype.setPublic = function (N, E) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n }\n else {\n console.error(\"Invalid RSA public key\");\n }\n };\n // RSAKey.prototype.encrypt = RSAEncrypt;\n // Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\n RSAKey.prototype.encrypt = function (text) {\n var maxLength = (this.n.bitLength() + 7) >> 3;\n var m = pkcs1pad2(text, maxLength);\n if (m == null) {\n return null;\n }\n var c = this.doPublic(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n var length = h.length;\n // fix zero before result\n for (var i = 0; i < maxLength * 2 - length; i++) {\n h = \"0\" + h;\n }\n return h;\n };\n // RSAKey.prototype.setPrivate = RSASetPrivate;\n // Set the private key fields N, e, and d from hex strings\n RSAKey.prototype.setPrivate = function (N, E, D) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\n // Set the private key fields N, e, d and CRT params from hex strings\n RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n this.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(P, 16);\n this.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(Q, 16);\n this.dmp1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DP, 16);\n this.dmq1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DQ, 16);\n this.coeff = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(C, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.generate = RSAGenerate;\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generate = function (B, E) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n for (;;) {\n for (;;) {\n this.p = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(B - qs, 1, rng);\n if (this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\n break;\n }\n }\n for (;;) {\n this.q = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(qs, 1, rng);\n if (this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\n break;\n }\n }\n if (this.p.compareTo(this.q) <= 0) {\n var t = this.p;\n this.p = this.q;\n this.q = t;\n }\n var p1 = this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n this.d = ee.modInverse(phi);\n this.dmp1 = this.d.mod(p1);\n this.dmq1 = this.d.mod(q1);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n };\n // RSAKey.prototype.decrypt = RSADecrypt;\n // Return the PKCS#1 RSA decryption of \"ctext\".\n // \"ctext\" is an even-length hex string and the output is a plain string.\n RSAKey.prototype.decrypt = function (ctext) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(ctext, 16);\n var m = this.doPrivate(c);\n if (m == null) {\n return null;\n }\n return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);\n };\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generateAsync = function (B, E, callback) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n var rsa = this;\n // These functions have non-descript names because they were originally for(;;) loops.\n // I don't know about cryptography to give them better names than loop1-4.\n var loop1 = function () {\n var loop4 = function () {\n if (rsa.p.compareTo(rsa.q) <= 0) {\n var t = rsa.p;\n rsa.p = rsa.q;\n rsa.q = t;\n }\n var p1 = rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n rsa.n = rsa.p.multiply(rsa.q);\n rsa.d = ee.modInverse(phi);\n rsa.dmp1 = rsa.d.mod(p1);\n rsa.dmq1 = rsa.d.mod(q1);\n rsa.coeff = rsa.q.modInverse(rsa.p);\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(loop1, 0);\n }\n };\n var loop3 = function () {\n rsa.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.q.fromNumberAsync(qs, 1, rng, function () {\n rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\n setTimeout(loop4, 0);\n }\n else {\n setTimeout(loop3, 0);\n }\n });\n });\n };\n var loop2 = function () {\n rsa.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.p.fromNumberAsync(B - qs, 1, rng, function () {\n rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\n setTimeout(loop3, 0);\n }\n else {\n setTimeout(loop2, 0);\n }\n });\n });\n };\n setTimeout(loop2, 0);\n };\n setTimeout(loop1, 0);\n };\n RSAKey.prototype.sign = function (text, digestMethod, digestName) {\n var header = getDigestHeader(digestName);\n var digest = header + digestMethod(text).toString();\n var m = pkcs1pad1(digest, this.n.bitLength() / 4);\n if (m == null) {\n return null;\n }\n var c = this.doPrivate(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n if ((h.length & 1) == 0) {\n return h;\n }\n else {\n return \"0\" + h;\n }\n };\n RSAKey.prototype.verify = function (text, signature, digestMethod) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(signature, 16);\n var m = this.doPublic(c);\n if (m == null) {\n return null;\n }\n var unpadded = m.toString(16).replace(/^1f+00/, \"\");\n var digest = removeDigestHeader(unpadded);\n return digest == digestMethod(text).toString();\n };\n return RSAKey;\n}());\n\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\nfunction pkcs1unpad2(d, n) {\n var b = d.toByteArray();\n var i = 0;\n while (i < b.length && b[i] == 0) {\n ++i;\n }\n if (b.length - i != n - 1 || b[i] != 2) {\n return null;\n }\n ++i;\n while (b[i] != 0) {\n if (++i >= b.length) {\n return null;\n }\n }\n var ret = \"\";\n while (++i < b.length) {\n var c = b[i] & 255;\n if (c < 128) { // utf-8 decode\n ret += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));\n ++i;\n }\n else {\n ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));\n i += 2;\n }\n }\n return ret;\n}\n// https://tools.ietf.org/html/rfc3447#page-43\nvar DIGEST_HEADERS = {\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n ripemd160: \"3021300906052b2403020105000414\"\n};\nfunction getDigestHeader(name) {\n return DIGEST_HEADERS[name] || \"\";\n}\nfunction removeDigestHeader(str) {\n for (var name_1 in DIGEST_HEADERS) {\n if (DIGEST_HEADERS.hasOwnProperty(name_1)) {\n var header = DIGEST_HEADERS[name_1];\n var len = header.length;\n if (str.substr(0, len) == header) {\n return str.substr(len);\n }\n }\n }\n return str;\n}\n// Return the PKCS#1 RSA encryption of \"text\" as a Base64-encoded string\n// function RSAEncryptB64(text) {\n// var h = this.encrypt(text);\n// if(h) return hex2b64(h); else return null;\n// }\n// public\n// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rsa.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/util.js": +/*!******************************!*\ + !*** ./lib/lib/jsbn/util.js ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"int2char\": () => (/* binding */ int2char),\n/* harmony export */ \"op_and\": () => (/* binding */ op_and),\n/* harmony export */ \"op_or\": () => (/* binding */ op_or),\n/* harmony export */ \"op_xor\": () => (/* binding */ op_xor),\n/* harmony export */ \"op_andnot\": () => (/* binding */ op_andnot),\n/* harmony export */ \"lbit\": () => (/* binding */ lbit),\n/* harmony export */ \"cbit\": () => (/* binding */ cbit)\n/* harmony export */ });\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\n//#region BIT_OPERATIONS\n// (public) this & a\nfunction op_and(x, y) {\n return x & y;\n}\n// (public) this | a\nfunction op_or(x, y) {\n return x | y;\n}\n// (public) this ^ a\nfunction op_xor(x, y) {\n return x ^ y;\n}\n// (public) this & ~a\nfunction op_andnot(x, y) {\n return x & ~y;\n}\n// return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\n if (x == 0) {\n return -1;\n }\n var r = 0;\n if ((x & 0xffff) == 0) {\n x >>= 16;\n r += 16;\n }\n if ((x & 0xff) == 0) {\n x >>= 8;\n r += 8;\n }\n if ((x & 0xf) == 0) {\n x >>= 4;\n r += 4;\n }\n if ((x & 3) == 0) {\n x >>= 2;\n r += 2;\n }\n if ((x & 1) == 0) {\n ++r;\n }\n return r;\n}\n// return number of 1 bits in x\nfunction cbit(x) {\n var r = 0;\n while (x != 0) {\n x &= x - 1;\n ++r;\n }\n return r;\n}\n//#endregion BIT_OPERATIONS\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/util.js?"); + +/***/ }), + +/***/ "./lib/lib/jsrsasign/asn1-1.0.js": +/*!***************************************!*\ + !*** ./lib/lib/jsrsasign/asn1-1.0.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KJUR\": () => (/* binding */ KJUR)\n/* harmony export */ });\n/* harmony import */ var _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _yahoo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./yahoo */ \"./lib/lib/jsrsasign/yahoo.js\");\n/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license\n */\n/*\n * asn1.js - ASN.1 DER encoder classes\n *\n * Copyright (c) 2013-2017 Kenji Urushima (kenji.urushima@gmail.com)\n *\n * This software is licensed under the terms of the MIT License.\n * https://kjur.github.io/jsrsasign/license\n *\n * The above copyright and license notice shall be\n * included in all copies or substantial portions of the Software.\n */\n\n\n/**\n * @fileOverview\n * @name asn1-1.0.js\n * @author Kenji Urushima kenji.urushima@gmail.com\n * @version asn1 1.0.13 (2017-Jun-02)\n * @since jsrsasign 2.1\n * @license MIT License\n */\n/**\n * kjur's class library name space\n *

\n * This name space provides following name spaces:\n *

    \n *
  • {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
  • \n *
  • {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
  • \n *
  • {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature\n * class and utilities
  • \n *
\n *

\n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\n * @name KJUR\n * @namespace kjur's class library name space\n */\nvar KJUR = {};\n/**\n * kjur's ASN.1 class library name space\n *

\n * This is ITU-T X.690 ASN.1 DER encoder class library and\n * class structure and methods is very similar to\n * org.bouncycastle.asn1 package of\n * well known BouncyCaslte Cryptography Library.\n *

PROVIDING ASN.1 PRIMITIVES

\n * Here are ASN.1 DER primitive classes.\n *
    \n *
  • 0x01 {@link KJUR.asn1.DERBoolean}
  • \n *
  • 0x02 {@link KJUR.asn1.DERInteger}
  • \n *
  • 0x03 {@link KJUR.asn1.DERBitString}
  • \n *
  • 0x04 {@link KJUR.asn1.DEROctetString}
  • \n *
  • 0x05 {@link KJUR.asn1.DERNull}
  • \n *
  • 0x06 {@link KJUR.asn1.DERObjectIdentifier}
  • \n *
  • 0x0a {@link KJUR.asn1.DEREnumerated}
  • \n *
  • 0x0c {@link KJUR.asn1.DERUTF8String}
  • \n *
  • 0x12 {@link KJUR.asn1.DERNumericString}
  • \n *
  • 0x13 {@link KJUR.asn1.DERPrintableString}
  • \n *
  • 0x14 {@link KJUR.asn1.DERTeletexString}
  • \n *
  • 0x16 {@link KJUR.asn1.DERIA5String}
  • \n *
  • 0x17 {@link KJUR.asn1.DERUTCTime}
  • \n *
  • 0x18 {@link KJUR.asn1.DERGeneralizedTime}
  • \n *
  • 0x30 {@link KJUR.asn1.DERSequence}
  • \n *
  • 0x31 {@link KJUR.asn1.DERSet}
  • \n *
\n *

OTHER ASN.1 CLASSES

\n *
    \n *
  • {@link KJUR.asn1.ASN1Object}
  • \n *
  • {@link KJUR.asn1.DERAbstractString}
  • \n *
  • {@link KJUR.asn1.DERAbstractTime}
  • \n *
  • {@link KJUR.asn1.DERAbstractStructured}
  • \n *
  • {@link KJUR.asn1.DERTaggedObject}
  • \n *
\n *

SUB NAME SPACES

\n *
    \n *
  • {@link KJUR.asn1.cades} - CAdES long term signature format
  • \n *
  • {@link KJUR.asn1.cms} - Cryptographic Message Syntax
  • \n *
  • {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
  • \n *
  • {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
  • \n *
  • {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
  • \n *
\n *

\n * NOTE: Please ignore method summary and document of this namespace.\n * This caused by a bug of jsdoc2.\n * @name KJUR.asn1\n * @namespace\n */\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1)\n KJUR.asn1 = {};\n/**\n * ASN1 utilities class\n * @name KJUR.asn1.ASN1Util\n * @class ASN1 utilities class\n * @since asn1 1.0.2\n */\nKJUR.asn1.ASN1Util = new function () {\n this.integerToByteHex = function (i) {\n var h = i.toString(16);\n if ((h.length % 2) == 1)\n h = '0' + h;\n return h;\n };\n this.bigIntToMinTwosComplementsHex = function (bigIntegerValue) {\n var h = bigIntegerValue.toString(16);\n if (h.substr(0, 1) != '-') {\n if (h.length % 2 == 1) {\n h = '0' + h;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n h = '00' + h;\n }\n }\n }\n else {\n var hPos = h.substr(1);\n var xorLen = hPos.length;\n if (xorLen % 2 == 1) {\n xorLen += 1;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n xorLen += 2;\n }\n }\n var hMask = '';\n for (var i = 0; i < xorLen; i++) {\n hMask += 'f';\n }\n var biMask = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(hMask, 16);\n var biNeg = biMask.xor(bigIntegerValue).add(_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n h = biNeg.toString(16).replace(/^-/, '');\n }\n return h;\n };\n /**\n * get PEM string from hexadecimal data and header string\n * @name getPEMStringFromHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} dataHex hexadecimal string of PEM body\n * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')\n * @return {String} PEM formatted string of input data\n * @description\n * This method converts a hexadecimal string to a PEM string with\n * a specified header. Its line break will be CRLF(\"\\r\\n\").\n * @example\n * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');\n * // value of pem will be:\n * -----BEGIN PRIVATE KEY-----\n * YWFh\n * -----END PRIVATE KEY-----\n */\n this.getPEMStringFromHex = function (dataHex, pemHeader) {\n return hextopem(dataHex, pemHeader);\n };\n /**\n * generate ASN1Object specifed by JSON parameters\n * @name newObject\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return {KJUR.asn1.ASN1Object} generated object\n * @since asn1 1.0.3\n * @description\n * generate any ASN1Object specified by JSON param\n * including ASN.1 primitive or structured.\n * Generally 'param' can be described as follows:\n *
\n * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}\n *
\n * 'TYPE-OF-ASN1OBJ' can be one of following symbols:\n *
    \n *
  • 'bool' - DERBoolean
  • \n *
  • 'int' - DERInteger
  • \n *
  • 'bitstr' - DERBitString
  • \n *
  • 'octstr' - DEROctetString
  • \n *
  • 'null' - DERNull
  • \n *
  • 'oid' - DERObjectIdentifier
  • \n *
  • 'enum' - DEREnumerated
  • \n *
  • 'utf8str' - DERUTF8String
  • \n *
  • 'numstr' - DERNumericString
  • \n *
  • 'prnstr' - DERPrintableString
  • \n *
  • 'telstr' - DERTeletexString
  • \n *
  • 'ia5str' - DERIA5String
  • \n *
  • 'utctime' - DERUTCTime
  • \n *
  • 'gentime' - DERGeneralizedTime
  • \n *
  • 'seq' - DERSequence
  • \n *
  • 'set' - DERSet
  • \n *
  • 'tag' - DERTaggedObject
  • \n *
\n * @example\n * newObject({'prnstr': 'aaa'});\n * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})\n * // ASN.1 Tagged Object\n * newObject({'tag': {'tag': 'a1',\n * 'explicit': true,\n * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});\n * // more simple representation of ASN.1 Tagged Object\n * newObject({'tag': ['a1',\n * true,\n * {'seq': [\n * {'int': 3},\n * {'prnstr': 'aaa'}]}\n * ]});\n */\n this.newObject = function (param) {\n var _KJUR = KJUR, _KJUR_asn1 = _KJUR.asn1, _DERBoolean = _KJUR_asn1.DERBoolean, _DERInteger = _KJUR_asn1.DERInteger, _DERBitString = _KJUR_asn1.DERBitString, _DEROctetString = _KJUR_asn1.DEROctetString, _DERNull = _KJUR_asn1.DERNull, _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, _DEREnumerated = _KJUR_asn1.DEREnumerated, _DERUTF8String = _KJUR_asn1.DERUTF8String, _DERNumericString = _KJUR_asn1.DERNumericString, _DERPrintableString = _KJUR_asn1.DERPrintableString, _DERTeletexString = _KJUR_asn1.DERTeletexString, _DERIA5String = _KJUR_asn1.DERIA5String, _DERUTCTime = _KJUR_asn1.DERUTCTime, _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, _DERSequence = _KJUR_asn1.DERSequence, _DERSet = _KJUR_asn1.DERSet, _DERTaggedObject = _KJUR_asn1.DERTaggedObject, _newObject = _KJUR_asn1.ASN1Util.newObject;\n var keys = Object.keys(param);\n if (keys.length != 1)\n throw \"key of param shall be only one.\";\n var key = keys[0];\n if (\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\".indexOf(\":\" + key + \":\") == -1)\n throw \"undefined key: \" + key;\n if (key == \"bool\")\n return new _DERBoolean(param[key]);\n if (key == \"int\")\n return new _DERInteger(param[key]);\n if (key == \"bitstr\")\n return new _DERBitString(param[key]);\n if (key == \"octstr\")\n return new _DEROctetString(param[key]);\n if (key == \"null\")\n return new _DERNull(param[key]);\n if (key == \"oid\")\n return new _DERObjectIdentifier(param[key]);\n if (key == \"enum\")\n return new _DEREnumerated(param[key]);\n if (key == \"utf8str\")\n return new _DERUTF8String(param[key]);\n if (key == \"numstr\")\n return new _DERNumericString(param[key]);\n if (key == \"prnstr\")\n return new _DERPrintableString(param[key]);\n if (key == \"telstr\")\n return new _DERTeletexString(param[key]);\n if (key == \"ia5str\")\n return new _DERIA5String(param[key]);\n if (key == \"utctime\")\n return new _DERUTCTime(param[key]);\n if (key == \"gentime\")\n return new _DERGeneralizedTime(param[key]);\n if (key == \"seq\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSequence({ 'array': a });\n }\n if (key == \"set\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSet({ 'array': a });\n }\n if (key == \"tag\") {\n var tagParam = param[key];\n if (Object.prototype.toString.call(tagParam) === '[object Array]' &&\n tagParam.length == 3) {\n var obj = _newObject(tagParam[2]);\n return new _DERTaggedObject({ tag: tagParam[0],\n explicit: tagParam[1],\n obj: obj });\n }\n else {\n var newParam = {};\n if (tagParam.explicit !== undefined)\n newParam.explicit = tagParam.explicit;\n if (tagParam.tag !== undefined)\n newParam.tag = tagParam.tag;\n if (tagParam.obj === undefined)\n throw \"obj shall be specified for 'tag'.\";\n newParam.obj = _newObject(tagParam.obj);\n return new _DERTaggedObject(newParam);\n }\n }\n };\n /**\n * get encoded hexadecimal string of ASN1Object specifed by JSON parameters\n * @name jsonToASN1HEX\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return hexadecimal string of ASN1Object\n * @since asn1 1.0.4\n * @description\n * As for ASN.1 object representation of JSON object,\n * please see {@link newObject}.\n * @example\n * jsonToASN1HEX({'prnstr': 'aaa'});\n */\n this.jsonToASN1HEX = function (param) {\n var asn1Obj = this.newObject(param);\n return asn1Obj.getEncodedHex();\n };\n};\n/**\n * get dot noted oid number string from hexadecimal value of OID\n * @name oidHexToInt\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} hex hexadecimal value of object identifier\n * @return {String} dot noted string of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from hexadecimal string representation of\n * ASN.1 value of object identifier to oid number string.\n * @example\n * KJUR.asn1.ASN1Util.oidHexToInt('550406') → \"2.5.4.6\"\n */\nKJUR.asn1.ASN1Util.oidHexToInt = function (hex) {\n var s = \"\";\n var i01 = parseInt(hex.substr(0, 2), 16);\n var i0 = Math.floor(i01 / 40);\n var i1 = i01 % 40;\n var s = i0 + \".\" + i1;\n var binbuf = \"\";\n for (var i = 2; i < hex.length; i += 2) {\n var value = parseInt(hex.substr(i, 2), 16);\n var bin = (\"00000000\" + value.toString(2)).slice(-8);\n binbuf = binbuf + bin.substr(1, 7);\n if (bin.substr(0, 1) == \"0\") {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(binbuf, 2);\n s = s + \".\" + bi.toString(10);\n binbuf = \"\";\n }\n }\n ;\n return s;\n};\n/**\n * get hexadecimal value of object identifier from dot noted oid value\n * @name oidIntToHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} oidString dot noted string of object identifier\n * @return {String} hexadecimal value of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from object identifier value string.\n * to hexadecimal string representation of it.\n * @example\n * KJUR.asn1.ASN1Util.oidIntToHex(\"2.5.4.6\") → \"550406\"\n */\nKJUR.asn1.ASN1Util.oidIntToHex = function (oidString) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n return h;\n};\n// ********************************************************************\n// Abstract ASN.1 Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * base class for ASN.1 DER encoder object\n * @name KJUR.asn1.ASN1Object\n * @class base class for ASN.1 DER encoder object\n * @property {Boolean} isModified flag whether internal data was changed\n * @property {String} hTLV hexadecimal string of ASN.1 TLV\n * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)\n * @property {String} hL hexadecimal string of ASN.1 TLV length(L)\n * @property {String} hV hexadecimal string of ASN.1 TLV value(V)\n * @description\n */\nKJUR.asn1.ASN1Object = function () {\n var isModified = true;\n var hTLV = null;\n var hT = '00';\n var hL = '00';\n var hV = '';\n /**\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\n * @name getLengthHexFromValue\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV length(L)\n */\n this.getLengthHexFromValue = function () {\n if (typeof this.hV == \"undefined\" || this.hV == null) {\n throw \"this.hV is null or undefined.\";\n }\n if (this.hV.length % 2 == 1) {\n throw \"value hex must be even length: n=\" + hV.length + \",v=\" + this.hV;\n }\n var n = this.hV.length / 2;\n var hN = n.toString(16);\n if (hN.length % 2 == 1) {\n hN = \"0\" + hN;\n }\n if (n < 128) {\n return hN;\n }\n else {\n var hNlen = hN.length / 2;\n if (hNlen > 15) {\n throw \"ASN.1 length too long to represent by 8x: n = \" + n.toString(16);\n }\n var head = 128 + hNlen;\n return head.toString(16) + hN;\n }\n };\n /**\n * get hexadecimal string of ASN.1 TLV bytes\n * @name getEncodedHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV\n */\n this.getEncodedHex = function () {\n if (this.hTLV == null || this.isModified) {\n this.hV = this.getFreshValueHex();\n this.hL = this.getLengthHexFromValue();\n this.hTLV = this.hT + this.hL + this.hV;\n this.isModified = false;\n //alert(\"first time: \" + this.hTLV);\n }\n return this.hTLV;\n };\n /**\n * get hexadecimal string of ASN.1 TLV value(V) bytes\n * @name getValueHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes\n */\n this.getValueHex = function () {\n this.getEncodedHex();\n return this.hV;\n };\n this.getFreshValueHex = function () {\n return '';\n };\n};\n// == BEGIN DERAbstractString ================================================\n/**\n * base class for ASN.1 DER string classes\n * @name KJUR.asn1.DERAbstractString\n * @class base class for ASN.1 DER string classes\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @property {String} s internal string of value\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERAbstractString = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var s = null;\n var hV = null;\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @return {String} string value of this string object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newS value by a string to set\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(this.s);\n };\n /**\n * set value by a hexadecimal string\n * @name setStringHex\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newHexString value by a hexadecimal string to set\n */\n this.setStringHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\") {\n this.setString(params);\n }\n else if (typeof params['str'] != \"undefined\") {\n this.setString(params['str']);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setStringHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\n// == END DERAbstractString ================================================\n// == BEGIN DERAbstractTime ==================================================\n/**\n * base class for ASN.1 DER Generalized/UTCTime class\n * @name KJUR.asn1.DERAbstractTime\n * @class base class for ASN.1 DER Generalized/UTCTime class\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractTime = function (params) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var s = null;\n var date = null;\n // --- PRIVATE METHODS --------------------\n this.localDateToUTC = function (d) {\n utc = d.getTime() + (d.getTimezoneOffset() * 60000);\n var utcDate = new Date(utc);\n return utcDate;\n };\n /*\n * format date string by Data object\n * @name formatDate\n * @memberOf KJUR.asn1.AbstractTime;\n * @param {Date} dateObject\n * @param {string} type 'utc' or 'gen'\n * @param {boolean} withMillis flag for with millisections or not\n * @description\n * 'withMillis' flag is supported from asn1 1.0.6.\n */\n this.formatDate = function (dateObject, type, withMillis) {\n var pad = this.zeroPadding;\n var d = this.localDateToUTC(dateObject);\n var year = String(d.getFullYear());\n if (type == 'utc')\n year = year.substr(2, 2);\n var month = pad(String(d.getMonth() + 1), 2);\n var day = pad(String(d.getDate()), 2);\n var hour = pad(String(d.getHours()), 2);\n var min = pad(String(d.getMinutes()), 2);\n var sec = pad(String(d.getSeconds()), 2);\n var s = year + month + day + hour + min + sec;\n if (withMillis === true) {\n var millis = d.getMilliseconds();\n if (millis != 0) {\n var sMillis = pad(String(millis), 3);\n sMillis = sMillis.replace(/[0]+$/, \"\");\n s = s + \".\" + sMillis;\n }\n }\n return s + \"Z\";\n };\n this.zeroPadding = function (s, len) {\n if (s.length >= len)\n return s;\n return new Array(len - s.length + 1).join('0') + s;\n };\n // --- PUBLIC METHODS --------------------\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @return {String} string value of this time object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {String} newS value by a string to set such like \"130430235959Z\"\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(newS);\n };\n /**\n * set value by a Date object\n * @name setByDateValue\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {Integer} year year of date (ex. 2013)\n * @param {Integer} month month of date between 1 and 12 (ex. 12)\n * @param {Integer} day day of month\n * @param {Integer} hour hours of date\n * @param {Integer} min minutes of date\n * @param {Integer} sec seconds of date\n */\n this.setByDateValue = function (year, month, day, hour, min, sec) {\n var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));\n this.setByDate(dateObject);\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\n// == END DERAbstractTime ==================================================\n// == BEGIN DERAbstractStructured ============================================\n/**\n * base class for ASN.1 DER structured class\n * @name KJUR.asn1.DERAbstractStructured\n * @class base class for ASN.1 DER structured class\n * @property {Array} asn1Array internal array of ASN1Object\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractStructured = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var asn1Array = null;\n /**\n * set value by array of ASN1Object\n * @name setByASN1ObjectArray\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {array} asn1ObjectArray array of ASN1Object to set\n */\n this.setByASN1ObjectArray = function (asn1ObjectArray) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array = asn1ObjectArray;\n };\n /**\n * append an ASN1Object to internal array\n * @name appendASN1Object\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {ASN1Object} asn1Object to add\n */\n this.appendASN1Object = function (asn1Object) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array.push(asn1Object);\n };\n this.asn1Array = new Array();\n if (typeof params != \"undefined\") {\n if (typeof params['array'] != \"undefined\") {\n this.asn1Array = params['array'];\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\n// ********************************************************************\n// ASN.1 Object Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * class for ASN.1 DER Boolean\n * @name KJUR.asn1.DERBoolean\n * @class class for ASN.1 DER Boolean\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERBoolean = function () {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n this.hTLV = \"0101ff\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Integer\n * @name KJUR.asn1.DERInteger\n * @class class for ASN.1 DER Integer\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • int - specify initial ASN.1 value(V) by integer value
  • \n *
  • bigint - specify initial ASN.1 value(V) by BigInteger object
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERInteger = function (params) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n * @example\n * new KJUR.asn1.DERInteger(123);\n * new KJUR.asn1.DERInteger({'int': 123});\n * new KJUR.asn1.DERInteger({'hex': '1fad'});\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['bigint'] != \"undefined\") {\n this.setByBigInteger(params['bigint']);\n }\n else if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER encoded BitString primitive\n * @name KJUR.asn1.DERBitString\n * @class class for ASN.1 DER encoded BitString primitive\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • bin - specify binary string (ex. '10111')
  • \n *
  • array - specify array of boolean (ex. [true,false,true,true])
  • \n *
  • hex - specify hexadecimal string of ASN.1 value(V) including unused bits
  • \n *
  • obj - specify {@link KJUR.asn1.ASN1Util.newObject}\n * argument for \"BitString encapsulates\" structure.
  • \n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: 'obj' parameter have been supported since\n * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
\n * @example\n * // default constructor\n * o = new KJUR.asn1.DERBitString();\n * // initialize with binary string\n * o = new KJUR.asn1.DERBitString({bin: \"1011\"});\n * // initialize with boolean array\n * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});\n * // initialize with hexadecimal string (04 is unused bits)\n * o = new KJUR.asn1.DEROctetString({hex: \"04bac0\"});\n * // initialize with ASN1Util.newObject argument for encapsulated\n * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // BIT STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DERBitString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = \"00\" + o.getEncodedHex();\n }\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n /**\n * set ASN.1 value(V) by a hexadecimal string including unused bits\n * @name setHexValueIncludingUnusedBits\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} newHexStringIncludingUnusedBits\n */\n this.setHexValueIncludingUnusedBits = function (newHexStringIncludingUnusedBits) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = newHexStringIncludingUnusedBits;\n };\n /**\n * set ASN.1 value(V) by unused bit and hexadecimal string of value\n * @name setUnusedBitsAndHexValue\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {Integer} unusedBits\n * @param {String} hValue\n */\n this.setUnusedBitsAndHexValue = function (unusedBits, hValue) {\n if (unusedBits < 0 || 7 < unusedBits) {\n throw \"unused bits shall be from 0 to 7: u = \" + unusedBits;\n }\n var hUnusedBits = \"0\" + unusedBits;\n this.hTLV = null;\n this.isModified = true;\n this.hV = hUnusedBits + hValue;\n };\n /**\n * set ASN.1 DER BitString by binary string
\n * @name setByBinaryString\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} binaryString binary value string (i.e. '10111')\n * @description\n * Its unused bits will be calculated automatically by length of\n * 'binaryValue'.
\n * NOTE: Trailing zeros '0' will be ignored.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray(\"01011\");\n */\n this.setByBinaryString = function (binaryString) {\n binaryString = binaryString.replace(/0+$/, '');\n var unusedBits = 8 - binaryString.length % 8;\n if (unusedBits == 8)\n unusedBits = 0;\n for (var i = 0; i <= unusedBits; i++) {\n binaryString += '0';\n }\n var h = '';\n for (var i = 0; i < binaryString.length - 1; i += 8) {\n var b = binaryString.substr(i, 8);\n var x = parseInt(b, 2).toString(16);\n if (x.length == 1)\n x = '0' + x;\n h += x;\n }\n this.hTLV = null;\n this.isModified = true;\n this.hV = '0' + unusedBits + h;\n };\n /**\n * set ASN.1 TLV value(V) by an array of boolean
\n * @name setByBooleanArray\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {array} booleanArray array of boolean (ex. [true, false, true])\n * @description\n * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray([false, true, false, true, true]);\n */\n this.setByBooleanArray = function (booleanArray) {\n var s = '';\n for (var i = 0; i < booleanArray.length; i++) {\n if (booleanArray[i] == true) {\n s += '1';\n }\n else {\n s += '0';\n }\n }\n this.setByBinaryString(s);\n };\n /**\n * generate an array of falses with specified length
\n * @name newFalseArray\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {Integer} nLength length of array to generate\n * @return {array} array of boolean falses\n * @description\n * This static method may be useful to initialize boolean array.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.newFalseArray(3) → [false, false, false]\n */\n this.newFalseArray = function (nLength) {\n var a = new Array(nLength);\n for (var i = 0; i < nLength; i++) {\n a[i] = false;\n }\n return a;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\" && params.toLowerCase().match(/^[0-9a-f]+$/)) {\n this.setHexValueIncludingUnusedBits(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setHexValueIncludingUnusedBits(params['hex']);\n }\n else if (typeof params['bin'] != \"undefined\") {\n this.setByBinaryString(params['bin']);\n }\n else if (typeof params['array'] != \"undefined\") {\n this.setByBooleanArray(params['array']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER OctetString
\n * @name KJUR.asn1.DEROctetString\n * @class class for ASN.1 DER OctetString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * This class provides ASN.1 OctetString simple type.
\n * Supported \"params\" attributes are:\n *
    \n *
  • str - to set a string as a value
  • \n *
  • hex - to set a hexadecimal string as a value
  • \n *
  • obj - to set a encapsulated ASN.1 value by JSON object\n * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
  • \n *
\n * NOTE: A parameter 'obj' have been supported\n * for \"OCTET STRING, encapsulates\" structure.\n * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).\n * @see KJUR.asn1.DERAbstractString - superclass\n * @example\n * // default constructor\n * o = new KJUR.asn1.DEROctetString();\n * // initialize with string\n * o = new KJUR.asn1.DEROctetString({str: \"aaa\"});\n * // initialize with hexadecimal string\n * o = new KJUR.asn1.DEROctetString({hex: \"616161\"});\n * // initialize with ASN1Util.newObject argument\n * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // OCTET STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DEROctetString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = o.getEncodedHex();\n }\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);\n this.hT = \"04\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER Null\n * @name KJUR.asn1.DERNull\n * @class class for ASN.1 DER Null\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERNull = function () {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER ObjectIdentifier\n * @name KJUR.asn1.DERObjectIdentifier\n * @class class for ASN.1 DER ObjectIdentifier\n * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERObjectIdentifier = function (params) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n /**\n * set value by a hexadecimal string\n * @name setValueHex\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} newHexString hexadecimal value of OID bytes\n */\n this.setValueHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n /**\n * set value by a OID string
\n * @name setValueOidString\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidString OID string (ex. 2.5.4.13)\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueOidString(\"2.5.4.13\");\n */\n this.setValueOidString = function (oidString) {\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = h;\n };\n /**\n * set value by a OID name\n * @name setValueName\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidName OID name (ex. 'serverAuth')\n * @since 1.0.1\n * @description\n * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.\n * Otherwise raise error.\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueName(\"serverAuth\");\n */\n this.setValueName = function (oidName) {\n var oid = KJUR.asn1.x509.OID.name2oid(oidName);\n if (oid !== '') {\n this.setValueOidString(oid);\n }\n else {\n throw \"DERObjectIdentifier oidName undefined: \" + oidName;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (params !== undefined) {\n if (typeof params === \"string\") {\n if (params.match(/^[0-2].[0-9.]+$/)) {\n this.setValueOidString(params);\n }\n else {\n this.setValueName(params);\n }\n }\n else if (params.oid !== undefined) {\n this.setValueOidString(params.oid);\n }\n else if (params.hex !== undefined) {\n this.setValueHex(params.hex);\n }\n else if (params.name !== undefined) {\n this.setValueName(params.name);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Enumerated\n * @name KJUR.asn1.DEREnumerated\n * @class class for ASN.1 DER Enumerated\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • int - specify initial ASN.1 value(V) by integer value
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n * @example\n * new KJUR.asn1.DEREnumerated(123);\n * new KJUR.asn1.DEREnumerated({int: 123});\n * new KJUR.asn1.DEREnumerated({hex: '1fad'});\n */\nKJUR.asn1.DEREnumerated = function (params) {\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\n this.hT = \"0a\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTF8String\n * @name KJUR.asn1.DERUTF8String\n * @class class for ASN.1 DER UTF8String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERUTF8String = function (params) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);\n this.hT = \"0c\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER NumericString\n * @name KJUR.asn1.DERNumericString\n * @class class for ASN.1 DER NumericString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERNumericString = function (params) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);\n this.hT = \"12\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER PrintableString\n * @name KJUR.asn1.DERPrintableString\n * @class class for ASN.1 DER PrintableString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERPrintableString = function (params) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);\n this.hT = \"13\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER TeletexString\n * @name KJUR.asn1.DERTeletexString\n * @class class for ASN.1 DER TeletexString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERTeletexString = function (params) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);\n this.hT = \"14\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER IA5String\n * @name KJUR.asn1.DERIA5String\n * @class class for ASN.1 DER IA5String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERIA5String = function (params) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);\n this.hT = \"16\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTCTime\n * @name KJUR.asn1.DERUTCTime\n * @class class for ASN.1 DER UTCTime\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
  • date - specify Date object.
  • \n *
\n * NOTE: 'params' can be omitted.\n *

EXAMPLES

\n * @example\n * d1 = new KJUR.asn1.DERUTCTime();\n * d1.setString('130430125959Z');\n *\n * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});\n * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});\n * d4 = new KJUR.asn1.DERUTCTime('130430125959Z');\n */\nKJUR.asn1.DERUTCTime = function (params) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);\n this.hT = \"17\";\n /**\n * set value by a Date object
\n * @name setByDate\n * @memberOf KJUR.asn1.DERUTCTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * o = new KJUR.asn1.DERUTCTime();\n * o.setByDate(new Date(\"2016/12/31\"));\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (typeof this.date == \"undefined\" && typeof this.s == \"undefined\") {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{12}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER GeneralizedTime\n * @name KJUR.asn1.DERGeneralizedTime\n * @class class for ASN.1 DER GeneralizedTime\n * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})\n * @property {Boolean} withMillis flag to show milliseconds or not\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
  • date - specify Date object.
  • \n *
  • millis - specify flag to show milliseconds (from 1.0.6)
  • \n *
\n * NOTE1: 'params' can be omitted.\n * NOTE2: 'withMillis' property is supported from asn1 1.0.6.\n */\nKJUR.asn1.DERGeneralizedTime = function (params) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);\n this.hT = \"18\";\n this.withMillis = false;\n /**\n * set value by a Date object\n * @name setByDate\n * @memberOf KJUR.asn1.DERGeneralizedTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * When you specify UTC time, use 'Date.UTC' method like this:
\n * o1 = new DERUTCTime();\n * o1.setByDate(date);\n *\n * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (this.date === undefined && this.s === undefined) {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{14}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n if (params.millis === true) {\n this.withMillis = true;\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER Sequence\n * @name KJUR.asn1.DERSequence\n * @class class for ASN.1 DER Sequence\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • array - specify array of ASN1Object to set elements of content
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERSequence = function (params) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, params);\n this.hT = \"30\";\n this.getFreshValueHex = function () {\n var h = '';\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n h += asn1Obj.getEncodedHex();\n }\n this.hV = h;\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER Set\n * @name KJUR.asn1.DERSet\n * @class class for ASN.1 DER Set\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • array - specify array of ASN1Object to set elements of content
  • \n *
  • sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
  • \n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: sortflag is supported since 1.0.5.\n */\nKJUR.asn1.DERSet = function (params) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, params);\n this.hT = \"31\";\n this.sortFlag = true; // item shall be sorted only in ASN.1 DER\n this.getFreshValueHex = function () {\n var a = new Array();\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n a.push(asn1Obj.getEncodedHex());\n }\n if (this.sortFlag == true)\n a.sort();\n this.hV = a.join('');\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params.sortflag != \"undefined\" &&\n params.sortflag == false)\n this.sortFlag = false;\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER TaggedObject\n * @name KJUR.asn1.DERTaggedObject\n * @class class for ASN.1 DER TaggedObject\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.\n * For example, if you find '[1]' tag in a ASN.1 dump,\n * 'tagNoHex' will be 'a1'.\n *
\n * As for optional argument 'params' for constructor, you can specify *ANY* of\n * following properties:\n *
    \n *
  • explicit - specify true if this is explicit tag otherwise false\n * (default is 'true').
  • \n *
  • tag - specify tag (default is 'a0' which means [0])
  • \n *
  • obj - specify ASN1Object which is tagged
  • \n *
\n * @example\n * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});\n * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});\n * hex = d2.getEncodedHex();\n */\nKJUR.asn1.DERTaggedObject = function (params) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n this.hT = \"a0\";\n this.hV = '';\n this.isExplicit = true;\n this.asn1Object = null;\n /**\n * set value by an ASN1Object\n * @name setString\n * @memberOf KJUR.asn1.DERTaggedObject#\n * @function\n * @param {Boolean} isExplicitFlag flag for explicit/implicit tag\n * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag\n * @param {ASN1Object} asn1Object ASN.1 to encapsulate\n */\n this.setASN1Object = function (isExplicitFlag, tagNoHex, asn1Object) {\n this.hT = tagNoHex;\n this.isExplicit = isExplicitFlag;\n this.asn1Object = asn1Object;\n if (this.isExplicit) {\n this.hV = this.asn1Object.getEncodedHex();\n this.hTLV = null;\n this.isModified = true;\n }\n else {\n this.hV = null;\n this.hTLV = asn1Object.getEncodedHex();\n this.hTLV = this.hTLV.replace(/^../, tagNoHex);\n this.isModified = false;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['tag'] != \"undefined\") {\n this.hT = params['tag'];\n }\n if (typeof params['explicit'] != \"undefined\") {\n this.isExplicit = params['explicit'];\n }\n if (typeof params['obj'] != \"undefined\") {\n this.asn1Object = params['obj'];\n this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/asn1-1.0.js?"); + +/***/ }), + +/***/ "./lib/lib/jsrsasign/yahoo.js": +/*!************************************!*\ + !*** ./lib/lib/jsrsasign/yahoo.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"YAHOO\": () => (/* binding */ YAHOO)\n/* harmony export */ });\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nvar YAHOO = {};\nYAHOO.lang = {\n /**\n * Utility to set up the prototype, constructor and superclass properties to\n * support an inheritance strategy that can chain constructors and methods.\n * Static members will not be inherited.\n *\n * @method extend\n * @static\n * @param {Function} subc the object to modify\n * @param {Function} superc the object to inherit\n * @param {Object} overrides additional properties/methods to add to the\n * subclass prototype. These will override the\n * matching items obtained from the superclass\n * if present.\n */\n extend: function (subc, superc, overrides) {\n if (!superc || !subc) {\n throw new Error(\"YAHOO.lang.extend failed, please check that \" +\n \"all dependencies are included.\");\n }\n var F = function () { };\n F.prototype = superc.prototype;\n subc.prototype = new F();\n subc.prototype.constructor = subc;\n subc.superclass = superc.prototype;\n if (superc.prototype.constructor == Object.prototype.constructor) {\n superc.prototype.constructor = superc;\n }\n if (overrides) {\n var i;\n for (i in overrides) {\n subc.prototype[i] = overrides[i];\n }\n /*\n * IE will not enumerate native functions in a derived object even if the\n * function was overridden. This is a workaround for specific functions\n * we care about on the Object prototype.\n * @property _IEEnumFix\n * @param {Function} r the object to receive the augmentation\n * @param {Function} s the object that supplies the properties to augment\n * @static\n * @private\n */\n var _IEEnumFix = function () { }, ADD = [\"toString\", \"valueOf\"];\n try {\n if (/MSIE/.test(navigator.userAgent)) {\n _IEEnumFix = function (r, s) {\n for (i = 0; i < ADD.length; i = i + 1) {\n var fname = ADD[i], f = s[fname];\n if (typeof f === 'function' && f != Object.prototype[fname]) {\n r[fname] = f;\n }\n }\n };\n }\n }\n catch (ex) { }\n ;\n _IEEnumFix(subc.prototype, overrides);\n }\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/yahoo.js?"); + +/***/ }), + +/***/ "./lib/version.json": +/*!**************************!*\ + !*** ./lib/version.json ***! + \**************************/ +/***/ ((module) => { + +eval("module.exports = {\"version\":\"3.1.0\"};\n\n//# sourceURL=webpack://JSEncrypt/./lib/version.json?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ if(__webpack_module_cache__[moduleId]) { +/******/ return __webpack_module_cache__[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./lib/index.js"); +/******/ __webpack_exports__ = __webpack_exports__.default; +/******/ +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/device_home/pincode/js/pincode.js b/device_home/pincode/js/pincode.js index 2520121..fd03484 100755 --- a/device_home/pincode/js/pincode.js +++ b/device_home/pincode/js/pincode.js @@ -60,7 +60,13 @@ async function sendPinCode(data) { if (xhr.status === 200 || xhr.status === 201) { console.log(`result : ${xhr.responseText}`); if (xhr.responseText === 'retry') { - retryPinCode(); + dots.forEach(function(dot, index) { + dot.classList.add('wrong'); + }); + document.body.className += ' wrong'; + setTimeout(function() { + alert('Failed to input 5 times. A new Pincode has been generated, so check the TV notification.'); + }, 1000); } else { chkPinCode(xhr.responseText === 'true' ? true : false); } @@ -75,17 +81,6 @@ async function sendPinCode(data) { xhr.send(JSON.stringify({ pincode: data.toString("utf8") })); } -function retryPinCode() { - dots.forEach(function(dot, index) { - dot.className += ' wrong'; - }); - document.body.className += ' wrong'; - displayPincode(); - setTimeout(function() { - alert('Failed to input 5 times. A new Pincode has been generated, so check the TV notification.'); - }, 1000); -} - function chkPinCode(returnVal) { if (returnVal) { dots.forEach(function(dot, index) { diff --git a/device_home/service/app_proxy.js b/device_home/service/app_proxy.js index 455530f..0c3d9de 100755 --- a/device_home/service/app_proxy.js +++ b/device_home/service/app_proxy.js @@ -1,6 +1,7 @@ const express = require('express'); const url = require('url'); const AppRouter = require('./app_router'); +const is_tv = webapis.cachedProperty !== undefined; var appRouters = []; var path = null; var currentD2DAppId = null; @@ -20,6 +21,7 @@ function runApp(appId, port, callback) { } else { const urlParam = require('./service').getUrlParam(); const urlObj = url.parse(urlParam, true).query; + urlObj.target = is_tv ? 'tv' : 'fhub'; const appControl = new tizen.ApplicationControl( "http://tizen.org/appcontrol/operation/default", null, null, null, [new tizen.ApplicationControlData( diff --git a/device_home/service/jsencrypt.js b/device_home/service/jsencrypt.js old mode 100644 new mode 100755 index f2b0104..d4591b8 --- a/device_home/service/jsencrypt.js +++ b/device_home/service/jsencrypt.js @@ -1,5378 +1,261 @@ -(function (global, factory) { - typeof exports === 'object' && typeof module !== 'undefined' ? factory(exports) : - typeof define === 'function' && define.amd ? define(['exports'], factory) : - (factory((global.JSEncrypt = {}))); -}(this, (function (exports) { 'use strict'; - -const crypto = require('crypto'); -var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; - -Math.random = function() { - const byteArray = new Uint32Array(1); - return (crypto.getRandomValues(byteArray))[0]; -} - -function int2char(n) { - return BI_RM.charAt(n); -} -//#region BIT_OPERATIONS -// (public) this & a -function op_and(x, y) { - return x & y; -} -// (public) this | a -function op_or(x, y) { - return x | y; -} -// (public) this ^ a -function op_xor(x, y) { - return x ^ y; -} -// (public) this & ~a -function op_andnot(x, y) { - return x & ~y; -} -// return index of lowest 1-bit in x, x < 2^31 -function lbit(x) { - if (x == 0) { - return -1; - } - var r = 0; - if ((x & 0xffff) == 0) { - x >>= 16; - r += 16; - } - if ((x & 0xff) == 0) { - x >>= 8; - r += 8; - } - if ((x & 0xf) == 0) { - x >>= 4; - r += 4; - } - if ((x & 3) == 0) { - x >>= 2; - r += 2; - } - if ((x & 1) == 0) { - ++r; - } - return r; -} -// return number of 1 bits in x -function cbit(x) { - var r = 0; - while (x != 0) { - x &= x - 1; - ++r; - } - return r; -} -//#endregion BIT_OPERATIONS - -var b64map = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; -var b64pad = "="; -function hex2b64(h) { - var i; - var c; - var ret = ""; - for (i = 0; i + 3 <= h.length; i += 3) { - c = parseInt(h.substring(i, i + 3), 16); - ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63); - } - if (i + 1 == h.length) { - c = parseInt(h.substring(i, i + 1), 16); - ret += b64map.charAt(c << 2); - } - else if (i + 2 == h.length) { - c = parseInt(h.substring(i, i + 2), 16); - ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4); - } - while ((ret.length & 3) > 0) { - ret += b64pad; - } - return ret; -} -// convert a base64 string to hex -function b64tohex(s) { - var ret = ""; - var i; - var k = 0; // b64 state, 0-3 - var slop = 0; - for (i = 0; i < s.length; ++i) { - if (s.charAt(i) == b64pad) { - break; - } - var v = b64map.indexOf(s.charAt(i)); - if (v < 0) { - continue; - } - if (k == 0) { - ret += int2char(v >> 2); - slop = v & 3; - k = 1; - } - else if (k == 1) { - ret += int2char((slop << 2) | (v >> 4)); - slop = v & 0xf; - k = 2; - } - else if (k == 2) { - ret += int2char(slop); - ret += int2char(v >> 2); - slop = v & 3; - k = 3; - } - else { - ret += int2char((slop << 2) | (v >> 4)); - ret += int2char(v & 0xf); - k = 0; - } - } - if (k == 1) { - ret += int2char(slop << 2); - } - return ret; -} - -/*! ***************************************************************************** -Copyright (c) Microsoft Corporation. All rights reserved. -Licensed under the Apache License, Version 2.0 (the "License"); you may not use -this file except in compliance with the License. You may obtain a copy of the -License at http://www.apache.org/licenses/LICENSE-2.0 -THIS CODE IS PROVIDED ON AN *AS IS* BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY -KIND, EITHER EXPRESS OR IMPLIED, INCLUDING WITHOUT LIMITATION ANY IMPLIED -WARRANTIES OR CONDITIONS OF TITLE, FITNESS FOR A PARTICULAR PURPOSE, -MERCHANTABLITY OR NON-INFRINGEMENT. -See the Apache Version 2.0 License for specific language governing permissions -and limitations under the License. -***************************************************************************** */ -/* global Reflect, Promise */ - -var extendStatics = function(d, b) { - extendStatics = Object.setPrototypeOf || - ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) || - function (d, b) { for (var p in b) if (b.hasOwnProperty(p)) d[p] = b[p]; }; - return extendStatics(d, b); -}; - -function __extends(d, b) { - extendStatics(d, b); - function __() { this.constructor = d; } - d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __()); -} - -// Hex JavaScript decoder -// Copyright (c) 2008-2013 Lapo Luchini -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */ -var decoder; -var Hex = { - decode: function (a) { - var i; - if (decoder === undefined) { - var hex = "0123456789ABCDEF"; - var ignore = " \f\n\r\t\u00A0\u2028\u2029"; - decoder = {}; - for (i = 0; i < 16; ++i) { - decoder[hex.charAt(i)] = i; - } - hex = hex.toLowerCase(); - for (i = 10; i < 16; ++i) { - decoder[hex.charAt(i)] = i; - } - for (i = 0; i < ignore.length; ++i) { - decoder[ignore.charAt(i)] = -1; - } - } - var out = []; - var bits = 0; - var char_count = 0; - for (i = 0; i < a.length; ++i) { - var c = a.charAt(i); - if (c == "=") { - break; - } - c = decoder[c]; - if (c == -1) { - continue; - } - if (c === undefined) { - throw new Error("Illegal character at offset " + i); - } - bits |= c; - if (++char_count >= 2) { - out[out.length] = bits; - bits = 0; - char_count = 0; - } - else { - bits <<= 4; - } - } - if (char_count) { - throw new Error("Hex encoding incomplete: 4 bits missing"); - } - return out; - } -}; - -// Base64 JavaScript decoder -// Copyright (c) 2008-2013 Lapo Luchini -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */ -var decoder$1; -var Base64 = { - decode: function (a) { - var i; - if (decoder$1 === undefined) { - var b64 = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; - var ignore = "= \f\n\r\t\u00A0\u2028\u2029"; - decoder$1 = Object.create(null); - for (i = 0; i < 64; ++i) { - decoder$1[b64.charAt(i)] = i; - } - for (i = 0; i < ignore.length; ++i) { - decoder$1[ignore.charAt(i)] = -1; - } - } - var out = []; - var bits = 0; - var char_count = 0; - for (i = 0; i < a.length; ++i) { - var c = a.charAt(i); - if (c == "=") { - break; - } - c = decoder$1[c]; - if (c == -1) { - continue; - } - if (c === undefined) { - throw new Error("Illegal character at offset " + i); - } - bits |= c; - if (++char_count >= 4) { - out[out.length] = (bits >> 16); - out[out.length] = (bits >> 8) & 0xFF; - out[out.length] = bits & 0xFF; - bits = 0; - char_count = 0; - } - else { - bits <<= 6; - } - } - switch (char_count) { - case 1: - throw new Error("Base64 encoding incomplete: at least 2 bits missing"); - case 2: - out[out.length] = (bits >> 10); - break; - case 3: - out[out.length] = (bits >> 16); - out[out.length] = (bits >> 8) & 0xFF; - break; - } - return out; - }, - re: /-----BEGIN [^-]+-----([A-Za-z0-9+\/=\s]+)-----END [^-]+-----|begin-base64[^\n]+\n([A-Za-z0-9+\/=\s]+)====/, - unarmor: function (a) { - var m = Base64.re.exec(a); - if (m) { - if (m[1]) { - a = m[1]; - } - else if (m[2]) { - a = m[2]; - } - else { - throw new Error("RegExp out of sync"); - } - } - return Base64.decode(a); - } -}; - -// Big integer base-10 printing library -// Copyright (c) 2014 Lapo Luchini -// Permission to use, copy, modify, and/or distribute this software for any -// purpose with or without fee is hereby granted, provided that the above -// copyright notice and this permission notice appear in all copies. -// -// THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES -// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF -// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR -// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES -// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN -// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF -// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE. -/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */ -var max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256 -var Int10 = /** @class */ (function () { - function Int10(value) { - this.buf = [+value || 0]; - } - Int10.prototype.mulAdd = function (m, c) { - // assert(m <= 256) - var b = this.buf; - var l = b.length; - var i; - var t; - for (i = 0; i < l; ++i) { - t = b[i] * m + c; - if (t < max) { - c = 0; - } - else { - c = 0 | (t / max); - t -= c * max; - } - b[i] = t; - } - if (c > 0) { - b[i] = c; - } - }; - Int10.prototype.sub = function (c) { - // assert(m <= 256) - var b = this.buf; - var l = b.length; - var i; - var t; - for (i = 0; i < l; ++i) { - t = b[i] - c; - if (t < 0) { - t += max; - c = 1; - } - else { - c = 0; - } - b[i] = t; - } - while (b[b.length - 1] === 0) { - b.pop(); - } - }; - Int10.prototype.toString = function (base) { - if ((base || 10) != 10) { - throw new Error("only base 10 is supported"); - } - var b = this.buf; - var s = b[b.length - 1].toString(); - for (var i = b.length - 2; i >= 0; --i) { - s += (max + b[i]).toString().substring(1); - } - return s; - }; - Int10.prototype.valueOf = function () { - var b = this.buf; - var v = 0; - for (var i = b.length - 1; i >= 0; --i) { - v = v * max + b[i]; - } - return v; - }; - Int10.prototype.simplify = function () { - var b = this.buf; - return (b.length == 1) ? b[0] : this; - }; - return Int10; -}()); - -// ASN.1 JavaScript decoder -var ellipsis = "\u2026"; -var reTimeS = /^(\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/; -var reTimeL = /^(\d\d\d\d)(0[1-9]|1[0-2])(0[1-9]|[12]\d|3[01])([01]\d|2[0-3])(?:([0-5]\d)(?:([0-5]\d)(?:[.,](\d{1,3}))?)?)?(Z|[-+](?:[0]\d|1[0-2])([0-5]\d)?)?$/; -function stringCut(str, len) { - if (str.length > len) { - str = str.substring(0, len) + ellipsis; - } - return str; -} -var Stream = /** @class */ (function () { - function Stream(enc, pos) { - this.hexDigits = "0123456789ABCDEF"; - if (enc instanceof Stream) { - this.enc = enc.enc; - this.pos = enc.pos; - } - else { - // enc should be an array or a binary string - this.enc = enc; - this.pos = pos; - } - } - Stream.prototype.get = function (pos) { - if (pos === undefined) { - pos = this.pos++; - } - if (pos >= this.enc.length) { - throw new Error("Requesting byte offset " + pos + " on a stream of length " + this.enc.length); - } - return ("string" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos]; - }; - Stream.prototype.hexByte = function (b) { - return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF); - }; - Stream.prototype.hexDump = function (start, end, raw) { - var s = ""; - for (var i = start; i < end; ++i) { - s += this.hexByte(this.get(i)); - if (raw !== true) { - switch (i & 0xF) { - case 0x7: - s += " "; - break; - case 0xF: - s += "\n"; - break; - default: - s += " "; - } - } - } - return s; - }; - Stream.prototype.isASCII = function (start, end) { - for (var i = start; i < end; ++i) { - var c = this.get(i); - if (c < 32 || c > 176) { - return false; - } - } - return true; - }; - Stream.prototype.parseStringISO = function (start, end) { - var s = ""; - for (var i = start; i < end; ++i) { - s += String.fromCharCode(this.get(i)); - } - return s; - }; - Stream.prototype.parseStringUTF = function (start, end) { - var s = ""; - for (var i = start; i < end;) { - var c = this.get(i++); - if (c < 128) { - s += String.fromCharCode(c); - } - else if ((c > 191) && (c < 224)) { - s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F)); - } - else { - s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F)); - } - } - return s; - }; - Stream.prototype.parseStringBMP = function (start, end) { - var str = ""; - var hi; - var lo; - for (var i = start; i < end;) { - hi = this.get(i++); - lo = this.get(i++); - str += String.fromCharCode((hi << 8) | lo); - } - return str; - }; - Stream.prototype.parseTime = function (start, end, shortYear) { - var s = this.parseStringISO(start, end); - var m = (shortYear ? reTimeS : reTimeL).exec(s); - if (!m) { - return "Unrecognized time: " + s; - } - if (shortYear) { - // to avoid querying the timer, use the fixed range [1970, 2069] - // it will conform with ITU X.400 [-10, +40] sliding window until 2030 - m[1] = +m[1]; - m[1] += (+m[1] < 70) ? 2000 : 1900; - } - s = m[1] + "-" + m[2] + "-" + m[3] + " " + m[4]; - if (m[5]) { - s += ":" + m[5]; - if (m[6]) { - s += ":" + m[6]; - if (m[7]) { - s += "." + m[7]; - } - } - } - if (m[8]) { - s += " UTC"; - if (m[8] != "Z") { - s += m[8]; - if (m[9]) { - s += ":" + m[9]; - } - } - } - return s; - }; - Stream.prototype.parseInteger = function (start, end) { - var v = this.get(start); - var neg = (v > 127); - var pad = neg ? 255 : 0; - var len; - var s = ""; - // skip unuseful bits (not allowed in DER) - while (v == pad && ++start < end) { - v = this.get(start); - } - len = end - start; - if (len === 0) { - return neg ? -1 : 0; - } - // show bit length of huge integers - if (len > 4) { - s = v; - len <<= 3; - while (((+s ^ pad) & 0x80) == 0) { - s = +s << 1; - --len; - } - s = "(" + len + " bit)\n"; - } - // decode the integer - if (neg) { - v = v - 256; - } - var n = new Int10(v); - for (var i = start + 1; i < end; ++i) { - n.mulAdd(256, this.get(i)); - } - return s + n.toString(); - }; - Stream.prototype.parseBitString = function (start, end, maxLength) { - var unusedBit = this.get(start); - var lenBit = ((end - start - 1) << 3) - unusedBit; - var intro = "(" + lenBit + " bit)\n"; - var s = ""; - for (var i = start + 1; i < end; ++i) { - var b = this.get(i); - var skip = (i == end - 1) ? unusedBit : 0; - for (var j = 7; j >= skip; --j) { - s += (b >> j) & 1 ? "1" : "0"; - } - if (s.length > maxLength) { - return intro + stringCut(s, maxLength); - } - } - return intro + s; - }; - Stream.prototype.parseOctetString = function (start, end, maxLength) { - if (this.isASCII(start, end)) { - return stringCut(this.parseStringISO(start, end), maxLength); - } - var len = end - start; - var s = "(" + len + " byte)\n"; - maxLength /= 2; // we work in bytes - if (len > maxLength) { - end = start + maxLength; - } - for (var i = start; i < end; ++i) { - s += this.hexByte(this.get(i)); - } - if (len > maxLength) { - s += ellipsis; - } - return s; - }; - Stream.prototype.parseOID = function (start, end, maxLength) { - var s = ""; - var n = new Int10(); - var bits = 0; - for (var i = start; i < end; ++i) { - var v = this.get(i); - n.mulAdd(128, v & 0x7F); - bits += 7; - if (!(v & 0x80)) { // finished - if (s === "") { - n = n.simplify(); - if (n instanceof Int10) { - n.sub(80); - s = "2." + n.toString(); - } - else { - var m = n < 80 ? n < 40 ? 0 : 1 : 2; - s = m + "." + (n - m * 40); - } - } - else { - s += "." + n.toString(); - } - if (s.length > maxLength) { - return stringCut(s, maxLength); - } - n = new Int10(); - bits = 0; - } - } - if (bits > 0) { - s += ".incomplete"; - } - return s; - }; - return Stream; -}()); -var ASN1 = /** @class */ (function () { - function ASN1(stream, header, length, tag, sub) { - if (!(tag instanceof ASN1Tag)) { - throw new Error("Invalid tag value."); - } - this.stream = stream; - this.header = header; - this.length = length; - this.tag = tag; - this.sub = sub; - } - ASN1.prototype.typeName = function () { - switch (this.tag.tagClass) { - case 0: // universal - switch (this.tag.tagNumber) { - case 0x00: - return "EOC"; - case 0x01: - return "BOOLEAN"; - case 0x02: - return "INTEGER"; - case 0x03: - return "BIT_STRING"; - case 0x04: - return "OCTET_STRING"; - case 0x05: - return "NULL"; - case 0x06: - return "OBJECT_IDENTIFIER"; - case 0x07: - return "ObjectDescriptor"; - case 0x08: - return "EXTERNAL"; - case 0x09: - return "REAL"; - case 0x0A: - return "ENUMERATED"; - case 0x0B: - return "EMBEDDED_PDV"; - case 0x0C: - return "UTF8String"; - case 0x10: - return "SEQUENCE"; - case 0x11: - return "SET"; - case 0x12: - return "NumericString"; - case 0x13: - return "PrintableString"; // ASCII subset - case 0x14: - return "TeletexString"; // aka T61String - case 0x15: - return "VideotexString"; - case 0x16: - return "IA5String"; // ASCII - case 0x17: - return "UTCTime"; - case 0x18: - return "GeneralizedTime"; - case 0x19: - return "GraphicString"; - case 0x1A: - return "VisibleString"; // ASCII subset - case 0x1B: - return "GeneralString"; - case 0x1C: - return "UniversalString"; - case 0x1E: - return "BMPString"; - } - return "Universal_" + this.tag.tagNumber.toString(); - case 1: - return "Application_" + this.tag.tagNumber.toString(); - case 2: - return "[" + this.tag.tagNumber.toString() + "]"; // Context - case 3: - return "Private_" + this.tag.tagNumber.toString(); - } - }; - ASN1.prototype.content = function (maxLength) { - if (this.tag === undefined) { - return null; - } - if (maxLength === undefined) { - maxLength = Infinity; - } - var content = this.posContent(); - var len = Math.abs(this.length); - if (!this.tag.isUniversal()) { - if (this.sub !== null) { - return "(" + this.sub.length + " elem)"; - } - return this.stream.parseOctetString(content, content + len, maxLength); - } - switch (this.tag.tagNumber) { - case 0x01: // BOOLEAN - return (this.stream.get(content) === 0) ? "false" : "true"; - case 0x02: // INTEGER - return this.stream.parseInteger(content, content + len); - case 0x03: // BIT_STRING - return this.sub ? "(" + this.sub.length + " elem)" : - this.stream.parseBitString(content, content + len, maxLength); - case 0x04: // OCTET_STRING - return this.sub ? "(" + this.sub.length + " elem)" : - this.stream.parseOctetString(content, content + len, maxLength); - // case 0x05: // NULL - case 0x06: // OBJECT_IDENTIFIER - return this.stream.parseOID(content, content + len, maxLength); - // case 0x07: // ObjectDescriptor - // case 0x08: // EXTERNAL - // case 0x09: // REAL - // case 0x0A: // ENUMERATED - // case 0x0B: // EMBEDDED_PDV - case 0x10: // SEQUENCE - case 0x11: // SET - if (this.sub !== null) { - return "(" + this.sub.length + " elem)"; - } - else { - return "(no elem)"; - } - case 0x0C: // UTF8String - return stringCut(this.stream.parseStringUTF(content, content + len), maxLength); - case 0x12: // NumericString - case 0x13: // PrintableString - case 0x14: // TeletexString - case 0x15: // VideotexString - case 0x16: // IA5String - // case 0x19: // GraphicString - case 0x1A: // VisibleString - // case 0x1B: // GeneralString - // case 0x1C: // UniversalString - return stringCut(this.stream.parseStringISO(content, content + len), maxLength); - case 0x1E: // BMPString - return stringCut(this.stream.parseStringBMP(content, content + len), maxLength); - case 0x17: // UTCTime - case 0x18: // GeneralizedTime - return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17)); - } - return null; - }; - ASN1.prototype.toString = function () { - return this.typeName() + "@" + this.stream.pos + "[header:" + this.header + ",length:" + this.length + ",sub:" + ((this.sub === null) ? "null" : this.sub.length) + "]"; - }; - ASN1.prototype.toPrettyString = function (indent) { - if (indent === undefined) { - indent = ""; - } - var s = indent + this.typeName() + " @" + this.stream.pos; - if (this.length >= 0) { - s += "+"; - } - s += this.length; - if (this.tag.tagConstructed) { - s += " (constructed)"; - } - else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) { - s += " (encapsulates)"; - } - s += "\n"; - if (this.sub !== null) { - indent += " "; - for (var i = 0, max = this.sub.length; i < max; ++i) { - s += this.sub[i].toPrettyString(indent); - } - } - return s; - }; - ASN1.prototype.posStart = function () { - return this.stream.pos; - }; - ASN1.prototype.posContent = function () { - return this.stream.pos + this.header; - }; - ASN1.prototype.posEnd = function () { - return this.stream.pos + this.header + Math.abs(this.length); - }; - ASN1.prototype.toHexString = function () { - return this.stream.hexDump(this.posStart(), this.posEnd(), true); - }; - ASN1.decodeLength = function (stream) { - var buf = stream.get(); - var len = buf & 0x7F; - if (len == buf) { - return len; - } - // no reason to use Int10, as it would be a huge buffer anyways - if (len > 6) { - throw new Error("Length over 48 bits not supported at position " + (stream.pos - 1)); - } - if (len === 0) { - return null; - } // undefined - buf = 0; - for (var i = 0; i < len; ++i) { - buf = (buf * 256) + stream.get(); - } - return buf; - }; - /** - * Retrieve the hexadecimal value (as a string) of the current ASN.1 element - * @returns {string} - * @public - */ - ASN1.prototype.getHexStringValue = function () { - var hexString = this.toHexString(); - var offset = this.header * 2; - var length = this.length * 2; - return hexString.substr(offset, length); - }; - ASN1.decode = function (str) { - var stream; - if (!(str instanceof Stream)) { - stream = new Stream(str, 0); - } - else { - stream = str; - } - var streamStart = new Stream(stream); - var tag = new ASN1Tag(stream); - var len = ASN1.decodeLength(stream); - var start = stream.pos; - var header = start - streamStart.pos; - var sub = null; - var getSub = function () { - var ret = []; - if (len !== null) { - // definite length - var end = start + len; - while (stream.pos < end) { - ret[ret.length] = ASN1.decode(stream); - } - if (stream.pos != end) { - throw new Error("Content size is not correct for container starting at offset " + start); - } - } - else { - // undefined length - try { - for (;;) { - var s = ASN1.decode(stream); - if (s.tag.isEOC()) { - break; - } - ret[ret.length] = s; - } - len = start - stream.pos; // undefined lengths are represented as negative values - } - catch (e) { - throw new Error("Exception while decoding undefined length content: " + e); - } - } - return ret; - }; - if (tag.tagConstructed) { - // must have valid content - sub = getSub(); - } - else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) { - // sometimes BitString and OctetString are used to encapsulate ASN.1 - try { - if (tag.tagNumber == 0x03) { - if (stream.get() != 0) { - throw new Error("BIT STRINGs with unused bits cannot encapsulate."); - } - } - sub = getSub(); - for (var i = 0; i < sub.length; ++i) { - if (sub[i].tag.isEOC()) { - throw new Error("EOC is not supposed to be actual content."); - } - } - } - catch (e) { - // but silently ignore when they don't - sub = null; - } - } - if (sub === null) { - if (len === null) { - throw new Error("We can't skip over an invalid tag with undefined length at offset " + start); - } - stream.pos = start + Math.abs(len); - } - return new ASN1(streamStart, header, len, tag, sub); - }; - return ASN1; -}()); -var ASN1Tag = /** @class */ (function () { - function ASN1Tag(stream) { - var buf = stream.get(); - this.tagClass = buf >> 6; - this.tagConstructed = ((buf & 0x20) !== 0); - this.tagNumber = buf & 0x1F; - if (this.tagNumber == 0x1F) { // long tag - var n = new Int10(); - do { - buf = stream.get(); - n.mulAdd(128, buf & 0x7F); - } while (buf & 0x80); - this.tagNumber = n.simplify(); - } - } - ASN1Tag.prototype.isUniversal = function () { - return this.tagClass === 0x00; - }; - ASN1Tag.prototype.isEOC = function () { - return this.tagClass === 0x00 && this.tagNumber === 0x00; - }; - return ASN1Tag; -}()); - -// Copyright (c) 2005 Tom Wu -// Bits per digit -var dbits; -// JavaScript engine analysis -var canary = 0xdeadbeefcafe; -var j_lm = ((canary & 0xffffff) == 0xefcafe); -//#region -var lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997]; -var lplim = (1 << 26) / lowprimes[lowprimes.length - 1]; -//#endregion -// (public) Constructor -var BigInteger = /** @class */ (function () { - function BigInteger(a, b, c) { - if (a != null) { - if ("number" == typeof a) { - this.fromNumber(a, b, c); - } - else if (b == null && "string" != typeof a) { - this.fromString(a, 256); - } - else { - this.fromString(a, b); - } - } - } - //#region PUBLIC - // BigInteger.prototype.toString = bnToString; - // (public) return string representation in given radix - BigInteger.prototype.toString = function (b) { - if (this.s < 0) { - return "-" + this.negate().toString(b); - } - var k; - if (b == 16) { - k = 4; - } - else if (b == 8) { - k = 3; - } - else if (b == 2) { - k = 1; - } - else if (b == 32) { - k = 5; - } - else if (b == 4) { - k = 2; - } - else { - return this.toRadix(b); - } - var km = (1 << k) - 1; - var d; - var m = false; - var r = ""; - var i = this.t; - var p = this.DB - (i * this.DB) % k; - if (i-- > 0) { - if (p < this.DB && (d = this[i] >> p) > 0) { - m = true; - r = int2char(d); - } - while (i >= 0) { - if (p < k) { - d = (this[i] & ((1 << p) - 1)) << (k - p); - d |= this[--i] >> (p += this.DB - k); - } - else { - d = (this[i] >> (p -= k)) & km; - if (p <= 0) { - p += this.DB; - --i; - } - } - if (d > 0) { - m = true; - } - if (m) { - r += int2char(d); - } - } - } - return m ? r : "0"; - }; - // BigInteger.prototype.negate = bnNegate; - // (public) -this - BigInteger.prototype.negate = function () { - var r = nbi(); - BigInteger.ZERO.subTo(this, r); - return r; - }; - // BigInteger.prototype.abs = bnAbs; - // (public) |this| - BigInteger.prototype.abs = function () { - return (this.s < 0) ? this.negate() : this; - }; - // BigInteger.prototype.compareTo = bnCompareTo; - // (public) return + if this > a, - if this < a, 0 if equal - BigInteger.prototype.compareTo = function (a) { - var r = this.s - a.s; - if (r != 0) { - return r; - } - var i = this.t; - r = i - a.t; - if (r != 0) { - return (this.s < 0) ? -r : r; - } - while (--i >= 0) { - if ((r = this[i] - a[i]) != 0) { - return r; - } - } - return 0; - }; - // BigInteger.prototype.bitLength = bnBitLength; - // (public) return the number of bits in "this" - BigInteger.prototype.bitLength = function () { - if (this.t <= 0) { - return 0; - } - return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM)); - }; - // BigInteger.prototype.mod = bnMod; - // (public) this mod a - BigInteger.prototype.mod = function (a) { - var r = nbi(); - this.abs().divRemTo(a, null, r); - if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) { - a.subTo(r, r); - } - return r; - }; - // BigInteger.prototype.modPowInt = bnModPowInt; - // (public) this^e % m, 0 <= e < 2^32 - BigInteger.prototype.modPowInt = function (e, m) { - var z; - if (e < 256 || m.isEven()) { - z = new Classic(m); - } - else { - z = new Montgomery(m); - } - return this.exp(e, z); - }; - // BigInteger.prototype.clone = bnClone; - // (public) - BigInteger.prototype.clone = function () { - var r = nbi(); - this.copyTo(r); - return r; - }; - // BigInteger.prototype.intValue = bnIntValue; - // (public) return value as integer - BigInteger.prototype.intValue = function () { - if (this.s < 0) { - if (this.t == 1) { - return this[0] - this.DV; - } - else if (this.t == 0) { - return -1; - } - } - else if (this.t == 1) { - return this[0]; - } - else if (this.t == 0) { - return 0; - } - // assumes 16 < DB < 32 - return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0]; - }; - // BigInteger.prototype.byteValue = bnByteValue; - // (public) return value as byte - BigInteger.prototype.byteValue = function () { - return (this.t == 0) ? this.s : (this[0] << 24) >> 24; - }; - // BigInteger.prototype.shortValue = bnShortValue; - // (public) return value as short (assumes DB>=16) - BigInteger.prototype.shortValue = function () { - return (this.t == 0) ? this.s : (this[0] << 16) >> 16; - }; - // BigInteger.prototype.signum = bnSigNum; - // (public) 0 if this == 0, 1 if this > 0 - BigInteger.prototype.signum = function () { - if (this.s < 0) { - return -1; - } - else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) { - return 0; - } - else { - return 1; - } - }; - // BigInteger.prototype.toByteArray = bnToByteArray; - // (public) convert to bigendian byte array - BigInteger.prototype.toByteArray = function () { - var i = this.t; - var r = []; - r[0] = this.s; - var p = this.DB - (i * this.DB) % 8; - var d; - var k = 0; - if (i-- > 0) { - if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) { - r[k++] = d | (this.s << (this.DB - p)); - } - while (i >= 0) { - if (p < 8) { - d = (this[i] & ((1 << p) - 1)) << (8 - p); - d |= this[--i] >> (p += this.DB - 8); - } - else { - d = (this[i] >> (p -= 8)) & 0xff; - if (p <= 0) { - p += this.DB; - --i; - } - } - if ((d & 0x80) != 0) { - d |= -256; - } - if (k == 0 && (this.s & 0x80) != (d & 0x80)) { - ++k; - } - if (k > 0 || d != this.s) { - r[k++] = d; - } - } - } - return r; - }; - // BigInteger.prototype.equals = bnEquals; - BigInteger.prototype.equals = function (a) { - return (this.compareTo(a) == 0); - }; - // BigInteger.prototype.min = bnMin; - BigInteger.prototype.min = function (a) { - return (this.compareTo(a) < 0) ? this : a; - }; - // BigInteger.prototype.max = bnMax; - BigInteger.prototype.max = function (a) { - return (this.compareTo(a) > 0) ? this : a; - }; - // BigInteger.prototype.and = bnAnd; - BigInteger.prototype.and = function (a) { - var r = nbi(); - this.bitwiseTo(a, op_and, r); - return r; - }; - // BigInteger.prototype.or = bnOr; - BigInteger.prototype.or = function (a) { - var r = nbi(); - this.bitwiseTo(a, op_or, r); - return r; - }; - // BigInteger.prototype.xor = bnXor; - BigInteger.prototype.xor = function (a) { - var r = nbi(); - this.bitwiseTo(a, op_xor, r); - return r; - }; - // BigInteger.prototype.andNot = bnAndNot; - BigInteger.prototype.andNot = function (a) { - var r = nbi(); - this.bitwiseTo(a, op_andnot, r); - return r; - }; - // BigInteger.prototype.not = bnNot; - // (public) ~this - BigInteger.prototype.not = function () { - var r = nbi(); - for (var i = 0; i < this.t; ++i) { - r[i] = this.DM & ~this[i]; - } - r.t = this.t; - r.s = ~this.s; - return r; - }; - // BigInteger.prototype.shiftLeft = bnShiftLeft; - // (public) this << n - BigInteger.prototype.shiftLeft = function (n) { - var r = nbi(); - if (n < 0) { - this.rShiftTo(-n, r); - } - else { - this.lShiftTo(n, r); - } - return r; - }; - // BigInteger.prototype.shiftRight = bnShiftRight; - // (public) this >> n - BigInteger.prototype.shiftRight = function (n) { - var r = nbi(); - if (n < 0) { - this.lShiftTo(-n, r); - } - else { - this.rShiftTo(n, r); - } - return r; - }; - // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit; - // (public) returns index of lowest 1-bit (or -1 if none) - BigInteger.prototype.getLowestSetBit = function () { - for (var i = 0; i < this.t; ++i) { - if (this[i] != 0) { - return i * this.DB + lbit(this[i]); - } - } - if (this.s < 0) { - return this.t * this.DB; - } - return -1; - }; - // BigInteger.prototype.bitCount = bnBitCount; - // (public) return number of set bits - BigInteger.prototype.bitCount = function () { - var r = 0; - var x = this.s & this.DM; - for (var i = 0; i < this.t; ++i) { - r += cbit(this[i] ^ x); - } - return r; - }; - // BigInteger.prototype.testBit = bnTestBit; - // (public) true iff nth bit is set - BigInteger.prototype.testBit = function (n) { - var j = Math.floor(n / this.DB); - if (j >= this.t) { - return (this.s != 0); - } - return ((this[j] & (1 << (n % this.DB))) != 0); - }; - // BigInteger.prototype.setBit = bnSetBit; - // (public) this | (1< 1) { - var g2 = nbi(); - z.sqrTo(g[1], g2); - while (n <= km) { - g[n] = nbi(); - z.mulTo(g2, g[n - 2], g[n]); - n += 2; - } - } - var j = e.t - 1; - var w; - var is1 = true; - var r2 = nbi(); - var t; - i = nbits(e[j]) - 1; - while (j >= 0) { - if (i >= k1) { - w = (e[j] >> (i - k1)) & km; - } - else { - w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i); - if (j > 0) { - w |= e[j - 1] >> (this.DB + i - k1); - } - } - n = k; - while ((w & 1) == 0) { - w >>= 1; - --n; - } - if ((i -= n) < 0) { - i += this.DB; - --j; - } - if (is1) { // ret == 1, don't bother squaring or multiplying it - g[w].copyTo(r); - is1 = false; - } - else { - while (n > 1) { - z.sqrTo(r, r2); - z.sqrTo(r2, r); - n -= 2; - } - if (n > 0) { - z.sqrTo(r, r2); - } - else { - t = r; - r = r2; - r2 = t; - } - z.mulTo(r2, g[w], r); - } - while (j >= 0 && (e[j] & (1 << i)) == 0) { - z.sqrTo(r, r2); - t = r; - r = r2; - r2 = t; - if (--i < 0) { - i = this.DB - 1; - --j; - } - } - } - return z.revert(r); - }; - // BigInteger.prototype.modInverse = bnModInverse; - // (public) 1/this % m (HAC 14.61) - BigInteger.prototype.modInverse = function (m) { - var ac = m.isEven(); - if ((this.isEven() && ac) || m.signum() == 0) { - return BigInteger.ZERO; - } - var u = m.clone(); - var v = this.clone(); - var a = nbv(1); - var b = nbv(0); - var c = nbv(0); - var d = nbv(1); - while (u.signum() != 0) { - while (u.isEven()) { - u.rShiftTo(1, u); - if (ac) { - if (!a.isEven() || !b.isEven()) { - a.addTo(this, a); - b.subTo(m, b); - } - a.rShiftTo(1, a); - } - else if (!b.isEven()) { - b.subTo(m, b); - } - b.rShiftTo(1, b); - } - while (v.isEven()) { - v.rShiftTo(1, v); - if (ac) { - if (!c.isEven() || !d.isEven()) { - c.addTo(this, c); - d.subTo(m, d); - } - c.rShiftTo(1, c); - } - else if (!d.isEven()) { - d.subTo(m, d); - } - d.rShiftTo(1, d); - } - if (u.compareTo(v) >= 0) { - u.subTo(v, u); - if (ac) { - a.subTo(c, a); - } - b.subTo(d, b); - } - else { - v.subTo(u, v); - if (ac) { - c.subTo(a, c); - } - d.subTo(b, d); - } - } - if (v.compareTo(BigInteger.ONE) != 0) { - return BigInteger.ZERO; - } - if (d.compareTo(m) >= 0) { - return d.subtract(m); - } - if (d.signum() < 0) { - d.addTo(m, d); - } - else { - return d; - } - if (d.signum() < 0) { - return d.add(m); - } - else { - return d; - } - }; - // BigInteger.prototype.pow = bnPow; - // (public) this^e - BigInteger.prototype.pow = function (e) { - return this.exp(e, new NullExp()); - }; - // BigInteger.prototype.gcd = bnGCD; - // (public) gcd(this,a) (HAC 14.54) - BigInteger.prototype.gcd = function (a) { - var x = (this.s < 0) ? this.negate() : this.clone(); - var y = (a.s < 0) ? a.negate() : a.clone(); - if (x.compareTo(y) < 0) { - var t = x; - x = y; - y = t; - } - var i = x.getLowestSetBit(); - var g = y.getLowestSetBit(); - if (g < 0) { - return x; - } - if (i < g) { - g = i; - } - if (g > 0) { - x.rShiftTo(g, x); - y.rShiftTo(g, y); - } - while (x.signum() > 0) { - if ((i = x.getLowestSetBit()) > 0) { - x.rShiftTo(i, x); - } - if ((i = y.getLowestSetBit()) > 0) { - y.rShiftTo(i, y); - } - if (x.compareTo(y) >= 0) { - x.subTo(y, x); - x.rShiftTo(1, x); - } - else { - y.subTo(x, y); - y.rShiftTo(1, y); - } - } - if (g > 0) { - y.lShiftTo(g, y); - } - return y; - }; - // BigInteger.prototype.isProbablePrime = bnIsProbablePrime; - // (public) test primality with certainty >= 1-.5^t - BigInteger.prototype.isProbablePrime = function (t) { - var i; - var x = this.abs(); - if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) { - for (i = 0; i < lowprimes.length; ++i) { - if (x[0] == lowprimes[i]) { - return true; - } - } - return false; - } - if (x.isEven()) { - return false; - } - i = 1; - while (i < lowprimes.length) { - var m = lowprimes[i]; - var j = i + 1; - while (j < lowprimes.length && m < lplim) { - m *= lowprimes[j++]; - } - m = x.modInt(m); - while (i < j) { - if (m % lowprimes[i++] == 0) { - return false; - } - } - } - return x.millerRabin(t); - }; - //#endregion PUBLIC - //#region PROTECTED - // BigInteger.prototype.copyTo = bnpCopyTo; - // (protected) copy this to r - BigInteger.prototype.copyTo = function (r) { - for (var i = this.t - 1; i >= 0; --i) { - r[i] = this[i]; - } - r.t = this.t; - r.s = this.s; - }; - // BigInteger.prototype.fromInt = bnpFromInt; - // (protected) set from integer value x, -DV <= x < DV - BigInteger.prototype.fromInt = function (x) { - this.t = 1; - this.s = (x < 0) ? -1 : 0; - if (x > 0) { - this[0] = x; - } - else if (x < -1) { - this[0] = x + this.DV; - } - else { - this.t = 0; - } - }; - // BigInteger.prototype.fromString = bnpFromString; - // (protected) set from string and radix - BigInteger.prototype.fromString = function (s, b) { - var k; - if (b == 16) { - k = 4; - } - else if (b == 8) { - k = 3; - } - else if (b == 256) { - k = 8; - /* byte array */ - } - else if (b == 2) { - k = 1; - } - else if (b == 32) { - k = 5; - } - else if (b == 4) { - k = 2; - } - else { - this.fromRadix(s, b); - return; - } - this.t = 0; - this.s = 0; - var i = s.length; - var mi = false; - var sh = 0; - while (--i >= 0) { - var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i); - if (x < 0) { - if (s.charAt(i) == "-") { - mi = true; - } - continue; - } - mi = false; - if (sh == 0) { - this[this.t++] = x; - } - else if (sh + k > this.DB) { - this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh; - this[this.t++] = (x >> (this.DB - sh)); - } - else { - this[this.t - 1] |= x << sh; - } - sh += k; - if (sh >= this.DB) { - sh -= this.DB; - } - } - if (k == 8 && ((+s[0]) & 0x80) != 0) { - this.s = -1; - if (sh > 0) { - this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh; - } - } - this.clamp(); - if (mi) { - BigInteger.ZERO.subTo(this, this); - } - }; - // BigInteger.prototype.clamp = bnpClamp; - // (protected) clamp off excess high words - BigInteger.prototype.clamp = function () { - var c = this.s & this.DM; - while (this.t > 0 && this[this.t - 1] == c) { - --this.t; - } - }; - // BigInteger.prototype.dlShiftTo = bnpDLShiftTo; - // (protected) r = this << n*DB - BigInteger.prototype.dlShiftTo = function (n, r) { - var i; - for (i = this.t - 1; i >= 0; --i) { - r[i + n] = this[i]; - } - for (i = n - 1; i >= 0; --i) { - r[i] = 0; - } - r.t = this.t + n; - r.s = this.s; - }; - // BigInteger.prototype.drShiftTo = bnpDRShiftTo; - // (protected) r = this >> n*DB - BigInteger.prototype.drShiftTo = function (n, r) { - for (var i = n; i < this.t; ++i) { - r[i - n] = this[i]; - } - r.t = Math.max(this.t - n, 0); - r.s = this.s; - }; - // BigInteger.prototype.lShiftTo = bnpLShiftTo; - // (protected) r = this << n - BigInteger.prototype.lShiftTo = function (n, r) { - var bs = n % this.DB; - var cbs = this.DB - bs; - var bm = (1 << cbs) - 1; - var ds = Math.floor(n / this.DB); - var c = (this.s << bs) & this.DM; - for (var i = this.t - 1; i >= 0; --i) { - r[i + ds + 1] = (this[i] >> cbs) | c; - c = (this[i] & bm) << bs; - } - for (var i = ds - 1; i >= 0; --i) { - r[i] = 0; - } - r[ds] = c; - r.t = this.t + ds + 1; - r.s = this.s; - r.clamp(); - }; - // BigInteger.prototype.rShiftTo = bnpRShiftTo; - // (protected) r = this >> n - BigInteger.prototype.rShiftTo = function (n, r) { - r.s = this.s; - var ds = Math.floor(n / this.DB); - if (ds >= this.t) { - r.t = 0; - return; - } - var bs = n % this.DB; - var cbs = this.DB - bs; - var bm = (1 << bs) - 1; - r[0] = this[ds] >> bs; - for (var i = ds + 1; i < this.t; ++i) { - r[i - ds - 1] |= (this[i] & bm) << cbs; - r[i - ds] = this[i] >> bs; - } - if (bs > 0) { - r[this.t - ds - 1] |= (this.s & bm) << cbs; - } - r.t = this.t - ds; - r.clamp(); - }; - // BigInteger.prototype.subTo = bnpSubTo; - // (protected) r = this - a - BigInteger.prototype.subTo = function (a, r) { - var i = 0; - var c = 0; - var m = Math.min(a.t, this.t); - while (i < m) { - c += this[i] - a[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - if (a.t < this.t) { - c -= a.s; - while (i < this.t) { - c += this[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while (i < a.t) { - c -= a[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c -= a.s; - } - r.s = (c < 0) ? -1 : 0; - if (c < -1) { - r[i++] = this.DV + c; - } - else if (c > 0) { - r[i++] = c; - } - r.t = i; - r.clamp(); - }; - // BigInteger.prototype.multiplyTo = bnpMultiplyTo; - // (protected) r = this * a, r != this,a (HAC 14.12) - // "this" should be the larger one if appropriate. - BigInteger.prototype.multiplyTo = function (a, r) { - var x = this.abs(); - var y = a.abs(); - var i = x.t; - r.t = i + y.t; - while (--i >= 0) { - r[i] = 0; - } - for (i = 0; i < y.t; ++i) { - r[i + x.t] = x.am(0, y[i], r, i, 0, x.t); - } - r.s = 0; - r.clamp(); - if (this.s != a.s) { - BigInteger.ZERO.subTo(r, r); - } - }; - // BigInteger.prototype.squareTo = bnpSquareTo; - // (protected) r = this^2, r != this (HAC 14.16) - BigInteger.prototype.squareTo = function (r) { - var x = this.abs(); - var i = r.t = 2 * x.t; - while (--i >= 0) { - r[i] = 0; - } - for (i = 0; i < x.t - 1; ++i) { - var c = x.am(i, x[i], r, 2 * i, 0, 1); - if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) { - r[i + x.t] -= x.DV; - r[i + x.t + 1] = 1; - } - } - if (r.t > 0) { - r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1); - } - r.s = 0; - r.clamp(); - }; - // BigInteger.prototype.divRemTo = bnpDivRemTo; - // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20) - // r != q, this != m. q or r may be null. - BigInteger.prototype.divRemTo = function (m, q, r) { - var pm = m.abs(); - if (pm.t <= 0) { - return; - } - var pt = this.abs(); - if (pt.t < pm.t) { - if (q != null) { - q.fromInt(0); - } - if (r != null) { - this.copyTo(r); - } - return; - } - if (r == null) { - r = nbi(); - } - var y = nbi(); - var ts = this.s; - var ms = m.s; - var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus - if (nsh > 0) { - pm.lShiftTo(nsh, y); - pt.lShiftTo(nsh, r); - } - else { - pm.copyTo(y); - pt.copyTo(r); - } - var ys = y.t; - var y0 = y[ys - 1]; - if (y0 == 0) { - return; - } - var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0); - var d1 = this.FV / yt; - var d2 = (1 << this.F1) / yt; - var e = 1 << this.F2; - var i = r.t; - var j = i - ys; - var t = (q == null) ? nbi() : q; - y.dlShiftTo(j, t); - if (r.compareTo(t) >= 0) { - r[r.t++] = 1; - r.subTo(t, r); - } - BigInteger.ONE.dlShiftTo(ys, t); - t.subTo(y, y); // "negative" y so we can replace sub with am later - while (y.t < ys) { - y[y.t++] = 0; - } - while (--j >= 0) { - // Estimate quotient digit - var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2); - if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out - y.dlShiftTo(j, t); - r.subTo(t, r); - while (r[i] < --qd) { - r.subTo(t, r); - } - } - } - if (q != null) { - r.drShiftTo(ys, q); - if (ts != ms) { - BigInteger.ZERO.subTo(q, q); - } - } - r.t = ys; - r.clamp(); - if (nsh > 0) { - r.rShiftTo(nsh, r); - } // Denormalize remainder - if (ts < 0) { - BigInteger.ZERO.subTo(r, r); - } - }; - // BigInteger.prototype.invDigit = bnpInvDigit; - // (protected) return "-1/this % 2^DB"; useful for Mont. reduction - // justification: - // xy == 1 (mod m) - // xy = 1+km - // xy(2-xy) = (1+km)(1-km) - // x[y(2-xy)] = 1-k^2m^2 - // x[y(2-xy)] == 1 (mod m^2) - // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2 - // should reduce x and y(2-xy) by m^2 at each step to keep size bounded. - // JS multiply "overflows" differently from C/C++, so care is needed here. - BigInteger.prototype.invDigit = function () { - if (this.t < 1) { - return 0; - } - var x = this[0]; - if ((x & 1) == 0) { - return 0; - } - var y = x & 3; // y == 1/x mod 2^2 - y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4 - y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8 - y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16 - // last step - calculate inverse mod DV directly; - // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints - y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits - // we really want the negative inverse, and -DV < y < DV - return (y > 0) ? this.DV - y : -y; - }; - // BigInteger.prototype.isEven = bnpIsEven; - // (protected) true iff this is even - BigInteger.prototype.isEven = function () { - return ((this.t > 0) ? (this[0] & 1) : this.s) == 0; - }; - // BigInteger.prototype.exp = bnpExp; - // (protected) this^e, e < 2^32, doing sqr and mul with "r" (HAC 14.79) - BigInteger.prototype.exp = function (e, z) { - if (e > 0xffffffff || e < 1) { - return BigInteger.ONE; - } - var r = nbi(); - var r2 = nbi(); - var g = z.convert(this); - var i = nbits(e) - 1; - g.copyTo(r); - while (--i >= 0) { - z.sqrTo(r, r2); - if ((e & (1 << i)) > 0) { - z.mulTo(r2, g, r); - } - else { - var t = r; - r = r2; - r2 = t; - } - } - return z.revert(r); - }; - // BigInteger.prototype.chunkSize = bnpChunkSize; - // (protected) return x s.t. r^x < DV - BigInteger.prototype.chunkSize = function (r) { - return Math.floor(Math.LN2 * this.DB / Math.log(r)); - }; - // BigInteger.prototype.toRadix = bnpToRadix; - // (protected) convert to radix string - BigInteger.prototype.toRadix = function (b) { - if (b == null) { - b = 10; - } - if (this.signum() == 0 || b < 2 || b > 36) { - return "0"; - } - var cs = this.chunkSize(b); - var a = Math.pow(b, cs); - var d = nbv(a); - var y = nbi(); - var z = nbi(); - var r = ""; - this.divRemTo(d, y, z); - while (y.signum() > 0) { - r = (a + z.intValue()).toString(b).substr(1) + r; - y.divRemTo(d, y, z); - } - return z.intValue().toString(b) + r; - }; - // BigInteger.prototype.fromRadix = bnpFromRadix; - // (protected) convert from radix string - BigInteger.prototype.fromRadix = function (s, b) { - this.fromInt(0); - if (b == null) { - b = 10; - } - var cs = this.chunkSize(b); - var d = Math.pow(b, cs); - var mi = false; - var j = 0; - var w = 0; - for (var i = 0; i < s.length; ++i) { - var x = intAt(s, i); - if (x < 0) { - if (s.charAt(i) == "-" && this.signum() == 0) { - mi = true; - } - continue; - } - w = b * w + x; - if (++j >= cs) { - this.dMultiply(d); - this.dAddOffset(w, 0); - j = 0; - w = 0; - } - } - if (j > 0) { - this.dMultiply(Math.pow(b, j)); - this.dAddOffset(w, 0); - } - if (mi) { - BigInteger.ZERO.subTo(this, this); - } - }; - // BigInteger.prototype.fromNumber = bnpFromNumber; - // (protected) alternate constructor - BigInteger.prototype.fromNumber = function (a, b, c) { - if ("number" == typeof b) { - // new BigInteger(int,int,RNG) - if (a < 2) { - this.fromInt(1); - } - else { - this.fromNumber(a, c); - if (!this.testBit(a - 1)) { - // force MSB set - this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this); - } - if (this.isEven()) { - this.dAddOffset(1, 0); - } // force odd - while (!this.isProbablePrime(b)) { - this.dAddOffset(2, 0); - if (this.bitLength() > a) { - this.subTo(BigInteger.ONE.shiftLeft(a - 1), this); - } - } - } - } - else { - // new BigInteger(int,RNG) - var x = []; - var t = a & 7; - x.length = (a >> 3) + 1; - b.nextBytes(x); - if (t > 0) { - x[0] &= ((1 << t) - 1); - } - else { - x[0] = 0; - } - this.fromString(x, 256); - } - }; - // BigInteger.prototype.bitwiseTo = bnpBitwiseTo; - // (protected) r = this op a (bitwise) - BigInteger.prototype.bitwiseTo = function (a, op, r) { - var i; - var f; - var m = Math.min(a.t, this.t); - for (i = 0; i < m; ++i) { - r[i] = op(this[i], a[i]); - } - if (a.t < this.t) { - f = a.s & this.DM; - for (i = m; i < this.t; ++i) { - r[i] = op(this[i], f); - } - r.t = this.t; - } - else { - f = this.s & this.DM; - for (i = m; i < a.t; ++i) { - r[i] = op(f, a[i]); - } - r.t = a.t; - } - r.s = op(this.s, a.s); - r.clamp(); - }; - // BigInteger.prototype.changeBit = bnpChangeBit; - // (protected) this op (1<>= this.DB; - } - if (a.t < this.t) { - c += a.s; - while (i < this.t) { - c += this[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c += this.s; - } - else { - c += this.s; - while (i < a.t) { - c += a[i]; - r[i++] = c & this.DM; - c >>= this.DB; - } - c += a.s; - } - r.s = (c < 0) ? -1 : 0; - if (c > 0) { - r[i++] = c; - } - else if (c < -1) { - r[i++] = this.DV + c; - } - r.t = i; - r.clamp(); - }; - // BigInteger.prototype.dMultiply = bnpDMultiply; - // (protected) this *= n, this >= 0, 1 < n < DV - BigInteger.prototype.dMultiply = function (n) { - this[this.t] = this.am(0, n - 1, this, 0, 0, this.t); - ++this.t; - this.clamp(); - }; - // BigInteger.prototype.dAddOffset = bnpDAddOffset; - // (protected) this += n << w words, this >= 0 - BigInteger.prototype.dAddOffset = function (n, w) { - if (n == 0) { - return; - } - while (this.t <= w) { - this[this.t++] = 0; - } - this[w] += n; - while (this[w] >= this.DV) { - this[w] -= this.DV; - if (++w >= this.t) { - this[this.t++] = 0; - } - ++this[w]; - } - }; - // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo; - // (protected) r = lower n words of "this * a", a.t <= n - // "this" should be the larger one if appropriate. - BigInteger.prototype.multiplyLowerTo = function (a, n, r) { - var i = Math.min(this.t + a.t, n); - r.s = 0; // assumes a,this >= 0 - r.t = i; - while (i > 0) { - r[--i] = 0; - } - for (var j = r.t - this.t; i < j; ++i) { - r[i + this.t] = this.am(0, a[i], r, i, 0, this.t); - } - for (var j = Math.min(a.t, n); i < j; ++i) { - this.am(0, a[i], r, i, 0, n - i); - } - r.clamp(); - }; - // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo; - // (protected) r = "this * a" without lower n words, n > 0 - // "this" should be the larger one if appropriate. - BigInteger.prototype.multiplyUpperTo = function (a, n, r) { - --n; - var i = r.t = this.t + a.t - n; - r.s = 0; // assumes a,this >= 0 - while (--i >= 0) { - r[i] = 0; - } - for (i = Math.max(n - this.t, 0); i < a.t; ++i) { - r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n); - } - r.clamp(); - r.drShiftTo(1, r); - }; - // BigInteger.prototype.modInt = bnpModInt; - // (protected) this % n, n < 2^26 - BigInteger.prototype.modInt = function (n) { - if (n <= 0) { - return 0; - } - var d = this.DV % n; - var r = (this.s < 0) ? n - 1 : 0; - if (this.t > 0) { - if (d == 0) { - r = this[0] % n; - } - else { - for (var i = this.t - 1; i >= 0; --i) { - r = (d * r + this[i]) % n; - } - } - } - return r; - }; - // BigInteger.prototype.millerRabin = bnpMillerRabin; - // (protected) true if probably prime (HAC 4.24, Miller-Rabin) - BigInteger.prototype.millerRabin = function (t) { - var n1 = this.subtract(BigInteger.ONE); - var k = n1.getLowestSetBit(); - if (k <= 0) { - return false; - } - var r = n1.shiftRight(k); - t = (t + 1) >> 1; - if (t > lowprimes.length) { - t = lowprimes.length; - } - var a = nbi(); - for (var i = 0; i < t; ++i) { - // Pick bases at random, instead of starting at 2 - a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]); - var y = a.modPow(r, this); - if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) { - var j = 1; - while (j++ < k && y.compareTo(n1) != 0) { - y = y.modPowInt(2, this); - if (y.compareTo(BigInteger.ONE) == 0) { - return false; - } - } - if (y.compareTo(n1) != 0) { - return false; - } - } - } - return true; - }; - // BigInteger.prototype.square = bnSquare; - // (public) this^2 - BigInteger.prototype.square = function () { - var r = nbi(); - this.squareTo(r); - return r; - }; - //#region ASYNC - // Public API method - BigInteger.prototype.gcda = function (a, callback) { - var x = (this.s < 0) ? this.negate() : this.clone(); - var y = (a.s < 0) ? a.negate() : a.clone(); - if (x.compareTo(y) < 0) { - var t = x; - x = y; - y = t; - } - var i = x.getLowestSetBit(); - var g = y.getLowestSetBit(); - if (g < 0) { - callback(x); - return; - } - if (i < g) { - g = i; - } - if (g > 0) { - x.rShiftTo(g, x); - y.rShiftTo(g, y); - } - // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen. - var gcda1 = function () { - if ((i = x.getLowestSetBit()) > 0) { - x.rShiftTo(i, x); - } - if ((i = y.getLowestSetBit()) > 0) { - y.rShiftTo(i, y); - } - if (x.compareTo(y) >= 0) { - x.subTo(y, x); - x.rShiftTo(1, x); - } - else { - y.subTo(x, y); - y.rShiftTo(1, y); - } - if (!(x.signum() > 0)) { - if (g > 0) { - y.lShiftTo(g, y); - } - setTimeout(function () { callback(y); }, 0); // escape - } - else { - setTimeout(gcda1, 0); - } - }; - setTimeout(gcda1, 10); - }; - // (protected) alternate constructor - BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) { - if ("number" == typeof b) { - if (a < 2) { - this.fromInt(1); - } - else { - this.fromNumber(a, c); - if (!this.testBit(a - 1)) { - this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), op_or, this); - } - if (this.isEven()) { - this.dAddOffset(1, 0); - } - var bnp_1 = this; - var bnpfn1_1 = function () { - bnp_1.dAddOffset(2, 0); - if (bnp_1.bitLength() > a) { - bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1); - } - if (bnp_1.isProbablePrime(b)) { - setTimeout(function () { callback(); }, 0); // escape - } - else { - setTimeout(bnpfn1_1, 0); - } - }; - setTimeout(bnpfn1_1, 0); - } - } - else { - var x = []; - var t = a & 7; - x.length = (a >> 3) + 1; - b.nextBytes(x); - if (t > 0) { - x[0] &= ((1 << t) - 1); - } - else { - x[0] = 0; - } - this.fromString(x, 256); - } - }; - return BigInteger; -}()); -//#region REDUCERS -//#region NullExp -var NullExp = /** @class */ (function () { - function NullExp() { - } - // NullExp.prototype.convert = nNop; - NullExp.prototype.convert = function (x) { - return x; - }; - // NullExp.prototype.revert = nNop; - NullExp.prototype.revert = function (x) { - return x; - }; - // NullExp.prototype.mulTo = nMulTo; - NullExp.prototype.mulTo = function (x, y, r) { - x.multiplyTo(y, r); - }; - // NullExp.prototype.sqrTo = nSqrTo; - NullExp.prototype.sqrTo = function (x, r) { - x.squareTo(r); - }; - return NullExp; -}()); -// Modular reduction using "classic" algorithm -var Classic = /** @class */ (function () { - function Classic(m) { - this.m = m; - } - // Classic.prototype.convert = cConvert; - Classic.prototype.convert = function (x) { - if (x.s < 0 || x.compareTo(this.m) >= 0) { - return x.mod(this.m); - } - else { - return x; - } - }; - // Classic.prototype.revert = cRevert; - Classic.prototype.revert = function (x) { - return x; - }; - // Classic.prototype.reduce = cReduce; - Classic.prototype.reduce = function (x) { - x.divRemTo(this.m, null, x); - }; - // Classic.prototype.mulTo = cMulTo; - Classic.prototype.mulTo = function (x, y, r) { - x.multiplyTo(y, r); - this.reduce(r); - }; - // Classic.prototype.sqrTo = cSqrTo; - Classic.prototype.sqrTo = function (x, r) { - x.squareTo(r); - this.reduce(r); - }; - return Classic; -}()); -//#endregion -//#region Montgomery -// Montgomery reduction -var Montgomery = /** @class */ (function () { - function Montgomery(m) { - this.m = m; - this.mp = m.invDigit(); - this.mpl = this.mp & 0x7fff; - this.mph = this.mp >> 15; - this.um = (1 << (m.DB - 15)) - 1; - this.mt2 = 2 * m.t; - } - // Montgomery.prototype.convert = montConvert; - // xR mod m - Montgomery.prototype.convert = function (x) { - var r = nbi(); - x.abs().dlShiftTo(this.m.t, r); - r.divRemTo(this.m, null, r); - if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) { - this.m.subTo(r, r); - } - return r; - }; - // Montgomery.prototype.revert = montRevert; - // x/R mod m - Montgomery.prototype.revert = function (x) { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; - }; - // Montgomery.prototype.reduce = montReduce; - // x = x/R mod m (HAC 14.32) - Montgomery.prototype.reduce = function (x) { - while (x.t <= this.mt2) { - // pad x so am has enough room later - x[x.t++] = 0; - } - for (var i = 0; i < this.m.t; ++i) { - // faster way of calculating u0 = x[i]*mp mod DV - var j = x[i] & 0x7fff; - var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM; - // use am to combine the multiply-shift-add into one call - j = i + this.m.t; - x[j] += this.m.am(0, u0, x, i, 0, this.m.t); - // propagate carry - while (x[j] >= x.DV) { - x[j] -= x.DV; - x[++j]++; - } - } - x.clamp(); - x.drShiftTo(this.m.t, x); - if (x.compareTo(this.m) >= 0) { - x.subTo(this.m, x); - } - }; - // Montgomery.prototype.mulTo = montMulTo; - // r = "xy/R mod m"; x,y != r - Montgomery.prototype.mulTo = function (x, y, r) { - x.multiplyTo(y, r); - this.reduce(r); - }; - // Montgomery.prototype.sqrTo = montSqrTo; - // r = "x^2/R mod m"; x != r - Montgomery.prototype.sqrTo = function (x, r) { - x.squareTo(r); - this.reduce(r); - }; - return Montgomery; -}()); -//#endregion Montgomery -//#region Barrett -// Barrett modular reduction -var Barrett = /** @class */ (function () { - function Barrett(m) { - this.m = m; - // setup Barrett - this.r2 = nbi(); - this.q3 = nbi(); - BigInteger.ONE.dlShiftTo(2 * m.t, this.r2); - this.mu = this.r2.divide(m); - } - // Barrett.prototype.convert = barrettConvert; - Barrett.prototype.convert = function (x) { - if (x.s < 0 || x.t > 2 * this.m.t) { - return x.mod(this.m); - } - else if (x.compareTo(this.m) < 0) { - return x; - } - else { - var r = nbi(); - x.copyTo(r); - this.reduce(r); - return r; - } - }; - // Barrett.prototype.revert = barrettRevert; - Barrett.prototype.revert = function (x) { - return x; - }; - // Barrett.prototype.reduce = barrettReduce; - // x = x mod m (HAC 14.42) - Barrett.prototype.reduce = function (x) { - x.drShiftTo(this.m.t - 1, this.r2); - if (x.t > this.m.t + 1) { - x.t = this.m.t + 1; - x.clamp(); - } - this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3); - this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2); - while (x.compareTo(this.r2) < 0) { - x.dAddOffset(1, this.m.t + 1); - } - x.subTo(this.r2, x); - while (x.compareTo(this.m) >= 0) { - x.subTo(this.m, x); - } - }; - // Barrett.prototype.mulTo = barrettMulTo; - // r = x*y mod m; x,y != r - Barrett.prototype.mulTo = function (x, y, r) { - x.multiplyTo(y, r); - this.reduce(r); - }; - // Barrett.prototype.sqrTo = barrettSqrTo; - // r = x^2 mod m; x != r - Barrett.prototype.sqrTo = function (x, r) { - x.squareTo(r); - this.reduce(r); - }; - return Barrett; -}()); -//#endregion -//#endregion REDUCERS -// return new, unset BigInteger -function nbi() { return new BigInteger(null); } -function parseBigInt(str, r) { - return new BigInteger(str, r); -} -// am: Compute w_j += (x*this_i), propagate carries, -// c is initial carry, returns final carry. -// c < 3*dvalue, x < 2*dvalue, this_i < dvalue -// We need to select the fastest one that works in this environment. -// am1: use a single mult and divide to get the high bits, -// max digit bits should be 26 because -// max internal value = 2*dvalue^2-2*dvalue (< 2^53) -function am1(i, x, w, j, c, n) { - while (--n >= 0) { - var v = x * this[i++] + w[j] + c; - c = Math.floor(v / 0x4000000); - w[j++] = v & 0x3ffffff; - } - return c; -} -// am2 avoids a big mult-and-extract completely. -// Max digit bits should be <= 30 because we do bitwise ops -// on values up to 2*hdvalue^2-hdvalue-1 (< 2^31) -function am2(i, x, w, j, c, n) { - var xl = x & 0x7fff; - var xh = x >> 15; - while (--n >= 0) { - var l = this[i] & 0x7fff; - var h = this[i++] >> 15; - var m = xh * l + h * xl; - l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff); - c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30); - w[j++] = l & 0x3fffffff; - } - return c; -} -// Alternately, set max digit bits to 28 since some -// browsers slow down when dealing with 32-bit numbers. -function am3(i, x, w, j, c, n) { - var xl = x & 0x3fff; - var xh = x >> 14; - while (--n >= 0) { - var l = this[i] & 0x3fff; - var h = this[i++] >> 14; - var m = xh * l + h * xl; - l = xl * l + ((m & 0x3fff) << 14) + w[j] + c; - c = (l >> 28) + (m >> 14) + xh * h; - w[j++] = l & 0xfffffff; - } - return c; -} -// if (j_lm && (navigator.appName == "Microsoft Internet Explorer")) { -// BigInteger.prototype.am = am2; -// dbits = 30; -// } -// else if (j_lm && (navigator.appName != "Netscape")) { -// BigInteger.prototype.am = am1; -// dbits = 26; -// } -// else { // Mozilla/Netscape seems to prefer am3 -// BigInteger.prototype.am = am3; -// dbits = 28; -// } -BigInteger.prototype.am = am1; -dbits = 26; - -BigInteger.prototype.DB = dbits; -BigInteger.prototype.DM = ((1 << dbits) - 1); -BigInteger.prototype.DV = (1 << dbits); -var BI_FP = 52; -BigInteger.prototype.FV = Math.pow(2, BI_FP); -BigInteger.prototype.F1 = BI_FP - dbits; -BigInteger.prototype.F2 = 2 * dbits - BI_FP; -// Digit conversions -var BI_RC = []; -var rr; -var vv; -rr = "0".charCodeAt(0); -for (vv = 0; vv <= 9; ++vv) { - BI_RC[rr++] = vv; -} -rr = "a".charCodeAt(0); -for (vv = 10; vv < 36; ++vv) { - BI_RC[rr++] = vv; -} -rr = "A".charCodeAt(0); -for (vv = 10; vv < 36; ++vv) { - BI_RC[rr++] = vv; -} -function intAt(s, i) { - var c = BI_RC[s.charCodeAt(i)]; - return (c == null) ? -1 : c; -} -// return bigint initialized to value -function nbv(i) { - var r = nbi(); - r.fromInt(i); - return r; -} -// returns bit length of the integer x -function nbits(x) { - var r = 1; - var t; - if ((t = x >>> 16) != 0) { - x = t; - r += 16; - } - if ((t = x >> 8) != 0) { - x = t; - r += 8; - } - if ((t = x >> 4) != 0) { - x = t; - r += 4; - } - if ((t = x >> 2) != 0) { - x = t; - r += 2; - } - if ((t = x >> 1) != 0) { - x = t; - r += 1; - } - return r; -} -// "constants" -BigInteger.ZERO = nbv(0); -BigInteger.ONE = nbv(1); - -// prng4.js - uses Arcfour as a PRNG -var Arcfour = /** @class */ (function () { - function Arcfour() { - this.i = 0; - this.j = 0; - this.S = []; - } - // Arcfour.prototype.init = ARC4init; - // Initialize arcfour context from key, an array of ints, each from [0..255] - Arcfour.prototype.init = function (key) { - var i; - var j; - var t; - for (i = 0; i < 256; ++i) { - this.S[i] = i; - } - j = 0; - for (i = 0; i < 256; ++i) { - j = (j + this.S[i] + key[i % key.length]) & 255; - t = this.S[i]; - this.S[i] = this.S[j]; - this.S[j] = t; - } - this.i = 0; - this.j = 0; - }; - // Arcfour.prototype.next = ARC4next; - Arcfour.prototype.next = function () { - var t; - 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; - return this.S[(t + this.S[this.i]) & 255]; - }; - return Arcfour; -}()); -// Plug in your RNG constructor here -function prng_newstate() { - return new Arcfour(); -} -// Pool size must be a multiple of 4 and greater than 32. -// An array of bytes the size of the pool will be passed to init() -var rng_psize = 256; - -// Random number generator - requires a PRNG backend, e.g. prng4.js -var rng_state; -var rng_pool = null; -var rng_pptr; -// Initialize the pool with junk if needed. -if (rng_pool == null) { - rng_pool = []; - rng_pptr = 0; - var t = void 0; - if (window.crypto && window.crypto.getRandomValues) { - // Extract entropy (2048 bits) from RNG if available - var z = new Uint32Array(256); - window.crypto.getRandomValues(z); - for (t = 0; t < z.length; ++t) { - rng_pool[rng_pptr++] = z[t] & 255; - } - } - // Use mouse events for entropy, if we do not have enough entropy by the time - // we need it, entropy will be generated by Math.random. - var onMouseMoveListener_1 = function (ev) { - this.count = this.count || 0; - if (this.count >= 256 || rng_pptr >= rng_psize) { - if (window.removeEventListener) { - window.removeEventListener("mousemove", onMouseMoveListener_1, false); - } - else if (window.detachEvent) { - window.detachEvent("onmousemove", onMouseMoveListener_1); - } - return; - } - try { - var mouseCoordinates = ev.x + ev.y; - rng_pool[rng_pptr++] = mouseCoordinates & 255; - this.count += 1; - } - catch (e) { - // Sometimes Firefox will deny permission to access event properties for some reason. Ignore. - } - }; - if (window.addEventListener) { - window.addEventListener("mousemove", onMouseMoveListener_1, false); - } - else if (window.attachEvent) { - window.attachEvent("onmousemove", onMouseMoveListener_1); - } -} -function rng_get_byte() { - if (rng_state == null) { - rng_state = prng_newstate(); - // At this point, we may not have collected enough entropy. If not, fall back to Math.random - while (rng_pptr < rng_psize) { - var random = Math.floor(65536 * Math.random()); - rng_pool[rng_pptr++] = random & 255; - } - rng_state.init(rng_pool); - for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) { - rng_pool[rng_pptr] = 0; - } - rng_pptr = 0; - } - // TODO: allow reseeding after first request - return rng_state.next(); -} -var SecureRandom = /** @class */ (function () { - function SecureRandom() { - } - SecureRandom.prototype.nextBytes = function (ba) { - for (var i = 0; i < ba.length; ++i) { - ba[i] = rng_get_byte(); - } - }; - return SecureRandom; -}()); - -// Depends on jsbn.js and rng.js -// function linebrk(s,n) { -// var ret = ""; -// var i = 0; -// while(i + n < s.length) { -// ret += s.substring(i,i+n) + "\n"; -// i += n; -// } -// return ret + s.substring(i,s.length); -// } -// function byte2Hex(b) { -// if(b < 0x10) -// return "0" + b.toString(16); -// else -// return b.toString(16); -// } -function pkcs1pad1(s, n) { - if (n < s.length + 22) { - console.error("Message too long for RSA"); - return null; - } - var len = n - s.length - 6; - var filler = ""; - for (var f = 0; f < len; f += 2) { - filler += "ff"; - } - var m = "0001" + filler + "00" + s; - return parseBigInt(m, 16); -} -// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint -function pkcs1pad2(s, n) { - if (n < s.length + 11) { // TODO: fix for utf-8 - console.error("Message too long for RSA"); - return null; - } - var ba = []; - var i = s.length - 1; - while (i >= 0 && n > 0) { - var c = s.charCodeAt(i--); - if (c < 128) { // encode using utf-8 - ba[--n] = c; - } - else if ((c > 127) && (c < 2048)) { - ba[--n] = (c & 63) | 128; - ba[--n] = (c >> 6) | 192; - } - else { - ba[--n] = (c & 63) | 128; - ba[--n] = ((c >> 6) & 63) | 128; - ba[--n] = (c >> 12) | 224; - } - } - ba[--n] = 0; - var rng = new SecureRandom(); - var x = []; - while (n > 2) { // random non-zero pad - x[0] = 0; - while (x[0] == 0) { - rng.nextBytes(x); - } - ba[--n] = x[0]; - } - ba[--n] = 2; - ba[--n] = 0; - return new BigInteger(ba); -} -// "empty" RSA key constructor -var RSAKey = /** @class */ (function () { - function RSAKey() { - this.n = null; - this.e = 0; - this.d = null; - this.p = null; - this.q = null; - this.dmp1 = null; - this.dmq1 = null; - this.coeff = null; - } - //#region PROTECTED - // protected - // RSAKey.prototype.doPublic = RSADoPublic; - // Perform raw public operation on "x": return x^e (mod n) - RSAKey.prototype.doPublic = function (x) { - return x.modPowInt(this.e, this.n); - }; - // RSAKey.prototype.doPrivate = RSADoPrivate; - // Perform raw private operation on "x": return x^d (mod n) - RSAKey.prototype.doPrivate = function (x) { - if (this.p == null || this.q == null) { - return x.modPow(this.d, this.n); - } - // TODO: re-calculate any missing CRT params - var xp = x.mod(this.p).modPow(this.dmp1, this.p); - var xq = x.mod(this.q).modPow(this.dmq1, this.q); - while (xp.compareTo(xq) < 0) { - xp = xp.add(this.p); - } - return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq); - }; - //#endregion PROTECTED - //#region PUBLIC - // RSAKey.prototype.setPublic = RSASetPublic; - // Set the public key fields N and e from hex strings - RSAKey.prototype.setPublic = function (N, E) { - if (N != null && E != null && N.length > 0 && E.length > 0) { - this.n = parseBigInt(N, 16); - this.e = parseInt(E, 16); - } - else { - console.error("Invalid RSA public key"); - } - }; - // RSAKey.prototype.encrypt = RSAEncrypt; - // Return the PKCS#1 RSA encryption of "text" as an even-length hex string - RSAKey.prototype.encrypt = function (text) { - var m = pkcs1pad2(text, (this.n.bitLength() + 7) >> 3); - if (m == null) { - return null; - } - var c = this.doPublic(m); - if (c == null) { - return null; - } - var h = c.toString(16); - if ((h.length & 1) == 0) { - return h; - } - else { - return "0" + h; - } - }; - // RSAKey.prototype.setPrivate = RSASetPrivate; - // Set the private key fields N, e, and d from hex strings - RSAKey.prototype.setPrivate = function (N, E, D) { - if (N != null && E != null && N.length > 0 && E.length > 0) { - this.n = parseBigInt(N, 16); - this.e = parseInt(E, 16); - this.d = parseBigInt(D, 16); - } - else { - console.error("Invalid RSA private key"); - } - }; - // RSAKey.prototype.setPrivateEx = RSASetPrivateEx; - // Set the private key fields N, e, d and CRT params from hex strings - RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) { - if (N != null && E != null && N.length > 0 && E.length > 0) { - this.n = parseBigInt(N, 16); - this.e = parseInt(E, 16); - this.d = parseBigInt(D, 16); - this.p = parseBigInt(P, 16); - this.q = parseBigInt(Q, 16); - this.dmp1 = parseBigInt(DP, 16); - this.dmq1 = parseBigInt(DQ, 16); - this.coeff = parseBigInt(C, 16); - } - else { - console.error("Invalid RSA private key"); - } - }; - // RSAKey.prototype.generate = RSAGenerate; - // Generate a new random private key B bits long, using public expt E - RSAKey.prototype.generate = function (B, E) { - var rng = new SecureRandom(); - var qs = B >> 1; - this.e = parseInt(E, 16); - var ee = new BigInteger(E, 16); - for (;;) { - for (;;) { - this.p = new BigInteger(B - qs, 1, rng); - if (this.p.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) { - break; - } - } - for (;;) { - this.q = new BigInteger(qs, 1, rng); - if (this.q.subtract(BigInteger.ONE).gcd(ee).compareTo(BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) { - break; - } - } - if (this.p.compareTo(this.q) <= 0) { - var t = this.p; - this.p = this.q; - this.q = t; - } - var p1 = this.p.subtract(BigInteger.ONE); - var q1 = this.q.subtract(BigInteger.ONE); - var phi = p1.multiply(q1); - if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) { - this.n = this.p.multiply(this.q); - this.d = ee.modInverse(phi); - this.dmp1 = this.d.mod(p1); - this.dmq1 = this.d.mod(q1); - this.coeff = this.q.modInverse(this.p); - break; - } - } - }; - // RSAKey.prototype.decrypt = RSADecrypt; - // Return the PKCS#1 RSA decryption of "ctext". - // "ctext" is an even-length hex string and the output is a plain string. - RSAKey.prototype.decrypt = function (ctext) { - var c = parseBigInt(ctext, 16); - var m = this.doPrivate(c); - if (m == null) { - return null; - } - return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3); - }; - // Generate a new random private key B bits long, using public expt E - RSAKey.prototype.generateAsync = function (B, E, callback) { - var rng = new SecureRandom(); - var qs = B >> 1; - this.e = parseInt(E, 16); - var ee = new BigInteger(E, 16); - var rsa = this; - // These functions have non-descript names because they were originally for(;;) loops. - // I don't know about cryptography to give them better names than loop1-4. - var loop1 = function () { - var loop4 = function () { - if (rsa.p.compareTo(rsa.q) <= 0) { - var t = rsa.p; - rsa.p = rsa.q; - rsa.q = t; - } - var p1 = rsa.p.subtract(BigInteger.ONE); - var q1 = rsa.q.subtract(BigInteger.ONE); - var phi = p1.multiply(q1); - if (phi.gcd(ee).compareTo(BigInteger.ONE) == 0) { - rsa.n = rsa.p.multiply(rsa.q); - rsa.d = ee.modInverse(phi); - rsa.dmp1 = rsa.d.mod(p1); - rsa.dmq1 = rsa.d.mod(q1); - rsa.coeff = rsa.q.modInverse(rsa.p); - setTimeout(function () { callback(); }, 0); // escape - } - else { - setTimeout(loop1, 0); - } - }; - var loop3 = function () { - rsa.q = nbi(); - rsa.q.fromNumberAsync(qs, 1, rng, function () { - rsa.q.subtract(BigInteger.ONE).gcda(ee, function (r) { - if (r.compareTo(BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) { - setTimeout(loop4, 0); - } - else { - setTimeout(loop3, 0); - } - }); - }); - }; - var loop2 = function () { - rsa.p = nbi(); - rsa.p.fromNumberAsync(B - qs, 1, rng, function () { - rsa.p.subtract(BigInteger.ONE).gcda(ee, function (r) { - if (r.compareTo(BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) { - setTimeout(loop3, 0); - } - else { - setTimeout(loop2, 0); - } - }); - }); - }; - setTimeout(loop2, 0); - }; - setTimeout(loop1, 0); - }; - RSAKey.prototype.sign = function (text, digestMethod, digestName) { - var header = getDigestHeader(digestName); - var digest = header + digestMethod(text).toString(); - var m = pkcs1pad1(digest, this.n.bitLength() / 4); - if (m == null) { - return null; - } - var c = this.doPrivate(m); - if (c == null) { - return null; - } - var h = c.toString(16); - if ((h.length & 1) == 0) { - return h; - } - else { - return "0" + h; - } - }; - RSAKey.prototype.verify = function (text, signature, digestMethod) { - var c = parseBigInt(signature, 16); - var m = this.doPublic(c); - if (m == null) { - return null; - } - var unpadded = m.toString(16).replace(/^1f+00/, ""); - var digest = removeDigestHeader(unpadded); - return digest == digestMethod(text).toString(); - }; - return RSAKey; -}()); -// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext -function pkcs1unpad2(d, n) { - var b = d.toByteArray(); - var i = 0; - while (i < b.length && b[i] == 0) { - ++i; - } - if (b.length - i != n - 1 || b[i] != 2) { - return null; - } - ++i; - while (b[i] != 0) { - if (++i >= b.length) { - return null; - } - } - var ret = ""; - while (++i < b.length) { - var c = b[i] & 255; - if (c < 128) { // utf-8 decode - ret += String.fromCharCode(c); - } - else if ((c > 191) && (c < 224)) { - ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63)); - ++i; - } - else { - ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63)); - i += 2; - } - } - return ret; -} -// https://tools.ietf.org/html/rfc3447#page-43 -var DIGEST_HEADERS = { - md2: "3020300c06082a864886f70d020205000410", - md5: "3020300c06082a864886f70d020505000410", - sha1: "3021300906052b0e03021a05000414", - sha224: "302d300d06096086480165030402040500041c", - sha256: "3031300d060960864801650304020105000420", - sha384: "3041300d060960864801650304020205000430", - sha512: "3051300d060960864801650304020305000440", - ripemd160: "3021300906052b2403020105000414", -}; -function getDigestHeader(name) { - return DIGEST_HEADERS[name] || ""; -} -function removeDigestHeader(str) { - for (var name_1 in DIGEST_HEADERS) { - if (DIGEST_HEADERS.hasOwnProperty(name_1)) { - var header = DIGEST_HEADERS[name_1]; - var len = header.length; - if (str.substr(0, len) == header) { - return str.substr(len); - } - } - } - return str; -} -// Return the PKCS#1 RSA encryption of "text" as a Base64-encoded string -// function RSAEncryptB64(text) { -// var h = this.encrypt(text); -// if(h) return hex2b64(h); else return null; -// } -// public -// RSAKey.prototype.encrypt_b64 = RSAEncryptB64; - -/*! -Copyright (c) 2011, Yahoo! Inc. All rights reserved. -Code licensed under the BSD License: -http://developer.yahoo.com/yui/license.html -version: 2.9.0 -*/ -var YAHOO = {}; -YAHOO.lang = { - /** - * Utility to set up the prototype, constructor and superclass properties to - * support an inheritance strategy that can chain constructors and methods. - * Static members will not be inherited. - * - * @method extend - * @static - * @param {Function} subc the object to modify - * @param {Function} superc the object to inherit - * @param {Object} overrides additional properties/methods to add to the - * subclass prototype. These will override the - * matching items obtained from the superclass - * if present. - */ - extend: function(subc, superc, overrides) { - if (! superc || ! subc) { - throw new Error("YAHOO.lang.extend failed, please check that " + - "all dependencies are included."); - } - - var F = function() {}; - F.prototype = superc.prototype; - subc.prototype = new F(); - subc.prototype.constructor = subc; - subc.superclass = superc.prototype; - - if (superc.prototype.constructor == Object.prototype.constructor) { - superc.prototype.constructor = superc; - } - - if (overrides) { - var i; - for (i in overrides) { - subc.prototype[i] = overrides[i]; - } - - /* - * IE will not enumerate native functions in a derived object even if the - * function was overridden. This is a workaround for specific functions - * we care about on the Object prototype. - * @property _IEEnumFix - * @param {Function} r the object to receive the augmentation - * @param {Function} s the object that supplies the properties to augment - * @static - * @private - */ - var _IEEnumFix = function() {}, - ADD = ["toString", "valueOf"]; - try { - if (/MSIE/.test(navigator.userAgent)) { - _IEEnumFix = function(r, s) { - for (i = 0; i < ADD.length; i = i + 1) { - var fname = ADD[i], f = s[fname]; - if (typeof f === 'function' && f != Object.prototype[fname]) { - r[fname] = f; - } - } - }; - } - } catch (ex) {} _IEEnumFix(subc.prototype, overrides); - } - } -}; - -/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license - */ - -/** - * @fileOverview - * @name asn1-1.0.js - * @author Kenji Urushima kenji.urushima@gmail.com - * @version asn1 1.0.13 (2017-Jun-02) - * @since jsrsasign 2.1 - * @license MIT License - */ - -/** - * kjur's class library name space - *

- * This name space provides following name spaces: - *

    - *
  • {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
  • - *
  • {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
  • - *
  • {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature - * class and utilities
  • - *
- *

- * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2. - * @name KJUR - * @namespace kjur's class library name space - */ -var KJUR = {}; - -/** - * kjur's ASN.1 class library name space - *

- * This is ITU-T X.690 ASN.1 DER encoder class library and - * class structure and methods is very similar to - * org.bouncycastle.asn1 package of - * well known BouncyCaslte Cryptography Library. - *

PROVIDING ASN.1 PRIMITIVES

- * Here are ASN.1 DER primitive classes. - *
    - *
  • 0x01 {@link KJUR.asn1.DERBoolean}
  • - *
  • 0x02 {@link KJUR.asn1.DERInteger}
  • - *
  • 0x03 {@link KJUR.asn1.DERBitString}
  • - *
  • 0x04 {@link KJUR.asn1.DEROctetString}
  • - *
  • 0x05 {@link KJUR.asn1.DERNull}
  • - *
  • 0x06 {@link KJUR.asn1.DERObjectIdentifier}
  • - *
  • 0x0a {@link KJUR.asn1.DEREnumerated}
  • - *
  • 0x0c {@link KJUR.asn1.DERUTF8String}
  • - *
  • 0x12 {@link KJUR.asn1.DERNumericString}
  • - *
  • 0x13 {@link KJUR.asn1.DERPrintableString}
  • - *
  • 0x14 {@link KJUR.asn1.DERTeletexString}
  • - *
  • 0x16 {@link KJUR.asn1.DERIA5String}
  • - *
  • 0x17 {@link KJUR.asn1.DERUTCTime}
  • - *
  • 0x18 {@link KJUR.asn1.DERGeneralizedTime}
  • - *
  • 0x30 {@link KJUR.asn1.DERSequence}
  • - *
  • 0x31 {@link KJUR.asn1.DERSet}
  • - *
- *

OTHER ASN.1 CLASSES

- *
    - *
  • {@link KJUR.asn1.ASN1Object}
  • - *
  • {@link KJUR.asn1.DERAbstractString}
  • - *
  • {@link KJUR.asn1.DERAbstractTime}
  • - *
  • {@link KJUR.asn1.DERAbstractStructured}
  • - *
  • {@link KJUR.asn1.DERTaggedObject}
  • - *
- *

SUB NAME SPACES

- *
    - *
  • {@link KJUR.asn1.cades} - CAdES long term signature format
  • - *
  • {@link KJUR.asn1.cms} - Cryptographic Message Syntax
  • - *
  • {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
  • - *
  • {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
  • - *
  • {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
  • - *
- *

- * NOTE: Please ignore method summary and document of this namespace. - * This caused by a bug of jsdoc2. - * @name KJUR.asn1 - * @namespace - */ -if (typeof KJUR.asn1 == "undefined" || !KJUR.asn1) KJUR.asn1 = {}; - -/** - * ASN1 utilities class - * @name KJUR.asn1.ASN1Util - * @class ASN1 utilities class - * @since asn1 1.0.2 - */ -KJUR.asn1.ASN1Util = new function() { - this.integerToByteHex = function(i) { - var h = i.toString(16); - if ((h.length % 2) == 1) h = '0' + h; - return h; - }; - this.bigIntToMinTwosComplementsHex = function(bigIntegerValue) { - var h = bigIntegerValue.toString(16); - if (h.substr(0, 1) != '-') { - if (h.length % 2 == 1) { - h = '0' + h; - } else { - if (! h.match(/^[0-7]/)) { - h = '00' + h; - } - } - } else { - var hPos = h.substr(1); - var xorLen = hPos.length; - if (xorLen % 2 == 1) { - xorLen += 1; - } else { - if (! h.match(/^[0-7]/)) { - xorLen += 2; - } - } - var hMask = ''; - for (var i = 0; i < xorLen; i++) { - hMask += 'f'; - } - var biMask = new BigInteger(hMask, 16); - var biNeg = biMask.xor(bigIntegerValue).add(BigInteger.ONE); - h = biNeg.toString(16).replace(/^-/, ''); - } - return h; - }; - /** - * get PEM string from hexadecimal data and header string - * @name getPEMStringFromHex - * @memberOf KJUR.asn1.ASN1Util - * @function - * @param {String} dataHex hexadecimal string of PEM body - * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY') - * @return {String} PEM formatted string of input data - * @description - * This method converts a hexadecimal string to a PEM string with - * a specified header. Its line break will be CRLF("\r\n"). - * @example - * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY'); - * // value of pem will be: - * -----BEGIN PRIVATE KEY----- - * YWFh - * -----END PRIVATE KEY----- - */ - this.getPEMStringFromHex = function(dataHex, pemHeader) { - return hextopem(dataHex, pemHeader); - }; - - /** - * generate ASN1Object specifed by JSON parameters - * @name newObject - * @memberOf KJUR.asn1.ASN1Util - * @function - * @param {Array} param JSON parameter to generate ASN1Object - * @return {KJUR.asn1.ASN1Object} generated object - * @since asn1 1.0.3 - * @description - * generate any ASN1Object specified by JSON param - * including ASN.1 primitive or structured. - * Generally 'param' can be described as follows: - *
- * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER} - *
- * 'TYPE-OF-ASN1OBJ' can be one of following symbols: - *
    - *
  • 'bool' - DERBoolean
  • - *
  • 'int' - DERInteger
  • - *
  • 'bitstr' - DERBitString
  • - *
  • 'octstr' - DEROctetString
  • - *
  • 'null' - DERNull
  • - *
  • 'oid' - DERObjectIdentifier
  • - *
  • 'enum' - DEREnumerated
  • - *
  • 'utf8str' - DERUTF8String
  • - *
  • 'numstr' - DERNumericString
  • - *
  • 'prnstr' - DERPrintableString
  • - *
  • 'telstr' - DERTeletexString
  • - *
  • 'ia5str' - DERIA5String
  • - *
  • 'utctime' - DERUTCTime
  • - *
  • 'gentime' - DERGeneralizedTime
  • - *
  • 'seq' - DERSequence
  • - *
  • 'set' - DERSet
  • - *
  • 'tag' - DERTaggedObject
  • - *
- * @example - * newObject({'prnstr': 'aaa'}); - * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]}) - * // ASN.1 Tagged Object - * newObject({'tag': {'tag': 'a1', - * 'explicit': true, - * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}}); - * // more simple representation of ASN.1 Tagged Object - * newObject({'tag': ['a1', - * true, - * {'seq': [ - * {'int': 3}, - * {'prnstr': 'aaa'}]} - * ]}); - */ - this.newObject = function(param) { - var _KJUR = KJUR, - _KJUR_asn1 = _KJUR.asn1, - _DERBoolean = _KJUR_asn1.DERBoolean, - _DERInteger = _KJUR_asn1.DERInteger, - _DERBitString = _KJUR_asn1.DERBitString, - _DEROctetString = _KJUR_asn1.DEROctetString, - _DERNull = _KJUR_asn1.DERNull, - _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, - _DEREnumerated = _KJUR_asn1.DEREnumerated, - _DERUTF8String = _KJUR_asn1.DERUTF8String, - _DERNumericString = _KJUR_asn1.DERNumericString, - _DERPrintableString = _KJUR_asn1.DERPrintableString, - _DERTeletexString = _KJUR_asn1.DERTeletexString, - _DERIA5String = _KJUR_asn1.DERIA5String, - _DERUTCTime = _KJUR_asn1.DERUTCTime, - _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, - _DERSequence = _KJUR_asn1.DERSequence, - _DERSet = _KJUR_asn1.DERSet, - _DERTaggedObject = _KJUR_asn1.DERTaggedObject, - _newObject = _KJUR_asn1.ASN1Util.newObject; - - var keys = Object.keys(param); - if (keys.length != 1) - throw "key of param shall be only one."; - var key = keys[0]; - - if (":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:".indexOf(":" + key + ":") == -1) - throw "undefined key: " + key; - - if (key == "bool") return new _DERBoolean(param[key]); - if (key == "int") return new _DERInteger(param[key]); - if (key == "bitstr") return new _DERBitString(param[key]); - if (key == "octstr") return new _DEROctetString(param[key]); - if (key == "null") return new _DERNull(param[key]); - if (key == "oid") return new _DERObjectIdentifier(param[key]); - if (key == "enum") return new _DEREnumerated(param[key]); - if (key == "utf8str") return new _DERUTF8String(param[key]); - if (key == "numstr") return new _DERNumericString(param[key]); - if (key == "prnstr") return new _DERPrintableString(param[key]); - if (key == "telstr") return new _DERTeletexString(param[key]); - if (key == "ia5str") return new _DERIA5String(param[key]); - if (key == "utctime") return new _DERUTCTime(param[key]); - if (key == "gentime") return new _DERGeneralizedTime(param[key]); - - if (key == "seq") { - var paramList = param[key]; - var a = []; - for (var i = 0; i < paramList.length; i++) { - var asn1Obj = _newObject(paramList[i]); - a.push(asn1Obj); - } - return new _DERSequence({'array': a}); - } - - if (key == "set") { - var paramList = param[key]; - var a = []; - for (var i = 0; i < paramList.length; i++) { - var asn1Obj = _newObject(paramList[i]); - a.push(asn1Obj); - } - return new _DERSet({'array': a}); - } - - if (key == "tag") { - var tagParam = param[key]; - if (Object.prototype.toString.call(tagParam) === '[object Array]' && - tagParam.length == 3) { - var obj = _newObject(tagParam[2]); - return new _DERTaggedObject({tag: tagParam[0], - explicit: tagParam[1], - obj: obj}); - } else { - var newParam = {}; - if (tagParam.explicit !== undefined) - newParam.explicit = tagParam.explicit; - if (tagParam.tag !== undefined) - newParam.tag = tagParam.tag; - if (tagParam.obj === undefined) - throw "obj shall be specified for 'tag'."; - newParam.obj = _newObject(tagParam.obj); - return new _DERTaggedObject(newParam); - } - } - }; - - /** - * get encoded hexadecimal string of ASN1Object specifed by JSON parameters - * @name jsonToASN1HEX - * @memberOf KJUR.asn1.ASN1Util - * @function - * @param {Array} param JSON parameter to generate ASN1Object - * @return hexadecimal string of ASN1Object - * @since asn1 1.0.4 - * @description - * As for ASN.1 object representation of JSON object, - * please see {@link newObject}. - * @example - * jsonToASN1HEX({'prnstr': 'aaa'}); - */ - this.jsonToASN1HEX = function(param) { - var asn1Obj = this.newObject(param); - return asn1Obj.getEncodedHex(); - }; -}; - -/** - * get dot noted oid number string from hexadecimal value of OID - * @name oidHexToInt - * @memberOf KJUR.asn1.ASN1Util - * @function - * @param {String} hex hexadecimal value of object identifier - * @return {String} dot noted string of object identifier - * @since jsrsasign 4.8.3 asn1 1.0.7 - * @description - * This static method converts from hexadecimal string representation of - * ASN.1 value of object identifier to oid number string. - * @example - * KJUR.asn1.ASN1Util.oidHexToInt('550406') → "2.5.4.6" - */ -KJUR.asn1.ASN1Util.oidHexToInt = function(hex) { - var s = ""; - var i01 = parseInt(hex.substr(0, 2), 16); - var i0 = Math.floor(i01 / 40); - var i1 = i01 % 40; - var s = i0 + "." + i1; - - var binbuf = ""; - for (var i = 2; i < hex.length; i += 2) { - var value = parseInt(hex.substr(i, 2), 16); - var bin = ("00000000" + value.toString(2)).slice(- 8); - binbuf = binbuf + bin.substr(1, 7); - if (bin.substr(0, 1) == "0") { - var bi = new BigInteger(binbuf, 2); - s = s + "." + bi.toString(10); - binbuf = ""; - } - } - return s; -}; - -/** - * get hexadecimal value of object identifier from dot noted oid value - * @name oidIntToHex - * @memberOf KJUR.asn1.ASN1Util - * @function - * @param {String} oidString dot noted string of object identifier - * @return {String} hexadecimal value of object identifier - * @since jsrsasign 4.8.3 asn1 1.0.7 - * @description - * This static method converts from object identifier value string. - * to hexadecimal string representation of it. - * @example - * KJUR.asn1.ASN1Util.oidIntToHex("2.5.4.6") → "550406" - */ -KJUR.asn1.ASN1Util.oidIntToHex = function(oidString) { - var itox = function(i) { - var h = i.toString(16); - if (h.length == 1) h = '0' + h; - return h; - }; - - var roidtox = function(roid) { - var h = ''; - var bi = new BigInteger(roid, 10); - var b = bi.toString(2); - var padLen = 7 - b.length % 7; - if (padLen == 7) padLen = 0; - var bPad = ''; - for (var i = 0; i < padLen; i++) bPad += '0'; - b = bPad + b; - for (var i = 0; i < b.length - 1; i += 7) { - var b8 = b.substr(i, 7); - if (i != b.length - 7) b8 = '1' + b8; - h += itox(parseInt(b8, 2)); - } - return h; - }; - - if (! oidString.match(/^[0-9.]+$/)) { - throw "malformed oid string: " + oidString; - } - var h = ''; - var a = oidString.split('.'); - var i0 = parseInt(a[0]) * 40 + parseInt(a[1]); - h += itox(i0); - a.splice(0, 2); - for (var i = 0; i < a.length; i++) { - h += roidtox(a[i]); - } - return h; -}; - - -// ******************************************************************** -// Abstract ASN.1 Classes -// ******************************************************************** - -// ******************************************************************** - -/** - * base class for ASN.1 DER encoder object - * @name KJUR.asn1.ASN1Object - * @class base class for ASN.1 DER encoder object - * @property {Boolean} isModified flag whether internal data was changed - * @property {String} hTLV hexadecimal string of ASN.1 TLV - * @property {String} hT hexadecimal string of ASN.1 TLV tag(T) - * @property {String} hL hexadecimal string of ASN.1 TLV length(L) - * @property {String} hV hexadecimal string of ASN.1 TLV value(V) - * @description - */ -KJUR.asn1.ASN1Object = function() { - var hV = ''; - - /** - * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V) - * @name getLengthHexFromValue - * @memberOf KJUR.asn1.ASN1Object# - * @function - * @return {String} hexadecimal string of ASN.1 TLV length(L) - */ - this.getLengthHexFromValue = function() { - if (typeof this.hV == "undefined" || this.hV == null) { - throw "this.hV is null or undefined."; - } - if (this.hV.length % 2 == 1) { - throw "value hex must be even length: n=" + hV.length + ",v=" + this.hV; - } - var n = this.hV.length / 2; - var hN = n.toString(16); - if (hN.length % 2 == 1) { - hN = "0" + hN; - } - if (n < 128) { - return hN; - } else { - var hNlen = hN.length / 2; - if (hNlen > 15) { - throw "ASN.1 length too long to represent by 8x: n = " + n.toString(16); - } - var head = 128 + hNlen; - return head.toString(16) + hN; - } - }; - - /** - * get hexadecimal string of ASN.1 TLV bytes - * @name getEncodedHex - * @memberOf KJUR.asn1.ASN1Object# - * @function - * @return {String} hexadecimal string of ASN.1 TLV - */ - this.getEncodedHex = function() { - if (this.hTLV == null || this.isModified) { - this.hV = this.getFreshValueHex(); - this.hL = this.getLengthHexFromValue(); - this.hTLV = this.hT + this.hL + this.hV; - this.isModified = false; - //alert("first time: " + this.hTLV); - } - return this.hTLV; - }; - - /** - * get hexadecimal string of ASN.1 TLV value(V) bytes - * @name getValueHex - * @memberOf KJUR.asn1.ASN1Object# - * @function - * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes - */ - this.getValueHex = function() { - this.getEncodedHex(); - return this.hV; - }; - - this.getFreshValueHex = function() { - return ''; - }; -}; - -// == BEGIN DERAbstractString ================================================ -/** - * base class for ASN.1 DER string classes - * @name KJUR.asn1.DERAbstractString - * @class base class for ASN.1 DER string classes - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @property {String} s internal string of value - * @extends KJUR.asn1.ASN1Object - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • str - specify initial ASN.1 value(V) by a string
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
- * NOTE: 'params' can be omitted. - */ -KJUR.asn1.DERAbstractString = function(params) { - KJUR.asn1.DERAbstractString.superclass.constructor.call(this); - - /** - * get string value of this string object - * @name getString - * @memberOf KJUR.asn1.DERAbstractString# - * @function - * @return {String} string value of this string object - */ - this.getString = function() { - return this.s; - }; - - /** - * set value by a string - * @name setString - * @memberOf KJUR.asn1.DERAbstractString# - * @function - * @param {String} newS value by a string to set - */ - this.setString = function(newS) { - this.hTLV = null; - this.isModified = true; - this.s = newS; - this.hV = stohex(this.s); - }; - - /** - * set value by a hexadecimal string - * @name setStringHex - * @memberOf KJUR.asn1.DERAbstractString# - * @function - * @param {String} newHexString value by a hexadecimal string to set - */ - this.setStringHex = function(newHexString) { - this.hTLV = null; - this.isModified = true; - this.s = null; - this.hV = newHexString; - }; - - this.getFreshValueHex = function() { - return this.hV; - }; - - if (typeof params != "undefined") { - if (typeof params == "string") { - this.setString(params); - } else if (typeof params['str'] != "undefined") { - this.setString(params['str']); - } else if (typeof params['hex'] != "undefined") { - this.setStringHex(params['hex']); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object); -// == END DERAbstractString ================================================ - -// == BEGIN DERAbstractTime ================================================== -/** - * base class for ASN.1 DER Generalized/UTCTime class - * @name KJUR.asn1.DERAbstractTime - * @class base class for ASN.1 DER Generalized/UTCTime class - * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'}) - * @extends KJUR.asn1.ASN1Object - * @description - * @see KJUR.asn1.ASN1Object - superclass - */ -KJUR.asn1.DERAbstractTime = function(params) { - KJUR.asn1.DERAbstractTime.superclass.constructor.call(this); - - // --- PRIVATE METHODS -------------------- - this.localDateToUTC = function(d) { - utc = d.getTime() + (d.getTimezoneOffset() * 60000); - var utcDate = new Date(utc); - return utcDate; - }; - - /* - * format date string by Data object - * @name formatDate - * @memberOf KJUR.asn1.AbstractTime; - * @param {Date} dateObject - * @param {string} type 'utc' or 'gen' - * @param {boolean} withMillis flag for with millisections or not - * @description - * 'withMillis' flag is supported from asn1 1.0.6. - */ - this.formatDate = function(dateObject, type, withMillis) { - var pad = this.zeroPadding; - var d = this.localDateToUTC(dateObject); - var year = String(d.getFullYear()); - if (type == 'utc') year = year.substr(2, 2); - var month = pad(String(d.getMonth() + 1), 2); - var day = pad(String(d.getDate()), 2); - var hour = pad(String(d.getHours()), 2); - var min = pad(String(d.getMinutes()), 2); - var sec = pad(String(d.getSeconds()), 2); - var s = year + month + day + hour + min + sec; - if (withMillis === true) { - var millis = d.getMilliseconds(); - if (millis != 0) { - var sMillis = pad(String(millis), 3); - sMillis = sMillis.replace(/[0]+$/, ""); - s = s + "." + sMillis; - } - } - return s + "Z"; - }; - - this.zeroPadding = function(s, len) { - if (s.length >= len) return s; - return new Array(len - s.length + 1).join('0') + s; - }; - - // --- PUBLIC METHODS -------------------- - /** - * get string value of this string object - * @name getString - * @memberOf KJUR.asn1.DERAbstractTime# - * @function - * @return {String} string value of this time object - */ - this.getString = function() { - return this.s; - }; - - /** - * set value by a string - * @name setString - * @memberOf KJUR.asn1.DERAbstractTime# - * @function - * @param {String} newS value by a string to set such like "130430235959Z" - */ - this.setString = function(newS) { - this.hTLV = null; - this.isModified = true; - this.s = newS; - this.hV = stohex(newS); - }; - - /** - * set value by a Date object - * @name setByDateValue - * @memberOf KJUR.asn1.DERAbstractTime# - * @function - * @param {Integer} year year of date (ex. 2013) - * @param {Integer} month month of date between 1 and 12 (ex. 12) - * @param {Integer} day day of month - * @param {Integer} hour hours of date - * @param {Integer} min minutes of date - * @param {Integer} sec seconds of date - */ - this.setByDateValue = function(year, month, day, hour, min, sec) { - var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0)); - this.setByDate(dateObject); - }; - - this.getFreshValueHex = function() { - return this.hV; - }; -}; -YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object); -// == END DERAbstractTime ================================================== - -// == BEGIN DERAbstractStructured ============================================ -/** - * base class for ASN.1 DER structured class - * @name KJUR.asn1.DERAbstractStructured - * @class base class for ASN.1 DER structured class - * @property {Array} asn1Array internal array of ASN1Object - * @extends KJUR.asn1.ASN1Object - * @description - * @see KJUR.asn1.ASN1Object - superclass - */ -KJUR.asn1.DERAbstractStructured = function(params) { - KJUR.asn1.DERAbstractString.superclass.constructor.call(this); - - /** - * set value by array of ASN1Object - * @name setByASN1ObjectArray - * @memberOf KJUR.asn1.DERAbstractStructured# - * @function - * @param {array} asn1ObjectArray array of ASN1Object to set - */ - this.setByASN1ObjectArray = function(asn1ObjectArray) { - this.hTLV = null; - this.isModified = true; - this.asn1Array = asn1ObjectArray; - }; - - /** - * append an ASN1Object to internal array - * @name appendASN1Object - * @memberOf KJUR.asn1.DERAbstractStructured# - * @function - * @param {ASN1Object} asn1Object to add - */ - this.appendASN1Object = function(asn1Object) { - this.hTLV = null; - this.isModified = true; - this.asn1Array.push(asn1Object); - }; - - this.asn1Array = new Array(); - if (typeof params != "undefined") { - if (typeof params['array'] != "undefined") { - this.asn1Array = params['array']; - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object); - - -// ******************************************************************** -// ASN.1 Object Classes -// ******************************************************************** - -// ******************************************************************** -/** - * class for ASN.1 DER Boolean - * @name KJUR.asn1.DERBoolean - * @class class for ASN.1 DER Boolean - * @extends KJUR.asn1.ASN1Object - * @description - * @see KJUR.asn1.ASN1Object - superclass +/* + * ATTENTION: The "eval" devtool has been used (maybe by default in mode: "development"). + * This devtool is neither made for production nor for readable output files. + * It uses "eval()" calls to create a separate source file in the browser devtools. + * If you are trying to read the output file, select a different devtool (https://webpack.js.org/configuration/devtool/) + * or disable the default devtool with "devtool: false". + * If you are looking for production-ready output files, see mode: "production" (https://webpack.js.org/configuration/mode/). */ -KJUR.asn1.DERBoolean = function() { - KJUR.asn1.DERBoolean.superclass.constructor.call(this); - this.hT = "01"; - this.hTLV = "0101ff"; -}; -YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object); - -// ******************************************************************** -/** - * class for ASN.1 DER Integer - * @name KJUR.asn1.DERInteger - * @class class for ASN.1 DER Integer - * @extends KJUR.asn1.ASN1Object - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • int - specify initial ASN.1 value(V) by integer value
  • - *
  • bigint - specify initial ASN.1 value(V) by BigInteger object
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
- * NOTE: 'params' can be omitted. - */ -KJUR.asn1.DERInteger = function(params) { - KJUR.asn1.DERInteger.superclass.constructor.call(this); - this.hT = "02"; - - /** - * set value by Tom Wu's BigInteger object - * @name setByBigInteger - * @memberOf KJUR.asn1.DERInteger# - * @function - * @param {BigInteger} bigIntegerValue to set - */ - this.setByBigInteger = function(bigIntegerValue) { - this.hTLV = null; - this.isModified = true; - this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue); - }; - - /** - * set value by integer value - * @name setByInteger - * @memberOf KJUR.asn1.DERInteger - * @function - * @param {Integer} integer value to set - */ - this.setByInteger = function(intValue) { - var bi = new BigInteger(String(intValue), 10); - this.setByBigInteger(bi); - }; - - /** - * set value by integer value - * @name setValueHex - * @memberOf KJUR.asn1.DERInteger# - * @function - * @param {String} hexadecimal string of integer value - * @description - *
- * NOTE: Value shall be represented by minimum octet length of - * two's complement representation. - * @example - * new KJUR.asn1.DERInteger(123); - * new KJUR.asn1.DERInteger({'int': 123}); - * new KJUR.asn1.DERInteger({'hex': '1fad'}); - */ - this.setValueHex = function(newHexString) { - this.hV = newHexString; - }; - - this.getFreshValueHex = function() { - return this.hV; - }; - - if (typeof params != "undefined") { - if (typeof params['bigint'] != "undefined") { - this.setByBigInteger(params['bigint']); - } else if (typeof params['int'] != "undefined") { - this.setByInteger(params['int']); - } else if (typeof params == "number") { - this.setByInteger(params); - } else if (typeof params['hex'] != "undefined") { - this.setValueHex(params['hex']); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object); - -// ******************************************************************** -/** - * class for ASN.1 DER encoded BitString primitive - * @name KJUR.asn1.DERBitString - * @class class for ASN.1 DER encoded BitString primitive - * @extends KJUR.asn1.ASN1Object - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • bin - specify binary string (ex. '10111')
  • - *
  • array - specify array of boolean (ex. [true,false,true,true])
  • - *
  • hex - specify hexadecimal string of ASN.1 value(V) including unused bits
  • - *
  • obj - specify {@link KJUR.asn1.ASN1Util.newObject} - * argument for "BitString encapsulates" structure.
  • - *
- * NOTE1: 'params' can be omitted.
- * NOTE2: 'obj' parameter have been supported since - * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
- * @example - * // default constructor - * o = new KJUR.asn1.DERBitString(); - * // initialize with binary string - * o = new KJUR.asn1.DERBitString({bin: "1011"}); - * // initialize with boolean array - * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]}); - * // initialize with hexadecimal string (04 is unused bits) - * o = new KJUR.asn1.DEROctetString({hex: "04bac0"}); - * // initialize with ASN1Util.newObject argument for encapsulated - * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}}); - * // above generates a ASN.1 data like this: - * // BIT STRING, encapsulates { - * // SEQUENCE { - * // INTEGER 3 - * // PrintableString 'aaa' - * // } - * // } - */ -KJUR.asn1.DERBitString = function(params) { - if (params !== undefined && typeof params.obj !== "undefined") { - var o = KJUR.asn1.ASN1Util.newObject(params.obj); - params.hex = "00" + o.getEncodedHex(); - } - KJUR.asn1.DERBitString.superclass.constructor.call(this); - this.hT = "03"; - - /** - * set ASN.1 value(V) by a hexadecimal string including unused bits - * @name setHexValueIncludingUnusedBits - * @memberOf KJUR.asn1.DERBitString# - * @function - * @param {String} newHexStringIncludingUnusedBits - */ - this.setHexValueIncludingUnusedBits = function(newHexStringIncludingUnusedBits) { - this.hTLV = null; - this.isModified = true; - this.hV = newHexStringIncludingUnusedBits; - }; - - /** - * set ASN.1 value(V) by unused bit and hexadecimal string of value - * @name setUnusedBitsAndHexValue - * @memberOf KJUR.asn1.DERBitString# - * @function - * @param {Integer} unusedBits - * @param {String} hValue - */ - this.setUnusedBitsAndHexValue = function(unusedBits, hValue) { - if (unusedBits < 0 || 7 < unusedBits) { - throw "unused bits shall be from 0 to 7: u = " + unusedBits; - } - var hUnusedBits = "0" + unusedBits; - this.hTLV = null; - this.isModified = true; - this.hV = hUnusedBits + hValue; - }; - - /** - * set ASN.1 DER BitString by binary string
- * @name setByBinaryString - * @memberOf KJUR.asn1.DERBitString# - * @function - * @param {String} binaryString binary value string (i.e. '10111') - * @description - * Its unused bits will be calculated automatically by length of - * 'binaryValue'.
- * NOTE: Trailing zeros '0' will be ignored. - * @example - * o = new KJUR.asn1.DERBitString(); - * o.setByBooleanArray("01011"); - */ - this.setByBinaryString = function(binaryString) { - binaryString = binaryString.replace(/0+$/, ''); - var unusedBits = 8 - binaryString.length % 8; - if (unusedBits == 8) unusedBits = 0; - for (var i = 0; i <= unusedBits; i++) { - binaryString += '0'; - } - var h = ''; - for (var i = 0; i < binaryString.length - 1; i += 8) { - var b = binaryString.substr(i, 8); - var x = parseInt(b, 2).toString(16); - if (x.length == 1) x = '0' + x; - h += x; - } - this.hTLV = null; - this.isModified = true; - this.hV = '0' + unusedBits + h; - }; - - /** - * set ASN.1 TLV value(V) by an array of boolean
- * @name setByBooleanArray - * @memberOf KJUR.asn1.DERBitString# - * @function - * @param {array} booleanArray array of boolean (ex. [true, false, true]) - * @description - * NOTE: Trailing falses will be ignored in the ASN.1 DER Object. - * @example - * o = new KJUR.asn1.DERBitString(); - * o.setByBooleanArray([false, true, false, true, true]); - */ - this.setByBooleanArray = function(booleanArray) { - var s = ''; - for (var i = 0; i < booleanArray.length; i++) { - if (booleanArray[i] == true) { - s += '1'; - } else { - s += '0'; - } - } - this.setByBinaryString(s); - }; - - /** - * generate an array of falses with specified length
- * @name newFalseArray - * @memberOf KJUR.asn1.DERBitString - * @function - * @param {Integer} nLength length of array to generate - * @return {array} array of boolean falses - * @description - * This static method may be useful to initialize boolean array. - * @example - * o = new KJUR.asn1.DERBitString(); - * o.newFalseArray(3) → [false, false, false] - */ - this.newFalseArray = function(nLength) { - var a = new Array(nLength); - for (var i = 0; i < nLength; i++) { - a[i] = false; - } - return a; - }; - - this.getFreshValueHex = function() { - return this.hV; - }; - - if (typeof params != "undefined") { - if (typeof params == "string" && params.toLowerCase().match(/^[0-9a-f]+$/)) { - this.setHexValueIncludingUnusedBits(params); - } else if (typeof params['hex'] != "undefined") { - this.setHexValueIncludingUnusedBits(params['hex']); - } else if (typeof params['bin'] != "undefined") { - this.setByBinaryString(params['bin']); - } else if (typeof params['array'] != "undefined") { - this.setByBooleanArray(params['array']); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object); - -// ******************************************************************** -/** - * class for ASN.1 DER OctetString
- * @name KJUR.asn1.DEROctetString - * @class class for ASN.1 DER OctetString - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * This class provides ASN.1 OctetString simple type.
- * Supported "params" attributes are: - *
    - *
  • str - to set a string as a value
  • - *
  • hex - to set a hexadecimal string as a value
  • - *
  • obj - to set a encapsulated ASN.1 value by JSON object - * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
  • - *
- * NOTE: A parameter 'obj' have been supported - * for "OCTET STRING, encapsulates" structure. - * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25). - * @see KJUR.asn1.DERAbstractString - superclass - * @example - * // default constructor - * o = new KJUR.asn1.DEROctetString(); - * // initialize with string - * o = new KJUR.asn1.DEROctetString({str: "aaa"}); - * // initialize with hexadecimal string - * o = new KJUR.asn1.DEROctetString({hex: "616161"}); - * // initialize with ASN1Util.newObject argument - * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}}); - * // above generates a ASN.1 data like this: - * // OCTET STRING, encapsulates { - * // SEQUENCE { - * // INTEGER 3 - * // PrintableString 'aaa' - * // } - * // } - */ -KJUR.asn1.DEROctetString = function(params) { - if (params !== undefined && typeof params.obj !== "undefined") { - var o = KJUR.asn1.ASN1Util.newObject(params.obj); - params.hex = o.getEncodedHex(); - } - KJUR.asn1.DEROctetString.superclass.constructor.call(this, params); - this.hT = "04"; -}; -YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString); - -// ******************************************************************** -/** - * class for ASN.1 DER Null - * @name KJUR.asn1.DERNull - * @class class for ASN.1 DER Null - * @extends KJUR.asn1.ASN1Object - * @description - * @see KJUR.asn1.ASN1Object - superclass - */ -KJUR.asn1.DERNull = function() { - KJUR.asn1.DERNull.superclass.constructor.call(this); - this.hT = "05"; - this.hTLV = "0500"; -}; -YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object); - -// ******************************************************************** -/** - * class for ASN.1 DER ObjectIdentifier - * @name KJUR.asn1.DERObjectIdentifier - * @class class for ASN.1 DER ObjectIdentifier - * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'}) - * @extends KJUR.asn1.ASN1Object - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
- * NOTE: 'params' can be omitted. - */ -KJUR.asn1.DERObjectIdentifier = function(params) { - var itox = function(i) { - var h = i.toString(16); - if (h.length == 1) h = '0' + h; - return h; - }; - var roidtox = function(roid) { - var h = ''; - var bi = new BigInteger(roid, 10); - var b = bi.toString(2); - var padLen = 7 - b.length % 7; - if (padLen == 7) padLen = 0; - var bPad = ''; - for (var i = 0; i < padLen; i++) bPad += '0'; - b = bPad + b; - for (var i = 0; i < b.length - 1; i += 7) { - var b8 = b.substr(i, 7); - if (i != b.length - 7) b8 = '1' + b8; - h += itox(parseInt(b8, 2)); - } - return h; - }; - - KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this); - this.hT = "06"; - - /** - * set value by a hexadecimal string - * @name setValueHex - * @memberOf KJUR.asn1.DERObjectIdentifier# - * @function - * @param {String} newHexString hexadecimal value of OID bytes - */ - this.setValueHex = function(newHexString) { - this.hTLV = null; - this.isModified = true; - this.s = null; - this.hV = newHexString; - }; - - /** - * set value by a OID string
- * @name setValueOidString - * @memberOf KJUR.asn1.DERObjectIdentifier# - * @function - * @param {String} oidString OID string (ex. 2.5.4.13) - * @example - * o = new KJUR.asn1.DERObjectIdentifier(); - * o.setValueOidString("2.5.4.13"); - */ - this.setValueOidString = function(oidString) { - if (! oidString.match(/^[0-9.]+$/)) { - throw "malformed oid string: " + oidString; - } - var h = ''; - var a = oidString.split('.'); - var i0 = parseInt(a[0]) * 40 + parseInt(a[1]); - h += itox(i0); - a.splice(0, 2); - for (var i = 0; i < a.length; i++) { - h += roidtox(a[i]); - } - this.hTLV = null; - this.isModified = true; - this.s = null; - this.hV = h; - }; - - /** - * set value by a OID name - * @name setValueName - * @memberOf KJUR.asn1.DERObjectIdentifier# - * @function - * @param {String} oidName OID name (ex. 'serverAuth') - * @since 1.0.1 - * @description - * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'. - * Otherwise raise error. - * @example - * o = new KJUR.asn1.DERObjectIdentifier(); - * o.setValueName("serverAuth"); - */ - this.setValueName = function(oidName) { - var oid = KJUR.asn1.x509.OID.name2oid(oidName); - if (oid !== '') { - this.setValueOidString(oid); - } else { - throw "DERObjectIdentifier oidName undefined: " + oidName; - } - }; - - this.getFreshValueHex = function() { - return this.hV; - }; - - if (params !== undefined) { - if (typeof params === "string") { - if (params.match(/^[0-2].[0-9.]+$/)) { - this.setValueOidString(params); - } else { - this.setValueName(params); - } - } else if (params.oid !== undefined) { - this.setValueOidString(params.oid); - } else if (params.hex !== undefined) { - this.setValueHex(params.hex); - } else if (params.name !== undefined) { - this.setValueName(params.name); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object); - -// ******************************************************************** -/** - * class for ASN.1 DER Enumerated - * @name KJUR.asn1.DEREnumerated - * @class class for ASN.1 DER Enumerated - * @extends KJUR.asn1.ASN1Object - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • int - specify initial ASN.1 value(V) by integer value
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
- * NOTE: 'params' can be omitted. - * @example - * new KJUR.asn1.DEREnumerated(123); - * new KJUR.asn1.DEREnumerated({int: 123}); - * new KJUR.asn1.DEREnumerated({hex: '1fad'}); - */ -KJUR.asn1.DEREnumerated = function(params) { - KJUR.asn1.DEREnumerated.superclass.constructor.call(this); - this.hT = "0a"; +if (typeof require !== 'undefined') { + Math.random = function() { + const crypto = require('crypto'); + const num = parseInt(crypto.randomBytes(20).toString('hex').substr(0, 14), 16); + return num / Math.pow(10, num.toString().length); + } +} else if (typeof crypto !== 'undefined') { + Math.random = function() { + const numArray = crypto.getRandomValues(new Uint32Array(2)); + const num = numArray[0] * Math.pow(10, numArray[1].toString().length) + numArray[1]; + return num / Math.pow(10, num.toString().length); + } +} +(function webpackUniversalModuleDefinition(root, factory) { + if(typeof exports === 'object' && typeof module === 'object') + module.exports = factory(); + else if(typeof define === 'function' && define.amd) + define([], factory); + else if(typeof exports === 'object') + exports["JSEncrypt"] = factory(); + else + root["JSEncrypt"] = factory(); +})(window, function() { +return /******/ (() => { // webpackBootstrap +/******/ "use strict"; +/******/ var __webpack_modules__ = ({ - /** - * set value by Tom Wu's BigInteger object - * @name setByBigInteger - * @memberOf KJUR.asn1.DEREnumerated# - * @function - * @param {BigInteger} bigIntegerValue to set - */ - this.setByBigInteger = function(bigIntegerValue) { - this.hTLV = null; - this.isModified = true; - this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue); - }; +/***/ "./lib/JSEncrypt.js": +/*!**************************!*\ + !*** ./lib/JSEncrypt.js ***! + \**************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - /** - * set value by integer value - * @name setByInteger - * @memberOf KJUR.asn1.DEREnumerated# - * @function - * @param {Integer} integer value to set - */ - this.setByInteger = function(intValue) { - var bi = new BigInteger(String(intValue), 10); - this.setByBigInteger(bi); - }; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* binding */ JSEncrypt)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./JSEncryptRSAKey */ \"./lib/JSEncryptRSAKey.js\");\n/* harmony import */ var _version_json__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./version.json */ \"./lib/version.json\");\n\n\n\n/**\n *\n * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour\n * possible parameters are:\n * - default_key_size {number} default: 1024 the key size in bit\n * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent\n * - log {boolean} default: false whether log warn/error or not\n * @constructor\n */\nvar JSEncrypt = /** @class */ (function () {\n function JSEncrypt(options) {\n options = options || {};\n this.default_key_size = options.default_key_size ? parseInt(options.default_key_size, 10) : 1024;\n this.default_public_exponent = options.default_public_exponent || \"010001\"; // 65537 default openssl public exponent for rsa key type\n this.log = options.log || false;\n // The private and public key.\n this.key = null;\n }\n /**\n * Method to set the rsa key parameter (one method is enough to set both the public\n * and the private key, since the private key contains the public key paramenters)\n * Log a warning if logs are enabled\n * @param {Object|string} key the pem encoded string or an object (with or without header/footer)\n * @public\n */\n JSEncrypt.prototype.setKey = function (key) {\n if (this.log && this.key) {\n console.warn(\"A key was already set, overriding existing.\");\n }\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey(key);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPrivateKey = function (privkey) {\n // Create the key.\n this.setKey(privkey);\n };\n /**\n * Proxy method for setKey, for api compatibility\n * @see setKey\n * @public\n */\n JSEncrypt.prototype.setPublicKey = function (pubkey) {\n // Sets the public key.\n this.setKey(pubkey);\n };\n /**\n * Proxy method for RSAKey object's decrypt, decrypt the string using the private\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str base64 encoded crypted string to decrypt\n * @return {string} the decrypted string\n * @public\n */\n JSEncrypt.prototype.decrypt = function (str) {\n // Return the decrypted string.\n try {\n return this.getKey().decrypt((0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's encrypt, encrypt the string using the public\n * components of the rsa key object. Note that if the object was not set will be created\n * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor\n * @param {string} str the string to encrypt\n * @return {string} the encrypted string encoded in base64\n * @public\n */\n JSEncrypt.prototype.encrypt = function (str) {\n // Return the encrypted string.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().encrypt(str));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's sign.\n * @param {string} str the string to sign\n * @param {function} digestMethod hash method\n * @param {string} digestName the name of the hash algorithm\n * @return {string} the signature encoded in base64\n * @public\n */\n JSEncrypt.prototype.sign = function (str, digestMethod, digestName) {\n // return the RSA signature of 'str' in 'hex' format.\n try {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getKey().sign(str, digestMethod, digestName));\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Proxy method for RSAKey object's verify.\n * @param {string} str the string to verify\n * @param {string} signature the signature encoded in base64 to compare the string to\n * @param {function} digestMethod hash method\n * @return {boolean} whether the data and signature match\n * @public\n */\n JSEncrypt.prototype.verify = function (str, signature, digestMethod) {\n // Return the decrypted 'digest' of the signature.\n try {\n return this.getKey().verify(str, (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.b64tohex)(signature), digestMethod);\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object\n * will be created and returned\n * @param {callback} [cb] the callback to be called if we want the key to be generated\n * in an async fashion\n * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object\n * @public\n */\n JSEncrypt.prototype.getKey = function (cb) {\n // Only create new if it does not exist.\n if (!this.key) {\n // Get a new private key.\n this.key = new _JSEncryptRSAKey__WEBPACK_IMPORTED_MODULE_1__.JSEncryptRSAKey();\n if (cb && {}.toString.call(cb) === \"[object Function]\") {\n this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb);\n return;\n }\n // Generate the key.\n this.key.generate(this.default_key_size, this.default_public_exponent);\n }\n return this.key;\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateKey();\n };\n /**\n * Returns the pem encoded representation of the private key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the private key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPrivateKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPrivateBaseKeyB64();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITH header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKey = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicKey();\n };\n /**\n * Returns the pem encoded representation of the public key\n * If the key doesn't exists a new key will be created\n * @returns {string} pem encoded representation of the public key WITHOUT header and footer\n * @public\n */\n JSEncrypt.prototype.getPublicKeyB64 = function () {\n // Return the private representation of this key.\n return this.getKey().getPublicBaseKeyB64();\n };\n JSEncrypt.version = _version_json__WEBPACK_IMPORTED_MODULE_2__.version;\n return JSEncrypt;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncrypt.js?"); - /** - * set value by integer value - * @name setValueHex - * @memberOf KJUR.asn1.DEREnumerated# - * @function - * @param {String} hexadecimal string of integer value - * @description - *
- * NOTE: Value shall be represented by minimum octet length of - * two's complement representation. - */ - this.setValueHex = function(newHexString) { - this.hV = newHexString; - }; +/***/ }), - this.getFreshValueHex = function() { - return this.hV; - }; +/***/ "./lib/JSEncryptRSAKey.js": +/*!********************************!*\ + !*** ./lib/JSEncryptRSAKey.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - if (typeof params != "undefined") { - if (typeof params['int'] != "undefined") { - this.setByInteger(params['int']); - } else if (typeof params == "number") { - this.setByInteger(params); - } else if (typeof params['hex'] != "undefined") { - this.setValueHex(params['hex']); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncryptRSAKey\": () => (/* binding */ JSEncryptRSAKey)\n/* harmony export */ });\n/* harmony import */ var _lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./lib/jsbn/base64 */ \"./lib/lib/jsbn/base64.js\");\n/* harmony import */ var _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./lib/asn1js/hex */ \"./lib/lib/asn1js/hex.js\");\n/* harmony import */ var _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__ = __webpack_require__(/*! ./lib/asn1js/base64 */ \"./lib/lib/asn1js/base64.js\");\n/* harmony import */ var _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__ = __webpack_require__(/*! ./lib/asn1js/asn1 */ \"./lib/lib/asn1js/asn1.js\");\n/* harmony import */ var _lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__ = __webpack_require__(/*! ./lib/jsbn/rsa */ \"./lib/lib/jsbn/rsa.js\");\n/* harmony import */ var _lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__ = __webpack_require__(/*! ./lib/jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__ = __webpack_require__(/*! ./lib/jsrsasign/asn1-1.0 */ \"./lib/lib/jsrsasign/asn1-1.0.js\");\nvar __extends = (undefined && undefined.__extends) || (function () {\n var extendStatics = function (d, b) {\n extendStatics = Object.setPrototypeOf ||\n ({ __proto__: [] } instanceof Array && function (d, b) { d.__proto__ = b; }) ||\n function (d, b) { for (var p in b) if (Object.prototype.hasOwnProperty.call(b, p)) d[p] = b[p]; };\n return extendStatics(d, b);\n };\n return function (d, b) {\n if (typeof b !== \"function\" && b !== null)\n throw new TypeError(\"Class extends value \" + String(b) + \" is not a constructor or null\");\n extendStatics(d, b);\n function __() { this.constructor = d; }\n d.prototype = b === null ? Object.create(b) : (__.prototype = b.prototype, new __());\n };\n})();\n\n\n\n\n\n\n\n/**\n * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object.\n * This object is just a decorator for parsing the key parameter\n * @param {string|Object} key - The key in string format, or an object containing\n * the parameters needed to build a RSAKey object.\n * @constructor\n */\nvar JSEncryptRSAKey = /** @class */ (function (_super) {\n __extends(JSEncryptRSAKey, _super);\n function JSEncryptRSAKey(key) {\n var _this = _super.call(this) || this;\n // Call the super constructor.\n // RSAKey.call(this);\n // If a key key was provided.\n if (key) {\n // If this is a string...\n if (typeof key === \"string\") {\n _this.parseKey(key);\n }\n else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) ||\n JSEncryptRSAKey.hasPublicKeyProperty(key)) {\n // Set the values for the key.\n _this.parsePropertiesFrom(key);\n }\n }\n return _this;\n }\n /**\n * Method to parse a pem encoded string containing both a public or private key.\n * The method will translate the pem encoded string in a der encoded string and\n * will parse private key and public key parameters. This method accepts public key\n * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1).\n *\n * @todo Check how many rsa formats use the same format of pkcs #1.\n *\n * The format is defined as:\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * it's possible to examine the structure of the keys obtained from openssl using\n * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/\n * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer\n * @private\n */\n JSEncryptRSAKey.prototype.parseKey = function (pem) {\n try {\n var modulus = 0;\n var public_exponent = 0;\n var reHex = /^\\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\\s*)+$/;\n var der = reHex.test(pem) ? _lib_asn1js_hex__WEBPACK_IMPORTED_MODULE_1__.Hex.decode(pem) : _lib_asn1js_base64__WEBPACK_IMPORTED_MODULE_2__.Base64.unarmor(pem);\n var asn1 = _lib_asn1js_asn1__WEBPACK_IMPORTED_MODULE_3__.ASN1.decode(der);\n // Fixes a bug with OpenSSL 1.0+ private keys\n if (asn1.sub.length === 3) {\n asn1 = asn1.sub[2].sub[0];\n }\n if (asn1.sub.length === 9) {\n // Parse the private key.\n modulus = asn1.sub[1].getHexStringValue(); // bigint\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = asn1.sub[2].getHexStringValue(); // int\n this.e = parseInt(public_exponent, 16);\n var private_exponent = asn1.sub[3].getHexStringValue(); // bigint\n this.d = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(private_exponent, 16);\n var prime1 = asn1.sub[4].getHexStringValue(); // bigint\n this.p = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime1, 16);\n var prime2 = asn1.sub[5].getHexStringValue(); // bigint\n this.q = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(prime2, 16);\n var exponent1 = asn1.sub[6].getHexStringValue(); // bigint\n this.dmp1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent1, 16);\n var exponent2 = asn1.sub[7].getHexStringValue(); // bigint\n this.dmq1 = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(exponent2, 16);\n var coefficient = asn1.sub[8].getHexStringValue(); // bigint\n this.coeff = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(coefficient, 16);\n }\n else if (asn1.sub.length === 2) {\n // Parse the public key.\n var bit_string = asn1.sub[1];\n var sequence = bit_string.sub[0];\n modulus = sequence.sub[0].getHexStringValue();\n this.n = (0,_lib_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_5__.parseBigInt)(modulus, 16);\n public_exponent = sequence.sub[1].getHexStringValue();\n this.e = parseInt(public_exponent, 16);\n }\n else {\n return false;\n }\n return true;\n }\n catch (ex) {\n return false;\n }\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa key.\n *\n * The translation follow the ASN.1 notation :\n * RSAPrivateKey ::= SEQUENCE {\n * version Version,\n * modulus INTEGER, -- n\n * publicExponent INTEGER, -- e\n * privateExponent INTEGER, -- d\n * prime1 INTEGER, -- p\n * prime2 INTEGER, -- q\n * exponent1 INTEGER, -- d mod (p1)\n * exponent2 INTEGER, -- d mod (q-1)\n * coefficient INTEGER, -- (inverse of q) mod p\n * }\n * @returns {string} DER Encoded String representing the rsa private key\n * @private\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKey = function () {\n var options = {\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: 0 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.d }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.p }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.q }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmp1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.dmq1 }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.coeff })\n ]\n };\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence(options);\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPrivateBaseKey());\n };\n /**\n * Translate rsa parameters in a hex encoded string representing the rsa public key.\n * The representation follow the ASN.1 notation :\n * PublicKeyInfo ::= SEQUENCE {\n * algorithm AlgorithmIdentifier,\n * PublicKey BIT STRING\n * }\n * Where AlgorithmIdentifier is:\n * AlgorithmIdentifier ::= SEQUENCE {\n * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm\n * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1)\n * }\n * and PublicKey is a SEQUENCE encapsulated in a BIT STRING\n * RSAPublicKey ::= SEQUENCE {\n * modulus INTEGER, -- n\n * publicExponent INTEGER -- e\n * }\n * @returns {string} DER Encoded String representing the rsa public key\n * @private\n */\n JSEncryptRSAKey.prototype.getPublicBaseKey = function () {\n var first_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERObjectIdentifier({ oid: \"1.2.840.113549.1.1.1\" }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERNull()\n ]\n });\n var second_sequence = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ bigint: this.n }),\n new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERInteger({ int: this.e })\n ]\n });\n var bit_string = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERBitString({\n hex: \"00\" + second_sequence.getEncodedHex()\n });\n var seq = new _lib_jsrsasign_asn1_1_0__WEBPACK_IMPORTED_MODULE_6__.KJUR.asn1.DERSequence({\n array: [\n first_sequence,\n bit_string\n ]\n });\n return seq.getEncodedHex();\n };\n /**\n * base64 (pem) encoded version of the DER encoded representation\n * @returns {string} pem encoded representation without header and footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () {\n return (0,_lib_jsbn_base64__WEBPACK_IMPORTED_MODULE_0__.hex2b64)(this.getPublicBaseKey());\n };\n /**\n * wrap the string in block of width chars. The default value for rsa keys is 64\n * characters.\n * @param {string} str the pem encoded string without header and footer\n * @param {Number} [width=64] - the length the string has to be wrapped at\n * @returns {string}\n * @private\n */\n JSEncryptRSAKey.wordwrap = function (str, width) {\n width = width || 64;\n if (!str) {\n return str;\n }\n var regex = \"(.{1,\" + width + \"})( +|$\\n?)|(.{1,\" + width + \"})\";\n return str.match(RegExp(regex, \"g\")).join(\"\\n\");\n };\n /**\n * Retrieve the pem encoded private key\n * @returns {string} the pem encoded private key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPrivateKey = function () {\n var key = \"-----BEGIN RSA PRIVATE KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + \"\\n\";\n key += \"-----END RSA PRIVATE KEY-----\";\n return key;\n };\n /**\n * Retrieve the pem encoded public key\n * @returns {string} the pem encoded public key with header/footer\n * @public\n */\n JSEncryptRSAKey.prototype.getPublicKey = function () {\n var key = \"-----BEGIN PUBLIC KEY-----\\n\";\n key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + \"\\n\";\n key += \"-----END PUBLIC KEY-----\";\n return key;\n };\n /**\n * Check if the object contains the necessary parameters to populate the rsa modulus\n * and public exponent parameters.\n * @param {Object} [obj={}] - An object that may contain the two public key\n * parameters\n * @returns {boolean} true if the object contains both the modulus and the public exponent\n * properties (n and e)\n * @todo check for types of n and e. N should be a parseable bigInt object, E should\n * be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPublicKeyProperty = function (obj) {\n obj = obj || {};\n return (obj.hasOwnProperty(\"n\") &&\n obj.hasOwnProperty(\"e\"));\n };\n /**\n * Check if the object contains ALL the parameters of an RSA key.\n * @param {Object} [obj={}] - An object that may contain nine rsa key\n * parameters\n * @returns {boolean} true if the object contains all the parameters needed\n * @todo check for types of the parameters all the parameters but the public exponent\n * should be parseable bigint objects, the public exponent should be a parseable integer number\n * @private\n */\n JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) {\n obj = obj || {};\n return (obj.hasOwnProperty(\"n\") &&\n obj.hasOwnProperty(\"e\") &&\n obj.hasOwnProperty(\"d\") &&\n obj.hasOwnProperty(\"p\") &&\n obj.hasOwnProperty(\"q\") &&\n obj.hasOwnProperty(\"dmp1\") &&\n obj.hasOwnProperty(\"dmq1\") &&\n obj.hasOwnProperty(\"coeff\"));\n };\n /**\n * Parse the properties of obj in the current rsa object. Obj should AT LEAST\n * include the modulus and public exponent (n, e) parameters.\n * @param {Object} obj - the object containing rsa parameters\n * @private\n */\n JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) {\n this.n = obj.n;\n this.e = obj.e;\n if (obj.hasOwnProperty(\"d\")) {\n this.d = obj.d;\n this.p = obj.p;\n this.q = obj.q;\n this.dmp1 = obj.dmp1;\n this.dmq1 = obj.dmq1;\n this.coeff = obj.coeff;\n }\n };\n return JSEncryptRSAKey;\n}(_lib_jsbn_rsa__WEBPACK_IMPORTED_MODULE_4__.RSAKey));\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/JSEncryptRSAKey.js?"); -// ******************************************************************** -/** - * class for ASN.1 DER UTF8String - * @name KJUR.asn1.DERUTF8String - * @class class for ASN.1 DER UTF8String - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * @see KJUR.asn1.DERAbstractString - superclass - */ -KJUR.asn1.DERUTF8String = function(params) { - KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params); - this.hT = "0c"; -}; -YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString); +/***/ }), -// ******************************************************************** -/** - * class for ASN.1 DER NumericString - * @name KJUR.asn1.DERNumericString - * @class class for ASN.1 DER NumericString - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * @see KJUR.asn1.DERAbstractString - superclass - */ -KJUR.asn1.DERNumericString = function(params) { - KJUR.asn1.DERNumericString.superclass.constructor.call(this, params); - this.hT = "12"; -}; -YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString); +/***/ "./lib/index.js": +/*!**********************!*\ + !*** ./lib/index.js ***! + \**********************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -// ******************************************************************** -/** - * class for ASN.1 DER PrintableString - * @name KJUR.asn1.DERPrintableString - * @class class for ASN.1 DER PrintableString - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * @see KJUR.asn1.DERAbstractString - superclass - */ -KJUR.asn1.DERPrintableString = function(params) { - KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params); - this.hT = "13"; -}; -YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"JSEncrypt\": () => (/* reexport safe */ _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt),\n/* harmony export */ \"default\": () => (__WEBPACK_DEFAULT_EXPORT__)\n/* harmony export */ });\n/* harmony import */ var _JSEncrypt__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./JSEncrypt */ \"./lib/JSEncrypt.js\");\n\n\n/* harmony default export */ const __WEBPACK_DEFAULT_EXPORT__ = (_JSEncrypt__WEBPACK_IMPORTED_MODULE_0__.JSEncrypt);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/index.js?"); -// ******************************************************************** -/** - * class for ASN.1 DER TeletexString - * @name KJUR.asn1.DERTeletexString - * @class class for ASN.1 DER TeletexString - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * @see KJUR.asn1.DERAbstractString - superclass - */ -KJUR.asn1.DERTeletexString = function(params) { - KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params); - this.hT = "14"; -}; -YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString); +/***/ }), -// ******************************************************************** -/** - * class for ASN.1 DER IA5String - * @name KJUR.asn1.DERIA5String - * @class class for ASN.1 DER IA5String - * @param {Array} params associative array of parameters (ex. {'str': 'aaa'}) - * @extends KJUR.asn1.DERAbstractString - * @description - * @see KJUR.asn1.DERAbstractString - superclass - */ -KJUR.asn1.DERIA5String = function(params) { - KJUR.asn1.DERIA5String.superclass.constructor.call(this, params); - this.hT = "16"; -}; -YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString); +/***/ "./lib/lib/asn1js/asn1.js": +/*!********************************!*\ + !*** ./lib/lib/asn1js/asn1.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -// ******************************************************************** -/** - * class for ASN.1 DER UTCTime - * @name KJUR.asn1.DERUTCTime - * @class class for ASN.1 DER UTCTime - * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'}) - * @extends KJUR.asn1.DERAbstractTime - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
  • date - specify Date object.
  • - *
- * NOTE: 'params' can be omitted. - *

EXAMPLES

- * @example - * d1 = new KJUR.asn1.DERUTCTime(); - * d1.setString('130430125959Z'); - * - * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'}); - * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))}); - * d4 = new KJUR.asn1.DERUTCTime('130430125959Z'); - */ -KJUR.asn1.DERUTCTime = function(params) { - KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params); - this.hT = "17"; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Stream\": () => (/* binding */ Stream),\n/* harmony export */ \"ASN1\": () => (/* binding */ ASN1),\n/* harmony export */ \"ASN1Tag\": () => (/* binding */ ASN1Tag)\n/* harmony export */ });\n/* harmony import */ var _int10__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./int10 */ \"./lib/lib/asn1js/int10.js\");\n// ASN.1 JavaScript decoder\n// Copyright (c) 2008-2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\n/*global oids */\n\nvar ellipsis = \"\\u2026\";\nvar reTimeS = /^(\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nvar reTimeL = /^(\\d\\d\\d\\d)(0[1-9]|1[0-2])(0[1-9]|[12]\\d|3[01])([01]\\d|2[0-3])(?:([0-5]\\d)(?:([0-5]\\d)(?:[.,](\\d{1,3}))?)?)?(Z|[-+](?:[0]\\d|1[0-2])([0-5]\\d)?)?$/;\nfunction stringCut(str, len) {\n if (str.length > len) {\n str = str.substring(0, len) + ellipsis;\n }\n return str;\n}\nvar Stream = /** @class */ (function () {\n function Stream(enc, pos) {\n this.hexDigits = \"0123456789ABCDEF\";\n if (enc instanceof Stream) {\n this.enc = enc.enc;\n this.pos = enc.pos;\n }\n else {\n // enc should be an array or a binary string\n this.enc = enc;\n this.pos = pos;\n }\n }\n Stream.prototype.get = function (pos) {\n if (pos === undefined) {\n pos = this.pos++;\n }\n if (pos >= this.enc.length) {\n throw new Error(\"Requesting byte offset \" + pos + \" on a stream of length \" + this.enc.length);\n }\n return (\"string\" === typeof this.enc) ? this.enc.charCodeAt(pos) : this.enc[pos];\n };\n Stream.prototype.hexByte = function (b) {\n return this.hexDigits.charAt((b >> 4) & 0xF) + this.hexDigits.charAt(b & 0xF);\n };\n Stream.prototype.hexDump = function (start, end, raw) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n if (raw !== true) {\n switch (i & 0xF) {\n case 0x7:\n s += \" \";\n break;\n case 0xF:\n s += \"\\n\";\n break;\n default:\n s += \" \";\n }\n }\n }\n return s;\n };\n Stream.prototype.isASCII = function (start, end) {\n for (var i = start; i < end; ++i) {\n var c = this.get(i);\n if (c < 32 || c > 176) {\n return false;\n }\n }\n return true;\n };\n Stream.prototype.parseStringISO = function (start, end) {\n var s = \"\";\n for (var i = start; i < end; ++i) {\n s += String.fromCharCode(this.get(i));\n }\n return s;\n };\n Stream.prototype.parseStringUTF = function (start, end) {\n var s = \"\";\n for (var i = start; i < end;) {\n var c = this.get(i++);\n if (c < 128) {\n s += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n s += String.fromCharCode(((c & 0x1F) << 6) | (this.get(i++) & 0x3F));\n }\n else {\n s += String.fromCharCode(((c & 0x0F) << 12) | ((this.get(i++) & 0x3F) << 6) | (this.get(i++) & 0x3F));\n }\n }\n return s;\n };\n Stream.prototype.parseStringBMP = function (start, end) {\n var str = \"\";\n var hi;\n var lo;\n for (var i = start; i < end;) {\n hi = this.get(i++);\n lo = this.get(i++);\n str += String.fromCharCode((hi << 8) | lo);\n }\n return str;\n };\n Stream.prototype.parseTime = function (start, end, shortYear) {\n var s = this.parseStringISO(start, end);\n var m = (shortYear ? reTimeS : reTimeL).exec(s);\n if (!m) {\n return \"Unrecognized time: \" + s;\n }\n if (shortYear) {\n // to avoid querying the timer, use the fixed range [1970, 2069]\n // it will conform with ITU X.400 [-10, +40] sliding window until 2030\n m[1] = +m[1];\n m[1] += (+m[1] < 70) ? 2000 : 1900;\n }\n s = m[1] + \"-\" + m[2] + \"-\" + m[3] + \" \" + m[4];\n if (m[5]) {\n s += \":\" + m[5];\n if (m[6]) {\n s += \":\" + m[6];\n if (m[7]) {\n s += \".\" + m[7];\n }\n }\n }\n if (m[8]) {\n s += \" UTC\";\n if (m[8] != \"Z\") {\n s += m[8];\n if (m[9]) {\n s += \":\" + m[9];\n }\n }\n }\n return s;\n };\n Stream.prototype.parseInteger = function (start, end) {\n var v = this.get(start);\n var neg = (v > 127);\n var pad = neg ? 255 : 0;\n var len;\n var s = \"\";\n // skip unuseful bits (not allowed in DER)\n while (v == pad && ++start < end) {\n v = this.get(start);\n }\n len = end - start;\n if (len === 0) {\n return neg ? -1 : 0;\n }\n // show bit length of huge integers\n if (len > 4) {\n s = v;\n len <<= 3;\n while (((+s ^ pad) & 0x80) == 0) {\n s = +s << 1;\n --len;\n }\n s = \"(\" + len + \" bit)\\n\";\n }\n // decode the integer\n if (neg) {\n v = v - 256;\n }\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10(v);\n for (var i = start + 1; i < end; ++i) {\n n.mulAdd(256, this.get(i));\n }\n return s + n.toString();\n };\n Stream.prototype.parseBitString = function (start, end, maxLength) {\n var unusedBit = this.get(start);\n var lenBit = ((end - start - 1) << 3) - unusedBit;\n var intro = \"(\" + lenBit + \" bit)\\n\";\n var s = \"\";\n for (var i = start + 1; i < end; ++i) {\n var b = this.get(i);\n var skip = (i == end - 1) ? unusedBit : 0;\n for (var j = 7; j >= skip; --j) {\n s += (b >> j) & 1 ? \"1\" : \"0\";\n }\n if (s.length > maxLength) {\n return intro + stringCut(s, maxLength);\n }\n }\n return intro + s;\n };\n Stream.prototype.parseOctetString = function (start, end, maxLength) {\n if (this.isASCII(start, end)) {\n return stringCut(this.parseStringISO(start, end), maxLength);\n }\n var len = end - start;\n var s = \"(\" + len + \" byte)\\n\";\n maxLength /= 2; // we work in bytes\n if (len > maxLength) {\n end = start + maxLength;\n }\n for (var i = start; i < end; ++i) {\n s += this.hexByte(this.get(i));\n }\n if (len > maxLength) {\n s += ellipsis;\n }\n return s;\n };\n Stream.prototype.parseOID = function (start, end, maxLength) {\n var s = \"\";\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n var bits = 0;\n for (var i = start; i < end; ++i) {\n var v = this.get(i);\n n.mulAdd(128, v & 0x7F);\n bits += 7;\n if (!(v & 0x80)) { // finished\n if (s === \"\") {\n n = n.simplify();\n if (n instanceof _int10__WEBPACK_IMPORTED_MODULE_0__.Int10) {\n n.sub(80);\n s = \"2.\" + n.toString();\n }\n else {\n var m = n < 80 ? n < 40 ? 0 : 1 : 2;\n s = m + \".\" + (n - m * 40);\n }\n }\n else {\n s += \".\" + n.toString();\n }\n if (s.length > maxLength) {\n return stringCut(s, maxLength);\n }\n n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n bits = 0;\n }\n }\n if (bits > 0) {\n s += \".incomplete\";\n }\n return s;\n };\n return Stream;\n}());\n\nvar ASN1 = /** @class */ (function () {\n function ASN1(stream, header, length, tag, sub) {\n if (!(tag instanceof ASN1Tag)) {\n throw new Error(\"Invalid tag value.\");\n }\n this.stream = stream;\n this.header = header;\n this.length = length;\n this.tag = tag;\n this.sub = sub;\n }\n ASN1.prototype.typeName = function () {\n switch (this.tag.tagClass) {\n case 0: // universal\n switch (this.tag.tagNumber) {\n case 0x00:\n return \"EOC\";\n case 0x01:\n return \"BOOLEAN\";\n case 0x02:\n return \"INTEGER\";\n case 0x03:\n return \"BIT_STRING\";\n case 0x04:\n return \"OCTET_STRING\";\n case 0x05:\n return \"NULL\";\n case 0x06:\n return \"OBJECT_IDENTIFIER\";\n case 0x07:\n return \"ObjectDescriptor\";\n case 0x08:\n return \"EXTERNAL\";\n case 0x09:\n return \"REAL\";\n case 0x0A:\n return \"ENUMERATED\";\n case 0x0B:\n return \"EMBEDDED_PDV\";\n case 0x0C:\n return \"UTF8String\";\n case 0x10:\n return \"SEQUENCE\";\n case 0x11:\n return \"SET\";\n case 0x12:\n return \"NumericString\";\n case 0x13:\n return \"PrintableString\"; // ASCII subset\n case 0x14:\n return \"TeletexString\"; // aka T61String\n case 0x15:\n return \"VideotexString\";\n case 0x16:\n return \"IA5String\"; // ASCII\n case 0x17:\n return \"UTCTime\";\n case 0x18:\n return \"GeneralizedTime\";\n case 0x19:\n return \"GraphicString\";\n case 0x1A:\n return \"VisibleString\"; // ASCII subset\n case 0x1B:\n return \"GeneralString\";\n case 0x1C:\n return \"UniversalString\";\n case 0x1E:\n return \"BMPString\";\n }\n return \"Universal_\" + this.tag.tagNumber.toString();\n case 1:\n return \"Application_\" + this.tag.tagNumber.toString();\n case 2:\n return \"[\" + this.tag.tagNumber.toString() + \"]\"; // Context\n case 3:\n return \"Private_\" + this.tag.tagNumber.toString();\n }\n };\n ASN1.prototype.content = function (maxLength) {\n if (this.tag === undefined) {\n return null;\n }\n if (maxLength === undefined) {\n maxLength = Infinity;\n }\n var content = this.posContent();\n var len = Math.abs(this.length);\n if (!this.tag.isUniversal()) {\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n return this.stream.parseOctetString(content, content + len, maxLength);\n }\n switch (this.tag.tagNumber) {\n case 0x01: // BOOLEAN\n return (this.stream.get(content) === 0) ? \"false\" : \"true\";\n case 0x02: // INTEGER\n return this.stream.parseInteger(content, content + len);\n case 0x03: // BIT_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseBitString(content, content + len, maxLength);\n case 0x04: // OCTET_STRING\n return this.sub ? \"(\" + this.sub.length + \" elem)\" :\n this.stream.parseOctetString(content, content + len, maxLength);\n // case 0x05: // NULL\n case 0x06: // OBJECT_IDENTIFIER\n return this.stream.parseOID(content, content + len, maxLength);\n // case 0x07: // ObjectDescriptor\n // case 0x08: // EXTERNAL\n // case 0x09: // REAL\n // case 0x0A: // ENUMERATED\n // case 0x0B: // EMBEDDED_PDV\n case 0x10: // SEQUENCE\n case 0x11: // SET\n if (this.sub !== null) {\n return \"(\" + this.sub.length + \" elem)\";\n }\n else {\n return \"(no elem)\";\n }\n case 0x0C: // UTF8String\n return stringCut(this.stream.parseStringUTF(content, content + len), maxLength);\n case 0x12: // NumericString\n case 0x13: // PrintableString\n case 0x14: // TeletexString\n case 0x15: // VideotexString\n case 0x16: // IA5String\n // case 0x19: // GraphicString\n case 0x1A: // VisibleString\n // case 0x1B: // GeneralString\n // case 0x1C: // UniversalString\n return stringCut(this.stream.parseStringISO(content, content + len), maxLength);\n case 0x1E: // BMPString\n return stringCut(this.stream.parseStringBMP(content, content + len), maxLength);\n case 0x17: // UTCTime\n case 0x18: // GeneralizedTime\n return this.stream.parseTime(content, content + len, (this.tag.tagNumber == 0x17));\n }\n return null;\n };\n ASN1.prototype.toString = function () {\n return this.typeName() + \"@\" + this.stream.pos + \"[header:\" + this.header + \",length:\" + this.length + \",sub:\" + ((this.sub === null) ? \"null\" : this.sub.length) + \"]\";\n };\n ASN1.prototype.toPrettyString = function (indent) {\n if (indent === undefined) {\n indent = \"\";\n }\n var s = indent + this.typeName() + \" @\" + this.stream.pos;\n if (this.length >= 0) {\n s += \"+\";\n }\n s += this.length;\n if (this.tag.tagConstructed) {\n s += \" (constructed)\";\n }\n else if ((this.tag.isUniversal() && ((this.tag.tagNumber == 0x03) || (this.tag.tagNumber == 0x04))) && (this.sub !== null)) {\n s += \" (encapsulates)\";\n }\n s += \"\\n\";\n if (this.sub !== null) {\n indent += \" \";\n for (var i = 0, max = this.sub.length; i < max; ++i) {\n s += this.sub[i].toPrettyString(indent);\n }\n }\n return s;\n };\n ASN1.prototype.posStart = function () {\n return this.stream.pos;\n };\n ASN1.prototype.posContent = function () {\n return this.stream.pos + this.header;\n };\n ASN1.prototype.posEnd = function () {\n return this.stream.pos + this.header + Math.abs(this.length);\n };\n ASN1.prototype.toHexString = function () {\n return this.stream.hexDump(this.posStart(), this.posEnd(), true);\n };\n ASN1.decodeLength = function (stream) {\n var buf = stream.get();\n var len = buf & 0x7F;\n if (len == buf) {\n return len;\n }\n // no reason to use Int10, as it would be a huge buffer anyways\n if (len > 6) {\n throw new Error(\"Length over 48 bits not supported at position \" + (stream.pos - 1));\n }\n if (len === 0) {\n return null;\n } // undefined\n buf = 0;\n for (var i = 0; i < len; ++i) {\n buf = (buf * 256) + stream.get();\n }\n return buf;\n };\n /**\n * Retrieve the hexadecimal value (as a string) of the current ASN.1 element\n * @returns {string}\n * @public\n */\n ASN1.prototype.getHexStringValue = function () {\n var hexString = this.toHexString();\n var offset = this.header * 2;\n var length = this.length * 2;\n return hexString.substr(offset, length);\n };\n ASN1.decode = function (str) {\n var stream;\n if (!(str instanceof Stream)) {\n stream = new Stream(str, 0);\n }\n else {\n stream = str;\n }\n var streamStart = new Stream(stream);\n var tag = new ASN1Tag(stream);\n var len = ASN1.decodeLength(stream);\n var start = stream.pos;\n var header = start - streamStart.pos;\n var sub = null;\n var getSub = function () {\n var ret = [];\n if (len !== null) {\n // definite length\n var end = start + len;\n while (stream.pos < end) {\n ret[ret.length] = ASN1.decode(stream);\n }\n if (stream.pos != end) {\n throw new Error(\"Content size is not correct for container starting at offset \" + start);\n }\n }\n else {\n // undefined length\n try {\n for (;;) {\n var s = ASN1.decode(stream);\n if (s.tag.isEOC()) {\n break;\n }\n ret[ret.length] = s;\n }\n len = start - stream.pos; // undefined lengths are represented as negative values\n }\n catch (e) {\n throw new Error(\"Exception while decoding undefined length content: \" + e);\n }\n }\n return ret;\n };\n if (tag.tagConstructed) {\n // must have valid content\n sub = getSub();\n }\n else if (tag.isUniversal() && ((tag.tagNumber == 0x03) || (tag.tagNumber == 0x04))) {\n // sometimes BitString and OctetString are used to encapsulate ASN.1\n try {\n if (tag.tagNumber == 0x03) {\n if (stream.get() != 0) {\n throw new Error(\"BIT STRINGs with unused bits cannot encapsulate.\");\n }\n }\n sub = getSub();\n for (var i = 0; i < sub.length; ++i) {\n if (sub[i].tag.isEOC()) {\n throw new Error(\"EOC is not supposed to be actual content.\");\n }\n }\n }\n catch (e) {\n // but silently ignore when they don't\n sub = null;\n }\n }\n if (sub === null) {\n if (len === null) {\n throw new Error(\"We can't skip over an invalid tag with undefined length at offset \" + start);\n }\n stream.pos = start + Math.abs(len);\n }\n return new ASN1(streamStart, header, len, tag, sub);\n };\n return ASN1;\n}());\n\nvar ASN1Tag = /** @class */ (function () {\n function ASN1Tag(stream) {\n var buf = stream.get();\n this.tagClass = buf >> 6;\n this.tagConstructed = ((buf & 0x20) !== 0);\n this.tagNumber = buf & 0x1F;\n if (this.tagNumber == 0x1F) { // long tag\n var n = new _int10__WEBPACK_IMPORTED_MODULE_0__.Int10();\n do {\n buf = stream.get();\n n.mulAdd(128, buf & 0x7F);\n } while (buf & 0x80);\n this.tagNumber = n.simplify();\n }\n }\n ASN1Tag.prototype.isUniversal = function () {\n return this.tagClass === 0x00;\n };\n ASN1Tag.prototype.isEOC = function () {\n return this.tagClass === 0x00 && this.tagNumber === 0x00;\n };\n return ASN1Tag;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/asn1.js?"); - /** - * set value by a Date object
- * @name setByDate - * @memberOf KJUR.asn1.DERUTCTime# - * @function - * @param {Date} dateObject Date object to set ASN.1 value(V) - * @example - * o = new KJUR.asn1.DERUTCTime(); - * o.setByDate(new Date("2016/12/31")); - */ - this.setByDate = function(dateObject) { - this.hTLV = null; - this.isModified = true; - this.date = dateObject; - this.s = this.formatDate(this.date, 'utc'); - this.hV = stohex(this.s); - }; +/***/ }), - this.getFreshValueHex = function() { - if (typeof this.date == "undefined" && typeof this.s == "undefined") { - this.date = new Date(); - this.s = this.formatDate(this.date, 'utc'); - this.hV = stohex(this.s); - } - return this.hV; - }; +/***/ "./lib/lib/asn1js/base64.js": +/*!**********************************!*\ + !*** ./lib/lib/asn1js/base64.js ***! + \**********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - if (params !== undefined) { - if (params.str !== undefined) { - this.setString(params.str); - } else if (typeof params == "string" && params.match(/^[0-9]{12}Z$/)) { - this.setString(params); - } else if (params.hex !== undefined) { - this.setStringHex(params.hex); - } else if (params.date !== undefined) { - this.setByDate(params.date); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime); +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Base64\": () => (/* binding */ Base64)\n/* harmony export */ });\n// Base64 JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Base64 = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var b64 = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\n var ignore = \"= \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = Object.create(null);\n for (i = 0; i < 64; ++i) {\n decoder[b64.charAt(i)] = i;\n }\n decoder['-'] = 62; //+\n decoder['_'] = 63; //-\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 4) {\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n out[out.length] = bits & 0xFF;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 6;\n }\n }\n switch (char_count) {\n case 1:\n throw new Error(\"Base64 encoding incomplete: at least 2 bits missing\");\n case 2:\n out[out.length] = (bits >> 10);\n break;\n case 3:\n out[out.length] = (bits >> 16);\n out[out.length] = (bits >> 8) & 0xFF;\n break;\n }\n return out;\n },\n re: /-----BEGIN [^-]+-----([A-Za-z0-9+\\/=\\s]+)-----END [^-]+-----|begin-base64[^\\n]+\\n([A-Za-z0-9+\\/=\\s]+)====/,\n unarmor: function (a) {\n var m = Base64.re.exec(a);\n if (m) {\n if (m[1]) {\n a = m[1];\n }\n else if (m[2]) {\n a = m[2];\n }\n else {\n throw new Error(\"RegExp out of sync\");\n }\n }\n return Base64.decode(a);\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/base64.js?"); -// ******************************************************************** -/** - * class for ASN.1 DER GeneralizedTime - * @name KJUR.asn1.DERGeneralizedTime - * @class class for ASN.1 DER GeneralizedTime - * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'}) - * @property {Boolean} withMillis flag to show milliseconds or not - * @extends KJUR.asn1.DERAbstractTime - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
  • - *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • - *
  • date - specify Date object.
  • - *
  • millis - specify flag to show milliseconds (from 1.0.6)
  • - *
- * NOTE1: 'params' can be omitted. - * NOTE2: 'withMillis' property is supported from asn1 1.0.6. - */ -KJUR.asn1.DERGeneralizedTime = function(params) { - KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params); - this.hT = "18"; - this.withMillis = false; +/***/ }), - /** - * set value by a Date object - * @name setByDate - * @memberOf KJUR.asn1.DERGeneralizedTime# - * @function - * @param {Date} dateObject Date object to set ASN.1 value(V) - * @example - * When you specify UTC time, use 'Date.UTC' method like this:
- * o1 = new DERUTCTime(); - * o1.setByDate(date); - * - * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59 - */ - this.setByDate = function(dateObject) { - this.hTLV = null; - this.isModified = true; - this.date = dateObject; - this.s = this.formatDate(this.date, 'gen', this.withMillis); - this.hV = stohex(this.s); - }; +/***/ "./lib/lib/asn1js/hex.js": +/*!*******************************!*\ + !*** ./lib/lib/asn1js/hex.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { - this.getFreshValueHex = function() { - if (this.date === undefined && this.s === undefined) { - this.date = new Date(); - this.s = this.formatDate(this.date, 'gen', this.withMillis); - this.hV = stohex(this.s); - } - return this.hV; - }; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Hex\": () => (/* binding */ Hex)\n/* harmony export */ });\n// Hex JavaScript decoder\n// Copyright (c) 2008-2013 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar decoder;\nvar Hex = {\n decode: function (a) {\n var i;\n if (decoder === undefined) {\n var hex = \"0123456789ABCDEF\";\n var ignore = \" \\f\\n\\r\\t\\u00A0\\u2028\\u2029\";\n decoder = {};\n for (i = 0; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n hex = hex.toLowerCase();\n for (i = 10; i < 16; ++i) {\n decoder[hex.charAt(i)] = i;\n }\n for (i = 0; i < ignore.length; ++i) {\n decoder[ignore.charAt(i)] = -1;\n }\n }\n var out = [];\n var bits = 0;\n var char_count = 0;\n for (i = 0; i < a.length; ++i) {\n var c = a.charAt(i);\n if (c == \"=\") {\n break;\n }\n c = decoder[c];\n if (c == -1) {\n continue;\n }\n if (c === undefined) {\n throw new Error(\"Illegal character at offset \" + i);\n }\n bits |= c;\n if (++char_count >= 2) {\n out[out.length] = bits;\n bits = 0;\n char_count = 0;\n }\n else {\n bits <<= 4;\n }\n }\n if (char_count) {\n throw new Error(\"Hex encoding incomplete: 4 bits missing\");\n }\n return out;\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/hex.js?"); - if (params !== undefined) { - if (params.str !== undefined) { - this.setString(params.str); - } else if (typeof params == "string" && params.match(/^[0-9]{14}Z$/)) { - this.setString(params); - } else if (params.hex !== undefined) { - this.setStringHex(params.hex); - } else if (params.date !== undefined) { - this.setByDate(params.date); - } - if (params.millis === true) { - this.withMillis = true; - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime); +/***/ }), -// ******************************************************************** -/** - * class for ASN.1 DER Sequence - * @name KJUR.asn1.DERSequence - * @class class for ASN.1 DER Sequence - * @extends KJUR.asn1.DERAbstractStructured - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • array - specify array of ASN1Object to set elements of content
  • - *
- * NOTE: 'params' can be omitted. - */ -KJUR.asn1.DERSequence = function(params) { - KJUR.asn1.DERSequence.superclass.constructor.call(this, params); - this.hT = "30"; - this.getFreshValueHex = function() { - var h = ''; - for (var i = 0; i < this.asn1Array.length; i++) { - var asn1Obj = this.asn1Array[i]; - h += asn1Obj.getEncodedHex(); - } - this.hV = h; - return this.hV; - }; -}; -YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured); +/***/ "./lib/lib/asn1js/int10.js": +/*!*********************************!*\ + !*** ./lib/lib/asn1js/int10.js ***! + \*********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -// ******************************************************************** -/** - * class for ASN.1 DER Set - * @name KJUR.asn1.DERSet - * @class class for ASN.1 DER Set - * @extends KJUR.asn1.DERAbstractStructured - * @description - *
- * As for argument 'params' for constructor, you can specify one of - * following properties: - *
    - *
  • array - specify array of ASN1Object to set elements of content
  • - *
  • sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
  • - *
- * NOTE1: 'params' can be omitted.
- * NOTE2: sortflag is supported since 1.0.5. - */ -KJUR.asn1.DERSet = function(params) { - KJUR.asn1.DERSet.superclass.constructor.call(this, params); - this.hT = "31"; - this.sortFlag = true; // item shall be sorted only in ASN.1 DER - this.getFreshValueHex = function() { - var a = new Array(); - for (var i = 0; i < this.asn1Array.length; i++) { - var asn1Obj = this.asn1Array[i]; - a.push(asn1Obj.getEncodedHex()); - } - if (this.sortFlag == true) a.sort(); - this.hV = a.join(''); - return this.hV; - }; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Int10\": () => (/* binding */ Int10)\n/* harmony export */ });\n// Big integer base-10 printing library\n// Copyright (c) 2014 Lapo Luchini \n// Permission to use, copy, modify, and/or distribute this software for any\n// purpose with or without fee is hereby granted, provided that the above\n// copyright notice and this permission notice appear in all copies.\n//\n// THE SOFTWARE IS PROVIDED \"AS IS\" AND THE AUTHOR DISCLAIMS ALL WARRANTIES\n// WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF\n// MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR\n// ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES\n// WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN\n// ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF\n// OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.\n/*jshint browser: true, strict: true, immed: true, latedef: true, undef: true, regexdash: false */\nvar max = 10000000000000; // biggest integer that can still fit 2^53 when multiplied by 256\nvar Int10 = /** @class */ (function () {\n function Int10(value) {\n this.buf = [+value || 0];\n }\n Int10.prototype.mulAdd = function (m, c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] * m + c;\n if (t < max) {\n c = 0;\n }\n else {\n c = 0 | (t / max);\n t -= c * max;\n }\n b[i] = t;\n }\n if (c > 0) {\n b[i] = c;\n }\n };\n Int10.prototype.sub = function (c) {\n // assert(m <= 256)\n var b = this.buf;\n var l = b.length;\n var i;\n var t;\n for (i = 0; i < l; ++i) {\n t = b[i] - c;\n if (t < 0) {\n t += max;\n c = 1;\n }\n else {\n c = 0;\n }\n b[i] = t;\n }\n while (b[b.length - 1] === 0) {\n b.pop();\n }\n };\n Int10.prototype.toString = function (base) {\n if ((base || 10) != 10) {\n throw new Error(\"only base 10 is supported\");\n }\n var b = this.buf;\n var s = b[b.length - 1].toString();\n for (var i = b.length - 2; i >= 0; --i) {\n s += (max + b[i]).toString().substring(1);\n }\n return s;\n };\n Int10.prototype.valueOf = function () {\n var b = this.buf;\n var v = 0;\n for (var i = b.length - 1; i >= 0; --i) {\n v = v * max + b[i];\n }\n return v;\n };\n Int10.prototype.simplify = function () {\n var b = this.buf;\n return (b.length == 1) ? b[0] : this;\n };\n return Int10;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/asn1js/int10.js?"); - if (typeof params != "undefined") { - if (typeof params.sortflag != "undefined" && - params.sortflag == false) - this.sortFlag = false; - } -}; -YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured); - -// ******************************************************************** -/** - * class for ASN.1 DER TaggedObject - * @name KJUR.asn1.DERTaggedObject - * @class class for ASN.1 DER TaggedObject - * @extends KJUR.asn1.ASN1Object - * @description - *
- * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object. - * For example, if you find '[1]' tag in a ASN.1 dump, - * 'tagNoHex' will be 'a1'. - *
- * As for optional argument 'params' for constructor, you can specify *ANY* of - * following properties: - *
    - *
  • explicit - specify true if this is explicit tag otherwise false - * (default is 'true').
  • - *
  • tag - specify tag (default is 'a0' which means [0])
  • - *
  • obj - specify ASN1Object which is tagged
  • - *
- * @example - * d1 = new KJUR.asn1.DERUTF8String({'str':'a'}); - * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1}); - * hex = d2.getEncodedHex(); - */ -KJUR.asn1.DERTaggedObject = function(params) { - KJUR.asn1.DERTaggedObject.superclass.constructor.call(this); - this.hT = "a0"; - this.hV = ''; - this.isExplicit = true; - this.asn1Object = null; - - /** - * set value by an ASN1Object - * @name setString - * @memberOf KJUR.asn1.DERTaggedObject# - * @function - * @param {Boolean} isExplicitFlag flag for explicit/implicit tag - * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag - * @param {ASN1Object} asn1Object ASN.1 to encapsulate - */ - this.setASN1Object = function(isExplicitFlag, tagNoHex, asn1Object) { - this.hT = tagNoHex; - this.isExplicit = isExplicitFlag; - this.asn1Object = asn1Object; - if (this.isExplicit) { - this.hV = this.asn1Object.getEncodedHex(); - this.hTLV = null; - this.isModified = true; - } else { - this.hV = null; - this.hTLV = asn1Object.getEncodedHex(); - this.hTLV = this.hTLV.replace(/^../, tagNoHex); - this.isModified = false; - } - }; - - this.getFreshValueHex = function() { - return this.hV; - }; - - if (typeof params != "undefined") { - if (typeof params['tag'] != "undefined") { - this.hT = params['tag']; - } - if (typeof params['explicit'] != "undefined") { - this.isExplicit = params['explicit']; - } - if (typeof params['obj'] != "undefined") { - this.asn1Object = params['obj']; - this.setASN1Object(this.isExplicit, this.hT, this.asn1Object); - } - } -}; -YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object); - -/** - * Create a new JSEncryptRSAKey that extends Tom Wu's RSA key object. - * This object is just a decorator for parsing the key parameter - * @param {string|Object} key - The key in string format, or an object containing - * the parameters needed to build a RSAKey object. - * @constructor - */ -var JSEncryptRSAKey = /** @class */ (function (_super) { - __extends(JSEncryptRSAKey, _super); - function JSEncryptRSAKey(key) { - var _this = _super.call(this) || this; - // Call the super constructor. - // RSAKey.call(this); - // If a key key was provided. - if (key) { - // If this is a string... - if (typeof key === "string") { - _this.parseKey(key); - } - else if (JSEncryptRSAKey.hasPrivateKeyProperty(key) || - JSEncryptRSAKey.hasPublicKeyProperty(key)) { - // Set the values for the key. - _this.parsePropertiesFrom(key); - } - } - return _this; - } - /** - * Method to parse a pem encoded string containing both a public or private key. - * The method will translate the pem encoded string in a der encoded string and - * will parse private key and public key parameters. This method accepts public key - * in the rsaencryption pkcs #1 format (oid: 1.2.840.113549.1.1.1). - * - * @todo Check how many rsa formats use the same format of pkcs #1. - * - * The format is defined as: - * PublicKeyInfo ::= SEQUENCE { - * algorithm AlgorithmIdentifier, - * PublicKey BIT STRING - * } - * Where AlgorithmIdentifier is: - * AlgorithmIdentifier ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm - * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1) - * } - * and PublicKey is a SEQUENCE encapsulated in a BIT STRING - * RSAPublicKey ::= SEQUENCE { - * modulus INTEGER, -- n - * publicExponent INTEGER -- e - * } - * it's possible to examine the structure of the keys obtained from openssl using - * an asn.1 dumper as the one used here to parse the components: http://lapo.it/asn1js/ - * @argument {string} pem the pem encoded string, can include the BEGIN/END header/footer - * @private - */ - JSEncryptRSAKey.prototype.parseKey = function (pem) { - try { - var modulus = 0; - var public_exponent = 0; - var reHex = /^\s*(?:[0-9A-Fa-f][0-9A-Fa-f]\s*)+$/; - var der = reHex.test(pem) ? Hex.decode(pem) : Base64.unarmor(pem); - var asn1 = ASN1.decode(der); - // Fixes a bug with OpenSSL 1.0+ private keys - if (asn1.sub.length === 3) { - asn1 = asn1.sub[2].sub[0]; - } - if (asn1.sub.length === 9) { - // Parse the private key. - modulus = asn1.sub[1].getHexStringValue(); // bigint - this.n = parseBigInt(modulus, 16); - public_exponent = asn1.sub[2].getHexStringValue(); // int - this.e = parseInt(public_exponent, 16); - var private_exponent = asn1.sub[3].getHexStringValue(); // bigint - this.d = parseBigInt(private_exponent, 16); - var prime1 = asn1.sub[4].getHexStringValue(); // bigint - this.p = parseBigInt(prime1, 16); - var prime2 = asn1.sub[5].getHexStringValue(); // bigint - this.q = parseBigInt(prime2, 16); - var exponent1 = asn1.sub[6].getHexStringValue(); // bigint - this.dmp1 = parseBigInt(exponent1, 16); - var exponent2 = asn1.sub[7].getHexStringValue(); // bigint - this.dmq1 = parseBigInt(exponent2, 16); - var coefficient = asn1.sub[8].getHexStringValue(); // bigint - this.coeff = parseBigInt(coefficient, 16); - } - else if (asn1.sub.length === 2) { - // Parse the public key. - var bit_string = asn1.sub[1]; - var sequence = bit_string.sub[0]; - modulus = sequence.sub[0].getHexStringValue(); - this.n = parseBigInt(modulus, 16); - public_exponent = sequence.sub[1].getHexStringValue(); - this.e = parseInt(public_exponent, 16); - } - else { - return false; - } - return true; - } - catch (ex) { - return false; - } - }; - /** - * Translate rsa parameters in a hex encoded string representing the rsa key. - * - * The translation follow the ASN.1 notation : - * RSAPrivateKey ::= SEQUENCE { - * version Version, - * modulus INTEGER, -- n - * publicExponent INTEGER, -- e - * privateExponent INTEGER, -- d - * prime1 INTEGER, -- p - * prime2 INTEGER, -- q - * exponent1 INTEGER, -- d mod (p1) - * exponent2 INTEGER, -- d mod (q-1) - * coefficient INTEGER, -- (inverse of q) mod p - * } - * @returns {string} DER Encoded String representing the rsa private key - * @private - */ - JSEncryptRSAKey.prototype.getPrivateBaseKey = function () { - var options = { - array: [ - new KJUR.asn1.DERInteger({ int: 0 }), - new KJUR.asn1.DERInteger({ bigint: this.n }), - new KJUR.asn1.DERInteger({ int: this.e }), - new KJUR.asn1.DERInteger({ bigint: this.d }), - new KJUR.asn1.DERInteger({ bigint: this.p }), - new KJUR.asn1.DERInteger({ bigint: this.q }), - new KJUR.asn1.DERInteger({ bigint: this.dmp1 }), - new KJUR.asn1.DERInteger({ bigint: this.dmq1 }), - new KJUR.asn1.DERInteger({ bigint: this.coeff }) - ] - }; - var seq = new KJUR.asn1.DERSequence(options); - return seq.getEncodedHex(); - }; - /** - * base64 (pem) encoded version of the DER encoded representation - * @returns {string} pem encoded representation without header and footer - * @public - */ - JSEncryptRSAKey.prototype.getPrivateBaseKeyB64 = function () { - return hex2b64(this.getPrivateBaseKey()); - }; - /** - * Translate rsa parameters in a hex encoded string representing the rsa public key. - * The representation follow the ASN.1 notation : - * PublicKeyInfo ::= SEQUENCE { - * algorithm AlgorithmIdentifier, - * PublicKey BIT STRING - * } - * Where AlgorithmIdentifier is: - * AlgorithmIdentifier ::= SEQUENCE { - * algorithm OBJECT IDENTIFIER, the OID of the enc algorithm - * parameters ANY DEFINED BY algorithm OPTIONAL (NULL for PKCS #1) - * } - * and PublicKey is a SEQUENCE encapsulated in a BIT STRING - * RSAPublicKey ::= SEQUENCE { - * modulus INTEGER, -- n - * publicExponent INTEGER -- e - * } - * @returns {string} DER Encoded String representing the rsa public key - * @private - */ - JSEncryptRSAKey.prototype.getPublicBaseKey = function () { - var first_sequence = new KJUR.asn1.DERSequence({ - array: [ - new KJUR.asn1.DERObjectIdentifier({ oid: "1.2.840.113549.1.1.1" }), - new KJUR.asn1.DERNull() - ] - }); - var second_sequence = new KJUR.asn1.DERSequence({ - array: [ - new KJUR.asn1.DERInteger({ bigint: this.n }), - new KJUR.asn1.DERInteger({ int: this.e }) - ] - }); - var bit_string = new KJUR.asn1.DERBitString({ - hex: "00" + second_sequence.getEncodedHex() - }); - var seq = new KJUR.asn1.DERSequence({ - array: [ - first_sequence, - bit_string - ] - }); - return seq.getEncodedHex(); - }; - /** - * base64 (pem) encoded version of the DER encoded representation - * @returns {string} pem encoded representation without header and footer - * @public - */ - JSEncryptRSAKey.prototype.getPublicBaseKeyB64 = function () { - return hex2b64(this.getPublicBaseKey()); - }; - /** - * wrap the string in block of width chars. The default value for rsa keys is 64 - * characters. - * @param {string} str the pem encoded string without header and footer - * @param {Number} [width=64] - the length the string has to be wrapped at - * @returns {string} - * @private - */ - JSEncryptRSAKey.wordwrap = function (str, width) { - width = width || 64; - if (!str) { - return str; - } - var regex = "(.{1," + width + "})( +|$\n?)|(.{1," + width + "})"; - return str.match(RegExp(regex, "g")).join("\n"); - }; - /** - * Retrieve the pem encoded private key - * @returns {string} the pem encoded private key with header/footer - * @public - */ - JSEncryptRSAKey.prototype.getPrivateKey = function () { - var key = "-----BEGIN RSA PRIVATE KEY-----\n"; - key += JSEncryptRSAKey.wordwrap(this.getPrivateBaseKeyB64()) + "\n"; - key += "-----END RSA PRIVATE KEY-----"; - return key; - }; - /** - * Retrieve the pem encoded public key - * @returns {string} the pem encoded public key with header/footer - * @public - */ - JSEncryptRSAKey.prototype.getPublicKey = function () { - var key = "-----BEGIN PUBLIC KEY-----\n"; - key += JSEncryptRSAKey.wordwrap(this.getPublicBaseKeyB64()) + "\n"; - key += "-----END PUBLIC KEY-----"; - return key; - }; - /** - * Check if the object contains the necessary parameters to populate the rsa modulus - * and public exponent parameters. - * @param {Object} [obj={}] - An object that may contain the two public key - * parameters - * @returns {boolean} true if the object contains both the modulus and the public exponent - * properties (n and e) - * @todo check for types of n and e. N should be a parseable bigInt object, E should - * be a parseable integer number - * @private - */ - JSEncryptRSAKey.hasPublicKeyProperty = function (obj) { - obj = obj || {}; - return (obj.hasOwnProperty("n") && - obj.hasOwnProperty("e")); - }; - /** - * Check if the object contains ALL the parameters of an RSA key. - * @param {Object} [obj={}] - An object that may contain nine rsa key - * parameters - * @returns {boolean} true if the object contains all the parameters needed - * @todo check for types of the parameters all the parameters but the public exponent - * should be parseable bigint objects, the public exponent should be a parseable integer number - * @private - */ - JSEncryptRSAKey.hasPrivateKeyProperty = function (obj) { - obj = obj || {}; - return (obj.hasOwnProperty("n") && - obj.hasOwnProperty("e") && - obj.hasOwnProperty("d") && - obj.hasOwnProperty("p") && - obj.hasOwnProperty("q") && - obj.hasOwnProperty("dmp1") && - obj.hasOwnProperty("dmq1") && - obj.hasOwnProperty("coeff")); - }; - /** - * Parse the properties of obj in the current rsa object. Obj should AT LEAST - * include the modulus and public exponent (n, e) parameters. - * @param {Object} obj - the object containing rsa parameters - * @private - */ - JSEncryptRSAKey.prototype.parsePropertiesFrom = function (obj) { - this.n = obj.n; - this.e = obj.e; - if (obj.hasOwnProperty("d")) { - this.d = obj.d; - this.p = obj.p; - this.q = obj.q; - this.dmp1 = obj.dmp1; - this.dmq1 = obj.dmq1; - this.coeff = obj.coeff; - } - }; - return JSEncryptRSAKey; -}(RSAKey)); - -/** - * - * @param {Object} [options = {}] - An object to customize JSEncrypt behaviour - * possible parameters are: - * - default_key_size {number} default: 1024 the key size in bit - * - default_public_exponent {string} default: '010001' the hexadecimal representation of the public exponent - * - log {boolean} default: false whether log warn/error or not - * @constructor - */ -var JSEncrypt = /** @class */ (function () { - function JSEncrypt(options) { - options = options || {}; - this.default_key_size = parseInt(options.default_key_size, 10) || 1024; - this.default_public_exponent = options.default_public_exponent || "010001"; // 65537 default openssl public exponent for rsa key type - this.log = options.log || false; - // The private and public key. - this.key = null; - } - /** - * Method to set the rsa key parameter (one method is enough to set both the public - * and the private key, since the private key contains the public key paramenters) - * Log a warning if logs are enabled - * @param {Object|string} key the pem encoded string or an object (with or without header/footer) - * @public - */ - JSEncrypt.prototype.setKey = function (key) { - if (this.log && this.key) { - console.warn("A key was already set, overriding existing."); - } - this.key = new JSEncryptRSAKey(key); - }; - /** - * Proxy method for setKey, for api compatibility - * @see setKey - * @public - */ - JSEncrypt.prototype.setPrivateKey = function (privkey) { - // Create the key. - this.setKey(privkey); - }; - /** - * Proxy method for setKey, for api compatibility - * @see setKey - * @public - */ - JSEncrypt.prototype.setPublicKey = function (pubkey) { - // Sets the public key. - this.setKey(pubkey); - }; - /** - * Proxy method for RSAKey object's decrypt, decrypt the string using the private - * components of the rsa key object. Note that if the object was not set will be created - * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor - * @param {string} str base64 encoded crypted string to decrypt - * @return {string} the decrypted string - * @public - */ - JSEncrypt.prototype.decrypt = function (str) { - // Return the decrypted string. - try { - return this.getKey().decrypt(b64tohex(str)); - } - catch (ex) { - return false; - } - }; - /** - * Proxy method for RSAKey object's encrypt, encrypt the string using the public - * components of the rsa key object. Note that if the object was not set will be created - * on the fly (by the getKey method) using the parameters passed in the JSEncrypt constructor - * @param {string} str the string to encrypt - * @return {string} the encrypted string encoded in base64 - * @public - */ - JSEncrypt.prototype.encrypt = function (str) { - // Return the encrypted string. - try { - return hex2b64(this.getKey().encrypt(str)); - } - catch (ex) { - return false; - } - }; - /** - * Proxy method for RSAKey object's sign. - * @param {string} str the string to sign - * @param {function} digestMethod hash method - * @param {string} digestName the name of the hash algorithm - * @return {string} the signature encoded in base64 - * @public - */ - JSEncrypt.prototype.sign = function (str, digestMethod, digestName) { - // return the RSA signature of 'str' in 'hex' format. - try { - return hex2b64(this.getKey().sign(str, digestMethod, digestName)); - } - catch (ex) { - return false; - } - }; - /** - * Proxy method for RSAKey object's verify. - * @param {string} str the string to verify - * @param {string} signature the signature encoded in base64 to compare the string to - * @param {function} digestMethod hash method - * @return {boolean} whether the data and signature match - * @public - */ - JSEncrypt.prototype.verify = function (str, signature, digestMethod) { - // Return the decrypted 'digest' of the signature. - try { - return this.getKey().verify(str, b64tohex(signature), digestMethod); - } - catch (ex) { - return false; - } - }; - /** - * Getter for the current JSEncryptRSAKey object. If it doesn't exists a new object - * will be created and returned - * @param {callback} [cb] the callback to be called if we want the key to be generated - * in an async fashion - * @returns {JSEncryptRSAKey} the JSEncryptRSAKey object - * @public - */ - JSEncrypt.prototype.getKey = function (cb) { - // Only create new if it does not exist. - if (!this.key) { - // Get a new private key. - this.key = new JSEncryptRSAKey(); - if (cb && {}.toString.call(cb) === "[object Function]") { - this.key.generateAsync(this.default_key_size, this.default_public_exponent, cb); - return; - } - // Generate the key. - this.key.generate(this.default_key_size, this.default_public_exponent); - } - return this.key; - }; - /** - * Returns the pem encoded representation of the private key - * If the key doesn't exists a new key will be created - * @returns {string} pem encoded representation of the private key WITH header and footer - * @public - */ - JSEncrypt.prototype.getPrivateKey = function () { - // Return the private representation of this key. - return this.getKey().getPrivateKey(); - }; - /** - * Returns the pem encoded representation of the private key - * If the key doesn't exists a new key will be created - * @returns {string} pem encoded representation of the private key WITHOUT header and footer - * @public - */ - JSEncrypt.prototype.getPrivateKeyB64 = function () { - // Return the private representation of this key. - return this.getKey().getPrivateBaseKeyB64(); - }; - /** - * Returns the pem encoded representation of the public key - * If the key doesn't exists a new key will be created - * @returns {string} pem encoded representation of the public key WITH header and footer - * @public - */ - JSEncrypt.prototype.getPublicKey = function () { - // Return the private representation of this key. - return this.getKey().getPublicKey(); - }; - /** - * Returns the pem encoded representation of the public key - * If the key doesn't exists a new key will be created - * @returns {string} pem encoded representation of the public key WITHOUT header and footer - * @public - */ - JSEncrypt.prototype.getPublicKeyB64 = function () { - // Return the private representation of this key. - return this.getKey().getPublicBaseKeyB64(); - }; - JSEncrypt.version = "3.0.0-rc.1"; - return JSEncrypt; -}()); +/***/ }), -window.JSEncrypt = JSEncrypt; +/***/ "./lib/lib/jsbn/base64.js": +/*!********************************!*\ + !*** ./lib/lib/jsbn/base64.js ***! + \********************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { -exports.JSEncrypt = JSEncrypt; -exports.default = JSEncrypt; +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"hex2b64\": () => (/* binding */ hex2b64),\n/* harmony export */ \"b64tohex\": () => (/* binding */ b64tohex),\n/* harmony export */ \"b64toBA\": () => (/* binding */ b64toBA)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n\nvar b64map = \"ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/\";\nvar b64pad = \"=\";\nfunction hex2b64(h) {\n var i;\n var c;\n var ret = \"\";\n for (i = 0; i + 3 <= h.length; i += 3) {\n c = parseInt(h.substring(i, i + 3), 16);\n ret += b64map.charAt(c >> 6) + b64map.charAt(c & 63);\n }\n if (i + 1 == h.length) {\n c = parseInt(h.substring(i, i + 1), 16);\n ret += b64map.charAt(c << 2);\n }\n else if (i + 2 == h.length) {\n c = parseInt(h.substring(i, i + 2), 16);\n ret += b64map.charAt(c >> 2) + b64map.charAt((c & 3) << 4);\n }\n while ((ret.length & 3) > 0) {\n ret += b64pad;\n }\n return ret;\n}\n// convert a base64 string to hex\nfunction b64tohex(s) {\n var ret = \"\";\n var i;\n var k = 0; // b64 state, 0-3\n var slop = 0;\n for (i = 0; i < s.length; ++i) {\n if (s.charAt(i) == b64pad) {\n break;\n }\n var v = b64map.indexOf(s.charAt(i));\n if (v < 0) {\n continue;\n }\n if (k == 0) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 1;\n }\n else if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n slop = v & 0xf;\n k = 2;\n }\n else if (k == 2) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop);\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v >> 2);\n slop = v & 3;\n k = 3;\n }\n else {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)((slop << 2) | (v >> 4));\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(v & 0xf);\n k = 0;\n }\n }\n if (k == 1) {\n ret += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(slop << 2);\n }\n return ret;\n}\n// convert a base64 string to a byte/number array\nfunction b64toBA(s) {\n // piggyback on b64tohex for now, optimize later\n var h = b64tohex(s);\n var i;\n var a = [];\n for (i = 0; 2 * i < h.length; ++i) {\n a[i] = parseInt(h.substring(2 * i, 2 * i + 2), 16);\n }\n return a;\n}\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/base64.js?"); -Object.defineProperty(exports, '__esModule', { value: true }); +/***/ }), -}))); +/***/ "./lib/lib/jsbn/jsbn.js": +/*!******************************!*\ + !*** ./lib/lib/jsbn/jsbn.js ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"BigInteger\": () => (/* binding */ BigInteger),\n/* harmony export */ \"nbi\": () => (/* binding */ nbi),\n/* harmony export */ \"parseBigInt\": () => (/* binding */ parseBigInt),\n/* harmony export */ \"intAt\": () => (/* binding */ intAt),\n/* harmony export */ \"nbv\": () => (/* binding */ nbv),\n/* harmony export */ \"nbits\": () => (/* binding */ nbits)\n/* harmony export */ });\n/* harmony import */ var _util__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./util */ \"./lib/lib/jsbn/util.js\");\n// Copyright (c) 2005 Tom Wu\n// All Rights Reserved.\n// See \"LICENSE\" for details.\n// Basic JavaScript BN library - subset useful for RSA encryption.\n\n// Bits per digit\nvar dbits;\n// JavaScript engine analysis\nvar canary = 0xdeadbeefcafe;\nvar j_lm = ((canary & 0xffffff) == 0xefcafe);\n//#region\nvar lowprimes = [2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97, 101, 103, 107, 109, 113, 127, 131, 137, 139, 149, 151, 157, 163, 167, 173, 179, 181, 191, 193, 197, 199, 211, 223, 227, 229, 233, 239, 241, 251, 257, 263, 269, 271, 277, 281, 283, 293, 307, 311, 313, 317, 331, 337, 347, 349, 353, 359, 367, 373, 379, 383, 389, 397, 401, 409, 419, 421, 431, 433, 439, 443, 449, 457, 461, 463, 467, 479, 487, 491, 499, 503, 509, 521, 523, 541, 547, 557, 563, 569, 571, 577, 587, 593, 599, 601, 607, 613, 617, 619, 631, 641, 643, 647, 653, 659, 661, 673, 677, 683, 691, 701, 709, 719, 727, 733, 739, 743, 751, 757, 761, 769, 773, 787, 797, 809, 811, 821, 823, 827, 829, 839, 853, 857, 859, 863, 877, 881, 883, 887, 907, 911, 919, 929, 937, 941, 947, 953, 967, 971, 977, 983, 991, 997];\nvar lplim = (1 << 26) / lowprimes[lowprimes.length - 1];\n//#endregion\n// (public) Constructor\nvar BigInteger = /** @class */ (function () {\n function BigInteger(a, b, c) {\n if (a != null) {\n if (\"number\" == typeof a) {\n this.fromNumber(a, b, c);\n }\n else if (b == null && \"string\" != typeof a) {\n this.fromString(a, 256);\n }\n else {\n this.fromString(a, b);\n }\n }\n }\n //#region PUBLIC\n // BigInteger.prototype.toString = bnToString;\n // (public) return string representation in given radix\n BigInteger.prototype.toString = function (b) {\n if (this.s < 0) {\n return \"-\" + this.negate().toString(b);\n }\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n return this.toRadix(b);\n }\n var km = (1 << k) - 1;\n var d;\n var m = false;\n var r = \"\";\n var i = this.t;\n var p = this.DB - (i * this.DB) % k;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) > 0) {\n m = true;\n r = (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n while (i >= 0) {\n if (p < k) {\n d = (this[i] & ((1 << p) - 1)) << (k - p);\n d |= this[--i] >> (p += this.DB - k);\n }\n else {\n d = (this[i] >> (p -= k)) & km;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if (d > 0) {\n m = true;\n }\n if (m) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.int2char)(d);\n }\n }\n }\n return m ? r : \"0\";\n };\n // BigInteger.prototype.negate = bnNegate;\n // (public) -this\n BigInteger.prototype.negate = function () {\n var r = nbi();\n BigInteger.ZERO.subTo(this, r);\n return r;\n };\n // BigInteger.prototype.abs = bnAbs;\n // (public) |this|\n BigInteger.prototype.abs = function () {\n return (this.s < 0) ? this.negate() : this;\n };\n // BigInteger.prototype.compareTo = bnCompareTo;\n // (public) return + if this > a, - if this < a, 0 if equal\n BigInteger.prototype.compareTo = function (a) {\n var r = this.s - a.s;\n if (r != 0) {\n return r;\n }\n var i = this.t;\n r = i - a.t;\n if (r != 0) {\n return (this.s < 0) ? -r : r;\n }\n while (--i >= 0) {\n if ((r = this[i] - a[i]) != 0) {\n return r;\n }\n }\n return 0;\n };\n // BigInteger.prototype.bitLength = bnBitLength;\n // (public) return the number of bits in \"this\"\n BigInteger.prototype.bitLength = function () {\n if (this.t <= 0) {\n return 0;\n }\n return this.DB * (this.t - 1) + nbits(this[this.t - 1] ^ (this.s & this.DM));\n };\n // BigInteger.prototype.mod = bnMod;\n // (public) this mod a\n BigInteger.prototype.mod = function (a) {\n var r = nbi();\n this.abs().divRemTo(a, null, r);\n if (this.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n a.subTo(r, r);\n }\n return r;\n };\n // BigInteger.prototype.modPowInt = bnModPowInt;\n // (public) this^e % m, 0 <= e < 2^32\n BigInteger.prototype.modPowInt = function (e, m) {\n var z;\n if (e < 256 || m.isEven()) {\n z = new Classic(m);\n }\n else {\n z = new Montgomery(m);\n }\n return this.exp(e, z);\n };\n // BigInteger.prototype.clone = bnClone;\n // (public)\n BigInteger.prototype.clone = function () {\n var r = nbi();\n this.copyTo(r);\n return r;\n };\n // BigInteger.prototype.intValue = bnIntValue;\n // (public) return value as integer\n BigInteger.prototype.intValue = function () {\n if (this.s < 0) {\n if (this.t == 1) {\n return this[0] - this.DV;\n }\n else if (this.t == 0) {\n return -1;\n }\n }\n else if (this.t == 1) {\n return this[0];\n }\n else if (this.t == 0) {\n return 0;\n }\n // assumes 16 < DB < 32\n return ((this[1] & ((1 << (32 - this.DB)) - 1)) << this.DB) | this[0];\n };\n // BigInteger.prototype.byteValue = bnByteValue;\n // (public) return value as byte\n BigInteger.prototype.byteValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 24) >> 24;\n };\n // BigInteger.prototype.shortValue = bnShortValue;\n // (public) return value as short (assumes DB>=16)\n BigInteger.prototype.shortValue = function () {\n return (this.t == 0) ? this.s : (this[0] << 16) >> 16;\n };\n // BigInteger.prototype.signum = bnSigNum;\n // (public) 0 if this == 0, 1 if this > 0\n BigInteger.prototype.signum = function () {\n if (this.s < 0) {\n return -1;\n }\n else if (this.t <= 0 || (this.t == 1 && this[0] <= 0)) {\n return 0;\n }\n else {\n return 1;\n }\n };\n // BigInteger.prototype.toByteArray = bnToByteArray;\n // (public) convert to bigendian byte array\n BigInteger.prototype.toByteArray = function () {\n var i = this.t;\n var r = [];\n r[0] = this.s;\n var p = this.DB - (i * this.DB) % 8;\n var d;\n var k = 0;\n if (i-- > 0) {\n if (p < this.DB && (d = this[i] >> p) != (this.s & this.DM) >> p) {\n r[k++] = d | (this.s << (this.DB - p));\n }\n while (i >= 0) {\n if (p < 8) {\n d = (this[i] & ((1 << p) - 1)) << (8 - p);\n d |= this[--i] >> (p += this.DB - 8);\n }\n else {\n d = (this[i] >> (p -= 8)) & 0xff;\n if (p <= 0) {\n p += this.DB;\n --i;\n }\n }\n if ((d & 0x80) != 0) {\n d |= -256;\n }\n if (k == 0 && (this.s & 0x80) != (d & 0x80)) {\n ++k;\n }\n if (k > 0 || d != this.s) {\n r[k++] = d;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.equals = bnEquals;\n BigInteger.prototype.equals = function (a) {\n return (this.compareTo(a) == 0);\n };\n // BigInteger.prototype.min = bnMin;\n BigInteger.prototype.min = function (a) {\n return (this.compareTo(a) < 0) ? this : a;\n };\n // BigInteger.prototype.max = bnMax;\n BigInteger.prototype.max = function (a) {\n return (this.compareTo(a) > 0) ? this : a;\n };\n // BigInteger.prototype.and = bnAnd;\n BigInteger.prototype.and = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_and, r);\n return r;\n };\n // BigInteger.prototype.or = bnOr;\n BigInteger.prototype.or = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_or, r);\n return r;\n };\n // BigInteger.prototype.xor = bnXor;\n BigInteger.prototype.xor = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_xor, r);\n return r;\n };\n // BigInteger.prototype.andNot = bnAndNot;\n BigInteger.prototype.andNot = function (a) {\n var r = nbi();\n this.bitwiseTo(a, _util__WEBPACK_IMPORTED_MODULE_0__.op_andnot, r);\n return r;\n };\n // BigInteger.prototype.not = bnNot;\n // (public) ~this\n BigInteger.prototype.not = function () {\n var r = nbi();\n for (var i = 0; i < this.t; ++i) {\n r[i] = this.DM & ~this[i];\n }\n r.t = this.t;\n r.s = ~this.s;\n return r;\n };\n // BigInteger.prototype.shiftLeft = bnShiftLeft;\n // (public) this << n\n BigInteger.prototype.shiftLeft = function (n) {\n var r = nbi();\n if (n < 0) {\n this.rShiftTo(-n, r);\n }\n else {\n this.lShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.shiftRight = bnShiftRight;\n // (public) this >> n\n BigInteger.prototype.shiftRight = function (n) {\n var r = nbi();\n if (n < 0) {\n this.lShiftTo(-n, r);\n }\n else {\n this.rShiftTo(n, r);\n }\n return r;\n };\n // BigInteger.prototype.getLowestSetBit = bnGetLowestSetBit;\n // (public) returns index of lowest 1-bit (or -1 if none)\n BigInteger.prototype.getLowestSetBit = function () {\n for (var i = 0; i < this.t; ++i) {\n if (this[i] != 0) {\n return i * this.DB + (0,_util__WEBPACK_IMPORTED_MODULE_0__.lbit)(this[i]);\n }\n }\n if (this.s < 0) {\n return this.t * this.DB;\n }\n return -1;\n };\n // BigInteger.prototype.bitCount = bnBitCount;\n // (public) return number of set bits\n BigInteger.prototype.bitCount = function () {\n var r = 0;\n var x = this.s & this.DM;\n for (var i = 0; i < this.t; ++i) {\n r += (0,_util__WEBPACK_IMPORTED_MODULE_0__.cbit)(this[i] ^ x);\n }\n return r;\n };\n // BigInteger.prototype.testBit = bnTestBit;\n // (public) true iff nth bit is set\n BigInteger.prototype.testBit = function (n) {\n var j = Math.floor(n / this.DB);\n if (j >= this.t) {\n return (this.s != 0);\n }\n return ((this[j] & (1 << (n % this.DB))) != 0);\n };\n // BigInteger.prototype.setBit = bnSetBit;\n // (public) this | (1< 1) {\n var g2 = nbi();\n z.sqrTo(g[1], g2);\n while (n <= km) {\n g[n] = nbi();\n z.mulTo(g2, g[n - 2], g[n]);\n n += 2;\n }\n }\n var j = e.t - 1;\n var w;\n var is1 = true;\n var r2 = nbi();\n var t;\n i = nbits(e[j]) - 1;\n while (j >= 0) {\n if (i >= k1) {\n w = (e[j] >> (i - k1)) & km;\n }\n else {\n w = (e[j] & ((1 << (i + 1)) - 1)) << (k1 - i);\n if (j > 0) {\n w |= e[j - 1] >> (this.DB + i - k1);\n }\n }\n n = k;\n while ((w & 1) == 0) {\n w >>= 1;\n --n;\n }\n if ((i -= n) < 0) {\n i += this.DB;\n --j;\n }\n if (is1) { // ret == 1, don't bother squaring or multiplying it\n g[w].copyTo(r);\n is1 = false;\n }\n else {\n while (n > 1) {\n z.sqrTo(r, r2);\n z.sqrTo(r2, r);\n n -= 2;\n }\n if (n > 0) {\n z.sqrTo(r, r2);\n }\n else {\n t = r;\n r = r2;\n r2 = t;\n }\n z.mulTo(r2, g[w], r);\n }\n while (j >= 0 && (e[j] & (1 << i)) == 0) {\n z.sqrTo(r, r2);\n t = r;\n r = r2;\n r2 = t;\n if (--i < 0) {\n i = this.DB - 1;\n --j;\n }\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.modInverse = bnModInverse;\n // (public) 1/this % m (HAC 14.61)\n BigInteger.prototype.modInverse = function (m) {\n var ac = m.isEven();\n if ((this.isEven() && ac) || m.signum() == 0) {\n return BigInteger.ZERO;\n }\n var u = m.clone();\n var v = this.clone();\n var a = nbv(1);\n var b = nbv(0);\n var c = nbv(0);\n var d = nbv(1);\n while (u.signum() != 0) {\n while (u.isEven()) {\n u.rShiftTo(1, u);\n if (ac) {\n if (!a.isEven() || !b.isEven()) {\n a.addTo(this, a);\n b.subTo(m, b);\n }\n a.rShiftTo(1, a);\n }\n else if (!b.isEven()) {\n b.subTo(m, b);\n }\n b.rShiftTo(1, b);\n }\n while (v.isEven()) {\n v.rShiftTo(1, v);\n if (ac) {\n if (!c.isEven() || !d.isEven()) {\n c.addTo(this, c);\n d.subTo(m, d);\n }\n c.rShiftTo(1, c);\n }\n else if (!d.isEven()) {\n d.subTo(m, d);\n }\n d.rShiftTo(1, d);\n }\n if (u.compareTo(v) >= 0) {\n u.subTo(v, u);\n if (ac) {\n a.subTo(c, a);\n }\n b.subTo(d, b);\n }\n else {\n v.subTo(u, v);\n if (ac) {\n c.subTo(a, c);\n }\n d.subTo(b, d);\n }\n }\n if (v.compareTo(BigInteger.ONE) != 0) {\n return BigInteger.ZERO;\n }\n if (d.compareTo(m) >= 0) {\n return d.subtract(m);\n }\n if (d.signum() < 0) {\n d.addTo(m, d);\n }\n else {\n return d;\n }\n if (d.signum() < 0) {\n return d.add(m);\n }\n else {\n return d;\n }\n };\n // BigInteger.prototype.pow = bnPow;\n // (public) this^e\n BigInteger.prototype.pow = function (e) {\n return this.exp(e, new NullExp());\n };\n // BigInteger.prototype.gcd = bnGCD;\n // (public) gcd(this,a) (HAC 14.54)\n BigInteger.prototype.gcd = function (a) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n return x;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n while (x.signum() > 0) {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n }\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n return y;\n };\n // BigInteger.prototype.isProbablePrime = bnIsProbablePrime;\n // (public) test primality with certainty >= 1-.5^t\n BigInteger.prototype.isProbablePrime = function (t) {\n var i;\n var x = this.abs();\n if (x.t == 1 && x[0] <= lowprimes[lowprimes.length - 1]) {\n for (i = 0; i < lowprimes.length; ++i) {\n if (x[0] == lowprimes[i]) {\n return true;\n }\n }\n return false;\n }\n if (x.isEven()) {\n return false;\n }\n i = 1;\n while (i < lowprimes.length) {\n var m = lowprimes[i];\n var j = i + 1;\n while (j < lowprimes.length && m < lplim) {\n m *= lowprimes[j++];\n }\n m = x.modInt(m);\n while (i < j) {\n if (m % lowprimes[i++] == 0) {\n return false;\n }\n }\n }\n return x.millerRabin(t);\n };\n //#endregion PUBLIC\n //#region PROTECTED\n // BigInteger.prototype.copyTo = bnpCopyTo;\n // (protected) copy this to r\n BigInteger.prototype.copyTo = function (r) {\n for (var i = this.t - 1; i >= 0; --i) {\n r[i] = this[i];\n }\n r.t = this.t;\n r.s = this.s;\n };\n // BigInteger.prototype.fromInt = bnpFromInt;\n // (protected) set from integer value x, -DV <= x < DV\n BigInteger.prototype.fromInt = function (x) {\n this.t = 1;\n this.s = (x < 0) ? -1 : 0;\n if (x > 0) {\n this[0] = x;\n }\n else if (x < -1) {\n this[0] = x + this.DV;\n }\n else {\n this.t = 0;\n }\n };\n // BigInteger.prototype.fromString = bnpFromString;\n // (protected) set from string and radix\n BigInteger.prototype.fromString = function (s, b) {\n var k;\n if (b == 16) {\n k = 4;\n }\n else if (b == 8) {\n k = 3;\n }\n else if (b == 256) {\n k = 8;\n /* byte array */\n }\n else if (b == 2) {\n k = 1;\n }\n else if (b == 32) {\n k = 5;\n }\n else if (b == 4) {\n k = 2;\n }\n else {\n this.fromRadix(s, b);\n return;\n }\n this.t = 0;\n this.s = 0;\n var i = s.length;\n var mi = false;\n var sh = 0;\n while (--i >= 0) {\n var x = (k == 8) ? (+s[i]) & 0xff : intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\") {\n mi = true;\n }\n continue;\n }\n mi = false;\n if (sh == 0) {\n this[this.t++] = x;\n }\n else if (sh + k > this.DB) {\n this[this.t - 1] |= (x & ((1 << (this.DB - sh)) - 1)) << sh;\n this[this.t++] = (x >> (this.DB - sh));\n }\n else {\n this[this.t - 1] |= x << sh;\n }\n sh += k;\n if (sh >= this.DB) {\n sh -= this.DB;\n }\n }\n if (k == 8 && ((+s[0]) & 0x80) != 0) {\n this.s = -1;\n if (sh > 0) {\n this[this.t - 1] |= ((1 << (this.DB - sh)) - 1) << sh;\n }\n }\n this.clamp();\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.clamp = bnpClamp;\n // (protected) clamp off excess high words\n BigInteger.prototype.clamp = function () {\n var c = this.s & this.DM;\n while (this.t > 0 && this[this.t - 1] == c) {\n --this.t;\n }\n };\n // BigInteger.prototype.dlShiftTo = bnpDLShiftTo;\n // (protected) r = this << n*DB\n BigInteger.prototype.dlShiftTo = function (n, r) {\n var i;\n for (i = this.t - 1; i >= 0; --i) {\n r[i + n] = this[i];\n }\n for (i = n - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r.t = this.t + n;\n r.s = this.s;\n };\n // BigInteger.prototype.drShiftTo = bnpDRShiftTo;\n // (protected) r = this >> n*DB\n BigInteger.prototype.drShiftTo = function (n, r) {\n for (var i = n; i < this.t; ++i) {\n r[i - n] = this[i];\n }\n r.t = Math.max(this.t - n, 0);\n r.s = this.s;\n };\n // BigInteger.prototype.lShiftTo = bnpLShiftTo;\n // (protected) r = this << n\n BigInteger.prototype.lShiftTo = function (n, r) {\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << cbs) - 1;\n var ds = Math.floor(n / this.DB);\n var c = (this.s << bs) & this.DM;\n for (var i = this.t - 1; i >= 0; --i) {\n r[i + ds + 1] = (this[i] >> cbs) | c;\n c = (this[i] & bm) << bs;\n }\n for (var i = ds - 1; i >= 0; --i) {\n r[i] = 0;\n }\n r[ds] = c;\n r.t = this.t + ds + 1;\n r.s = this.s;\n r.clamp();\n };\n // BigInteger.prototype.rShiftTo = bnpRShiftTo;\n // (protected) r = this >> n\n BigInteger.prototype.rShiftTo = function (n, r) {\n r.s = this.s;\n var ds = Math.floor(n / this.DB);\n if (ds >= this.t) {\n r.t = 0;\n return;\n }\n var bs = n % this.DB;\n var cbs = this.DB - bs;\n var bm = (1 << bs) - 1;\n r[0] = this[ds] >> bs;\n for (var i = ds + 1; i < this.t; ++i) {\n r[i - ds - 1] |= (this[i] & bm) << cbs;\n r[i - ds] = this[i] >> bs;\n }\n if (bs > 0) {\n r[this.t - ds - 1] |= (this.s & bm) << cbs;\n }\n r.t = this.t - ds;\n r.clamp();\n };\n // BigInteger.prototype.subTo = bnpSubTo;\n // (protected) r = this - a\n BigInteger.prototype.subTo = function (a, r) {\n var i = 0;\n var c = 0;\n var m = Math.min(a.t, this.t);\n while (i < m) {\n c += this[i] - a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n if (a.t < this.t) {\n c -= a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c -= a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c -= a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c < -1) {\n r[i++] = this.DV + c;\n }\n else if (c > 0) {\n r[i++] = c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.multiplyTo = bnpMultiplyTo;\n // (protected) r = this * a, r != this,a (HAC 14.12)\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyTo = function (a, r) {\n var x = this.abs();\n var y = a.abs();\n var i = x.t;\n r.t = i + y.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < y.t; ++i) {\n r[i + x.t] = x.am(0, y[i], r, i, 0, x.t);\n }\n r.s = 0;\n r.clamp();\n if (this.s != a.s) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.squareTo = bnpSquareTo;\n // (protected) r = this^2, r != this (HAC 14.16)\n BigInteger.prototype.squareTo = function (r) {\n var x = this.abs();\n var i = r.t = 2 * x.t;\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = 0; i < x.t - 1; ++i) {\n var c = x.am(i, x[i], r, 2 * i, 0, 1);\n if ((r[i + x.t] += x.am(i + 1, 2 * x[i], r, 2 * i + 1, c, x.t - i - 1)) >= x.DV) {\n r[i + x.t] -= x.DV;\n r[i + x.t + 1] = 1;\n }\n }\n if (r.t > 0) {\n r[r.t - 1] += x.am(i, x[i], r, 2 * i, 0, 1);\n }\n r.s = 0;\n r.clamp();\n };\n // BigInteger.prototype.divRemTo = bnpDivRemTo;\n // (protected) divide this by m, quotient and remainder to q, r (HAC 14.20)\n // r != q, this != m. q or r may be null.\n BigInteger.prototype.divRemTo = function (m, q, r) {\n var pm = m.abs();\n if (pm.t <= 0) {\n return;\n }\n var pt = this.abs();\n if (pt.t < pm.t) {\n if (q != null) {\n q.fromInt(0);\n }\n if (r != null) {\n this.copyTo(r);\n }\n return;\n }\n if (r == null) {\n r = nbi();\n }\n var y = nbi();\n var ts = this.s;\n var ms = m.s;\n var nsh = this.DB - nbits(pm[pm.t - 1]); // normalize modulus\n if (nsh > 0) {\n pm.lShiftTo(nsh, y);\n pt.lShiftTo(nsh, r);\n }\n else {\n pm.copyTo(y);\n pt.copyTo(r);\n }\n var ys = y.t;\n var y0 = y[ys - 1];\n if (y0 == 0) {\n return;\n }\n var yt = y0 * (1 << this.F1) + ((ys > 1) ? y[ys - 2] >> this.F2 : 0);\n var d1 = this.FV / yt;\n var d2 = (1 << this.F1) / yt;\n var e = 1 << this.F2;\n var i = r.t;\n var j = i - ys;\n var t = (q == null) ? nbi() : q;\n y.dlShiftTo(j, t);\n if (r.compareTo(t) >= 0) {\n r[r.t++] = 1;\n r.subTo(t, r);\n }\n BigInteger.ONE.dlShiftTo(ys, t);\n t.subTo(y, y); // \"negative\" y so we can replace sub with am later\n while (y.t < ys) {\n y[y.t++] = 0;\n }\n while (--j >= 0) {\n // Estimate quotient digit\n var qd = (r[--i] == y0) ? this.DM : Math.floor(r[i] * d1 + (r[i - 1] + e) * d2);\n if ((r[i] += y.am(0, qd, r, j, 0, ys)) < qd) { // Try it out\n y.dlShiftTo(j, t);\n r.subTo(t, r);\n while (r[i] < --qd) {\n r.subTo(t, r);\n }\n }\n }\n if (q != null) {\n r.drShiftTo(ys, q);\n if (ts != ms) {\n BigInteger.ZERO.subTo(q, q);\n }\n }\n r.t = ys;\n r.clamp();\n if (nsh > 0) {\n r.rShiftTo(nsh, r);\n } // Denormalize remainder\n if (ts < 0) {\n BigInteger.ZERO.subTo(r, r);\n }\n };\n // BigInteger.prototype.invDigit = bnpInvDigit;\n // (protected) return \"-1/this % 2^DB\"; useful for Mont. reduction\n // justification:\n // xy == 1 (mod m)\n // xy = 1+km\n // xy(2-xy) = (1+km)(1-km)\n // x[y(2-xy)] = 1-k^2m^2\n // x[y(2-xy)] == 1 (mod m^2)\n // if y is 1/x mod m, then y(2-xy) is 1/x mod m^2\n // should reduce x and y(2-xy) by m^2 at each step to keep size bounded.\n // JS multiply \"overflows\" differently from C/C++, so care is needed here.\n BigInteger.prototype.invDigit = function () {\n if (this.t < 1) {\n return 0;\n }\n var x = this[0];\n if ((x & 1) == 0) {\n return 0;\n }\n var y = x & 3; // y == 1/x mod 2^2\n y = (y * (2 - (x & 0xf) * y)) & 0xf; // y == 1/x mod 2^4\n y = (y * (2 - (x & 0xff) * y)) & 0xff; // y == 1/x mod 2^8\n y = (y * (2 - (((x & 0xffff) * y) & 0xffff))) & 0xffff; // y == 1/x mod 2^16\n // last step - calculate inverse mod DV directly;\n // assumes 16 < DB <= 32 and assumes ability to handle 48-bit ints\n y = (y * (2 - x * y % this.DV)) % this.DV; // y == 1/x mod 2^dbits\n // we really want the negative inverse, and -DV < y < DV\n return (y > 0) ? this.DV - y : -y;\n };\n // BigInteger.prototype.isEven = bnpIsEven;\n // (protected) true iff this is even\n BigInteger.prototype.isEven = function () {\n return ((this.t > 0) ? (this[0] & 1) : this.s) == 0;\n };\n // BigInteger.prototype.exp = bnpExp;\n // (protected) this^e, e < 2^32, doing sqr and mul with \"r\" (HAC 14.79)\n BigInteger.prototype.exp = function (e, z) {\n if (e > 0xffffffff || e < 1) {\n return BigInteger.ONE;\n }\n var r = nbi();\n var r2 = nbi();\n var g = z.convert(this);\n var i = nbits(e) - 1;\n g.copyTo(r);\n while (--i >= 0) {\n z.sqrTo(r, r2);\n if ((e & (1 << i)) > 0) {\n z.mulTo(r2, g, r);\n }\n else {\n var t = r;\n r = r2;\n r2 = t;\n }\n }\n return z.revert(r);\n };\n // BigInteger.prototype.chunkSize = bnpChunkSize;\n // (protected) return x s.t. r^x < DV\n BigInteger.prototype.chunkSize = function (r) {\n return Math.floor(Math.LN2 * this.DB / Math.log(r));\n };\n // BigInteger.prototype.toRadix = bnpToRadix;\n // (protected) convert to radix string\n BigInteger.prototype.toRadix = function (b) {\n if (b == null) {\n b = 10;\n }\n if (this.signum() == 0 || b < 2 || b > 36) {\n return \"0\";\n }\n var cs = this.chunkSize(b);\n var a = Math.pow(b, cs);\n var d = nbv(a);\n var y = nbi();\n var z = nbi();\n var r = \"\";\n this.divRemTo(d, y, z);\n while (y.signum() > 0) {\n r = (a + z.intValue()).toString(b).substr(1) + r;\n y.divRemTo(d, y, z);\n }\n return z.intValue().toString(b) + r;\n };\n // BigInteger.prototype.fromRadix = bnpFromRadix;\n // (protected) convert from radix string\n BigInteger.prototype.fromRadix = function (s, b) {\n this.fromInt(0);\n if (b == null) {\n b = 10;\n }\n var cs = this.chunkSize(b);\n var d = Math.pow(b, cs);\n var mi = false;\n var j = 0;\n var w = 0;\n for (var i = 0; i < s.length; ++i) {\n var x = intAt(s, i);\n if (x < 0) {\n if (s.charAt(i) == \"-\" && this.signum() == 0) {\n mi = true;\n }\n continue;\n }\n w = b * w + x;\n if (++j >= cs) {\n this.dMultiply(d);\n this.dAddOffset(w, 0);\n j = 0;\n w = 0;\n }\n }\n if (j > 0) {\n this.dMultiply(Math.pow(b, j));\n this.dAddOffset(w, 0);\n }\n if (mi) {\n BigInteger.ZERO.subTo(this, this);\n }\n };\n // BigInteger.prototype.fromNumber = bnpFromNumber;\n // (protected) alternate constructor\n BigInteger.prototype.fromNumber = function (a, b, c) {\n if (\"number\" == typeof b) {\n // new BigInteger(int,int,RNG)\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n // force MSB set\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n } // force odd\n while (!this.isProbablePrime(b)) {\n this.dAddOffset(2, 0);\n if (this.bitLength() > a) {\n this.subTo(BigInteger.ONE.shiftLeft(a - 1), this);\n }\n }\n }\n }\n else {\n // new BigInteger(int,RNG)\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n // BigInteger.prototype.bitwiseTo = bnpBitwiseTo;\n // (protected) r = this op a (bitwise)\n BigInteger.prototype.bitwiseTo = function (a, op, r) {\n var i;\n var f;\n var m = Math.min(a.t, this.t);\n for (i = 0; i < m; ++i) {\n r[i] = op(this[i], a[i]);\n }\n if (a.t < this.t) {\n f = a.s & this.DM;\n for (i = m; i < this.t; ++i) {\n r[i] = op(this[i], f);\n }\n r.t = this.t;\n }\n else {\n f = this.s & this.DM;\n for (i = m; i < a.t; ++i) {\n r[i] = op(f, a[i]);\n }\n r.t = a.t;\n }\n r.s = op(this.s, a.s);\n r.clamp();\n };\n // BigInteger.prototype.changeBit = bnpChangeBit;\n // (protected) this op (1<>= this.DB;\n }\n if (a.t < this.t) {\n c += a.s;\n while (i < this.t) {\n c += this[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += this.s;\n }\n else {\n c += this.s;\n while (i < a.t) {\n c += a[i];\n r[i++] = c & this.DM;\n c >>= this.DB;\n }\n c += a.s;\n }\n r.s = (c < 0) ? -1 : 0;\n if (c > 0) {\n r[i++] = c;\n }\n else if (c < -1) {\n r[i++] = this.DV + c;\n }\n r.t = i;\n r.clamp();\n };\n // BigInteger.prototype.dMultiply = bnpDMultiply;\n // (protected) this *= n, this >= 0, 1 < n < DV\n BigInteger.prototype.dMultiply = function (n) {\n this[this.t] = this.am(0, n - 1, this, 0, 0, this.t);\n ++this.t;\n this.clamp();\n };\n // BigInteger.prototype.dAddOffset = bnpDAddOffset;\n // (protected) this += n << w words, this >= 0\n BigInteger.prototype.dAddOffset = function (n, w) {\n if (n == 0) {\n return;\n }\n while (this.t <= w) {\n this[this.t++] = 0;\n }\n this[w] += n;\n while (this[w] >= this.DV) {\n this[w] -= this.DV;\n if (++w >= this.t) {\n this[this.t++] = 0;\n }\n ++this[w];\n }\n };\n // BigInteger.prototype.multiplyLowerTo = bnpMultiplyLowerTo;\n // (protected) r = lower n words of \"this * a\", a.t <= n\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyLowerTo = function (a, n, r) {\n var i = Math.min(this.t + a.t, n);\n r.s = 0; // assumes a,this >= 0\n r.t = i;\n while (i > 0) {\n r[--i] = 0;\n }\n for (var j = r.t - this.t; i < j; ++i) {\n r[i + this.t] = this.am(0, a[i], r, i, 0, this.t);\n }\n for (var j = Math.min(a.t, n); i < j; ++i) {\n this.am(0, a[i], r, i, 0, n - i);\n }\n r.clamp();\n };\n // BigInteger.prototype.multiplyUpperTo = bnpMultiplyUpperTo;\n // (protected) r = \"this * a\" without lower n words, n > 0\n // \"this\" should be the larger one if appropriate.\n BigInteger.prototype.multiplyUpperTo = function (a, n, r) {\n --n;\n var i = r.t = this.t + a.t - n;\n r.s = 0; // assumes a,this >= 0\n while (--i >= 0) {\n r[i] = 0;\n }\n for (i = Math.max(n - this.t, 0); i < a.t; ++i) {\n r[this.t + i - n] = this.am(n - i, a[i], r, 0, 0, this.t + i - n);\n }\n r.clamp();\n r.drShiftTo(1, r);\n };\n // BigInteger.prototype.modInt = bnpModInt;\n // (protected) this % n, n < 2^26\n BigInteger.prototype.modInt = function (n) {\n if (n <= 0) {\n return 0;\n }\n var d = this.DV % n;\n var r = (this.s < 0) ? n - 1 : 0;\n if (this.t > 0) {\n if (d == 0) {\n r = this[0] % n;\n }\n else {\n for (var i = this.t - 1; i >= 0; --i) {\n r = (d * r + this[i]) % n;\n }\n }\n }\n return r;\n };\n // BigInteger.prototype.millerRabin = bnpMillerRabin;\n // (protected) true if probably prime (HAC 4.24, Miller-Rabin)\n BigInteger.prototype.millerRabin = function (t) {\n var n1 = this.subtract(BigInteger.ONE);\n var k = n1.getLowestSetBit();\n if (k <= 0) {\n return false;\n }\n var r = n1.shiftRight(k);\n t = (t + 1) >> 1;\n if (t > lowprimes.length) {\n t = lowprimes.length;\n }\n var a = nbi();\n for (var i = 0; i < t; ++i) {\n // Pick bases at random, instead of starting at 2\n a.fromInt(lowprimes[Math.floor(Math.random() * lowprimes.length)]);\n var y = a.modPow(r, this);\n if (y.compareTo(BigInteger.ONE) != 0 && y.compareTo(n1) != 0) {\n var j = 1;\n while (j++ < k && y.compareTo(n1) != 0) {\n y = y.modPowInt(2, this);\n if (y.compareTo(BigInteger.ONE) == 0) {\n return false;\n }\n }\n if (y.compareTo(n1) != 0) {\n return false;\n }\n }\n }\n return true;\n };\n // BigInteger.prototype.square = bnSquare;\n // (public) this^2\n BigInteger.prototype.square = function () {\n var r = nbi();\n this.squareTo(r);\n return r;\n };\n //#region ASYNC\n // Public API method\n BigInteger.prototype.gcda = function (a, callback) {\n var x = (this.s < 0) ? this.negate() : this.clone();\n var y = (a.s < 0) ? a.negate() : a.clone();\n if (x.compareTo(y) < 0) {\n var t = x;\n x = y;\n y = t;\n }\n var i = x.getLowestSetBit();\n var g = y.getLowestSetBit();\n if (g < 0) {\n callback(x);\n return;\n }\n if (i < g) {\n g = i;\n }\n if (g > 0) {\n x.rShiftTo(g, x);\n y.rShiftTo(g, y);\n }\n // Workhorse of the algorithm, gets called 200 - 800 times per 512 bit keygen.\n var gcda1 = function () {\n if ((i = x.getLowestSetBit()) > 0) {\n x.rShiftTo(i, x);\n }\n if ((i = y.getLowestSetBit()) > 0) {\n y.rShiftTo(i, y);\n }\n if (x.compareTo(y) >= 0) {\n x.subTo(y, x);\n x.rShiftTo(1, x);\n }\n else {\n y.subTo(x, y);\n y.rShiftTo(1, y);\n }\n if (!(x.signum() > 0)) {\n if (g > 0) {\n y.lShiftTo(g, y);\n }\n setTimeout(function () { callback(y); }, 0); // escape\n }\n else {\n setTimeout(gcda1, 0);\n }\n };\n setTimeout(gcda1, 10);\n };\n // (protected) alternate constructor\n BigInteger.prototype.fromNumberAsync = function (a, b, c, callback) {\n if (\"number\" == typeof b) {\n if (a < 2) {\n this.fromInt(1);\n }\n else {\n this.fromNumber(a, c);\n if (!this.testBit(a - 1)) {\n this.bitwiseTo(BigInteger.ONE.shiftLeft(a - 1), _util__WEBPACK_IMPORTED_MODULE_0__.op_or, this);\n }\n if (this.isEven()) {\n this.dAddOffset(1, 0);\n }\n var bnp_1 = this;\n var bnpfn1_1 = function () {\n bnp_1.dAddOffset(2, 0);\n if (bnp_1.bitLength() > a) {\n bnp_1.subTo(BigInteger.ONE.shiftLeft(a - 1), bnp_1);\n }\n if (bnp_1.isProbablePrime(b)) {\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(bnpfn1_1, 0);\n }\n };\n setTimeout(bnpfn1_1, 0);\n }\n }\n else {\n var x = [];\n var t = a & 7;\n x.length = (a >> 3) + 1;\n b.nextBytes(x);\n if (t > 0) {\n x[0] &= ((1 << t) - 1);\n }\n else {\n x[0] = 0;\n }\n this.fromString(x, 256);\n }\n };\n return BigInteger;\n}());\n\n//#region REDUCERS\n//#region NullExp\nvar NullExp = /** @class */ (function () {\n function NullExp() {\n }\n // NullExp.prototype.convert = nNop;\n NullExp.prototype.convert = function (x) {\n return x;\n };\n // NullExp.prototype.revert = nNop;\n NullExp.prototype.revert = function (x) {\n return x;\n };\n // NullExp.prototype.mulTo = nMulTo;\n NullExp.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n };\n // NullExp.prototype.sqrTo = nSqrTo;\n NullExp.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n };\n return NullExp;\n}());\n// Modular reduction using \"classic\" algorithm\nvar Classic = /** @class */ (function () {\n function Classic(m) {\n this.m = m;\n }\n // Classic.prototype.convert = cConvert;\n Classic.prototype.convert = function (x) {\n if (x.s < 0 || x.compareTo(this.m) >= 0) {\n return x.mod(this.m);\n }\n else {\n return x;\n }\n };\n // Classic.prototype.revert = cRevert;\n Classic.prototype.revert = function (x) {\n return x;\n };\n // Classic.prototype.reduce = cReduce;\n Classic.prototype.reduce = function (x) {\n x.divRemTo(this.m, null, x);\n };\n // Classic.prototype.mulTo = cMulTo;\n Classic.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Classic.prototype.sqrTo = cSqrTo;\n Classic.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Classic;\n}());\n//#endregion\n//#region Montgomery\n// Montgomery reduction\nvar Montgomery = /** @class */ (function () {\n function Montgomery(m) {\n this.m = m;\n this.mp = m.invDigit();\n this.mpl = this.mp & 0x7fff;\n this.mph = this.mp >> 15;\n this.um = (1 << (m.DB - 15)) - 1;\n this.mt2 = 2 * m.t;\n }\n // Montgomery.prototype.convert = montConvert;\n // xR mod m\n Montgomery.prototype.convert = function (x) {\n var r = nbi();\n x.abs().dlShiftTo(this.m.t, r);\n r.divRemTo(this.m, null, r);\n if (x.s < 0 && r.compareTo(BigInteger.ZERO) > 0) {\n this.m.subTo(r, r);\n }\n return r;\n };\n // Montgomery.prototype.revert = montRevert;\n // x/R mod m\n Montgomery.prototype.revert = function (x) {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n };\n // Montgomery.prototype.reduce = montReduce;\n // x = x/R mod m (HAC 14.32)\n Montgomery.prototype.reduce = function (x) {\n while (x.t <= this.mt2) {\n // pad x so am has enough room later\n x[x.t++] = 0;\n }\n for (var i = 0; i < this.m.t; ++i) {\n // faster way of calculating u0 = x[i]*mp mod DV\n var j = x[i] & 0x7fff;\n var u0 = (j * this.mpl + (((j * this.mph + (x[i] >> 15) * this.mpl) & this.um) << 15)) & x.DM;\n // use am to combine the multiply-shift-add into one call\n j = i + this.m.t;\n x[j] += this.m.am(0, u0, x, i, 0, this.m.t);\n // propagate carry\n while (x[j] >= x.DV) {\n x[j] -= x.DV;\n x[++j]++;\n }\n }\n x.clamp();\n x.drShiftTo(this.m.t, x);\n if (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Montgomery.prototype.mulTo = montMulTo;\n // r = \"xy/R mod m\"; x,y != r\n Montgomery.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Montgomery.prototype.sqrTo = montSqrTo;\n // r = \"x^2/R mod m\"; x != r\n Montgomery.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Montgomery;\n}());\n//#endregion Montgomery\n//#region Barrett\n// Barrett modular reduction\nvar Barrett = /** @class */ (function () {\n function Barrett(m) {\n this.m = m;\n // setup Barrett\n this.r2 = nbi();\n this.q3 = nbi();\n BigInteger.ONE.dlShiftTo(2 * m.t, this.r2);\n this.mu = this.r2.divide(m);\n }\n // Barrett.prototype.convert = barrettConvert;\n Barrett.prototype.convert = function (x) {\n if (x.s < 0 || x.t > 2 * this.m.t) {\n return x.mod(this.m);\n }\n else if (x.compareTo(this.m) < 0) {\n return x;\n }\n else {\n var r = nbi();\n x.copyTo(r);\n this.reduce(r);\n return r;\n }\n };\n // Barrett.prototype.revert = barrettRevert;\n Barrett.prototype.revert = function (x) {\n return x;\n };\n // Barrett.prototype.reduce = barrettReduce;\n // x = x mod m (HAC 14.42)\n Barrett.prototype.reduce = function (x) {\n x.drShiftTo(this.m.t - 1, this.r2);\n if (x.t > this.m.t + 1) {\n x.t = this.m.t + 1;\n x.clamp();\n }\n this.mu.multiplyUpperTo(this.r2, this.m.t + 1, this.q3);\n this.m.multiplyLowerTo(this.q3, this.m.t + 1, this.r2);\n while (x.compareTo(this.r2) < 0) {\n x.dAddOffset(1, this.m.t + 1);\n }\n x.subTo(this.r2, x);\n while (x.compareTo(this.m) >= 0) {\n x.subTo(this.m, x);\n }\n };\n // Barrett.prototype.mulTo = barrettMulTo;\n // r = x*y mod m; x,y != r\n Barrett.prototype.mulTo = function (x, y, r) {\n x.multiplyTo(y, r);\n this.reduce(r);\n };\n // Barrett.prototype.sqrTo = barrettSqrTo;\n // r = x^2 mod m; x != r\n Barrett.prototype.sqrTo = function (x, r) {\n x.squareTo(r);\n this.reduce(r);\n };\n return Barrett;\n}());\n//#endregion\n//#endregion REDUCERS\n// return new, unset BigInteger\nfunction nbi() { return new BigInteger(null); }\nfunction parseBigInt(str, r) {\n return new BigInteger(str, r);\n}\n// am: Compute w_j += (x*this_i), propagate carries,\n// c is initial carry, returns final carry.\n// c < 3*dvalue, x < 2*dvalue, this_i < dvalue\n// We need to select the fastest one that works in this environment.\nvar inBrowser = typeof navigator !== \"undefined\";\nif (inBrowser && j_lm && (navigator.appName == \"Microsoft Internet Explorer\")) {\n // am2 avoids a big mult-and-extract completely.\n // Max digit bits should be <= 30 because we do bitwise ops\n // on values up to 2*hdvalue^2-hdvalue-1 (< 2^31)\n BigInteger.prototype.am = function am2(i, x, w, j, c, n) {\n var xl = x & 0x7fff;\n var xh = x >> 15;\n while (--n >= 0) {\n var l = this[i] & 0x7fff;\n var h = this[i++] >> 15;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x7fff) << 15) + w[j] + (c & 0x3fffffff);\n c = (l >>> 30) + (m >>> 15) + xh * h + (c >>> 30);\n w[j++] = l & 0x3fffffff;\n }\n return c;\n };\n dbits = 30;\n}\nelse if (inBrowser && j_lm && (navigator.appName != \"Netscape\")) {\n // am1: use a single mult and divide to get the high bits,\n // max digit bits should be 26 because\n // max internal value = 2*dvalue^2-2*dvalue (< 2^53)\n BigInteger.prototype.am = function am1(i, x, w, j, c, n) {\n while (--n >= 0) {\n var v = x * this[i++] + w[j] + c;\n c = Math.floor(v / 0x4000000);\n w[j++] = v & 0x3ffffff;\n }\n return c;\n };\n dbits = 26;\n}\nelse { // Mozilla/Netscape seems to prefer am3\n // Alternately, set max digit bits to 28 since some\n // browsers slow down when dealing with 32-bit numbers.\n BigInteger.prototype.am = function am3(i, x, w, j, c, n) {\n var xl = x & 0x3fff;\n var xh = x >> 14;\n while (--n >= 0) {\n var l = this[i] & 0x3fff;\n var h = this[i++] >> 14;\n var m = xh * l + h * xl;\n l = xl * l + ((m & 0x3fff) << 14) + w[j] + c;\n c = (l >> 28) + (m >> 14) + xh * h;\n w[j++] = l & 0xfffffff;\n }\n return c;\n };\n dbits = 28;\n}\nBigInteger.prototype.DB = dbits;\nBigInteger.prototype.DM = ((1 << dbits) - 1);\nBigInteger.prototype.DV = (1 << dbits);\nvar BI_FP = 52;\nBigInteger.prototype.FV = Math.pow(2, BI_FP);\nBigInteger.prototype.F1 = BI_FP - dbits;\nBigInteger.prototype.F2 = 2 * dbits - BI_FP;\n// Digit conversions\nvar BI_RC = [];\nvar rr;\nvar vv;\nrr = \"0\".charCodeAt(0);\nfor (vv = 0; vv <= 9; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"a\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nrr = \"A\".charCodeAt(0);\nfor (vv = 10; vv < 36; ++vv) {\n BI_RC[rr++] = vv;\n}\nfunction intAt(s, i) {\n var c = BI_RC[s.charCodeAt(i)];\n return (c == null) ? -1 : c;\n}\n// return bigint initialized to value\nfunction nbv(i) {\n var r = nbi();\n r.fromInt(i);\n return r;\n}\n// returns bit length of the integer x\nfunction nbits(x) {\n var r = 1;\n var t;\n if ((t = x >>> 16) != 0) {\n x = t;\n r += 16;\n }\n if ((t = x >> 8) != 0) {\n x = t;\n r += 8;\n }\n if ((t = x >> 4) != 0) {\n x = t;\n r += 4;\n }\n if ((t = x >> 2) != 0) {\n x = t;\n r += 2;\n }\n if ((t = x >> 1) != 0) {\n x = t;\n r += 1;\n }\n return r;\n}\n// \"constants\"\nBigInteger.ZERO = nbv(0);\nBigInteger.ONE = nbv(1);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/jsbn.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/prng4.js": +/*!*******************************!*\ + !*** ./lib/lib/jsbn/prng4.js ***! + \*******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"Arcfour\": () => (/* binding */ Arcfour),\n/* harmony export */ \"prng_newstate\": () => (/* binding */ prng_newstate),\n/* harmony export */ \"rng_psize\": () => (/* binding */ rng_psize)\n/* harmony export */ });\n// prng4.js - uses Arcfour as a PRNG\nvar Arcfour = /** @class */ (function () {\n function Arcfour() {\n this.i = 0;\n this.j = 0;\n this.S = [];\n }\n // Arcfour.prototype.init = ARC4init;\n // Initialize arcfour context from key, an array of ints, each from [0..255]\n Arcfour.prototype.init = function (key) {\n var i;\n var j;\n var t;\n for (i = 0; i < 256; ++i) {\n this.S[i] = i;\n }\n j = 0;\n for (i = 0; i < 256; ++i) {\n j = (j + this.S[i] + key[i % key.length]) & 255;\n t = this.S[i];\n this.S[i] = this.S[j];\n this.S[j] = t;\n }\n this.i = 0;\n this.j = 0;\n };\n // Arcfour.prototype.next = ARC4next;\n Arcfour.prototype.next = function () {\n var t;\n this.i = (this.i + 1) & 255;\n this.j = (this.j + this.S[this.i]) & 255;\n t = this.S[this.i];\n this.S[this.i] = this.S[this.j];\n this.S[this.j] = t;\n return this.S[(t + this.S[this.i]) & 255];\n };\n return Arcfour;\n}());\n\n// Plug in your RNG constructor here\nfunction prng_newstate() {\n return new Arcfour();\n}\n// Pool size must be a multiple of 4 and greater than 32.\n// An array of bytes the size of the pool will be passed to init()\nvar rng_psize = 256;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/prng4.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/rng.js": +/*!*****************************!*\ + !*** ./lib/lib/jsbn/rng.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"SecureRandom\": () => (/* binding */ SecureRandom)\n/* harmony export */ });\n/* harmony import */ var _prng4__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./prng4 */ \"./lib/lib/jsbn/prng4.js\");\n// Random number generator - requires a PRNG backend, e.g. prng4.js\n\nvar rng_state;\nvar rng_pool = null;\nvar rng_pptr;\n// Initialize the pool with junk if needed.\nif (rng_pool == null) {\n rng_pool = [];\n rng_pptr = 0;\n var t = void 0;\n if (window.crypto && window.crypto.getRandomValues) {\n // Extract entropy (2048 bits) from RNG if available\n var z = new Uint32Array(256);\n window.crypto.getRandomValues(z);\n for (t = 0; t < z.length; ++t) {\n rng_pool[rng_pptr++] = z[t] & 255;\n }\n }\n // Use mouse events for entropy, if we do not have enough entropy by the time\n // we need it, entropy will be generated by Math.random.\n var count = 0;\n var onMouseMoveListener_1 = function (ev) {\n count = count || 0;\n if (count >= 256 || rng_pptr >= _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n if (window.removeEventListener) {\n window.removeEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.detachEvent) {\n window.detachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n return;\n }\n try {\n var mouseCoordinates = ev.x + ev.y;\n rng_pool[rng_pptr++] = mouseCoordinates & 255;\n count += 1;\n }\n catch (e) {\n // Sometimes Firefox will deny permission to access event properties for some reason. Ignore.\n }\n };\n if (window.addEventListener) {\n window.addEventListener(\"mousemove\", onMouseMoveListener_1, false);\n }\n else if (window.attachEvent) {\n window.attachEvent(\"onmousemove\", onMouseMoveListener_1);\n }\n}\nfunction rng_get_byte() {\n if (rng_state == null) {\n rng_state = (0,_prng4__WEBPACK_IMPORTED_MODULE_0__.prng_newstate)();\n // At this point, we may not have collected enough entropy. If not, fall back to Math.random\n while (rng_pptr < _prng4__WEBPACK_IMPORTED_MODULE_0__.rng_psize) {\n var random = Math.floor(65536 * Math.random());\n rng_pool[rng_pptr++] = random & 255;\n }\n rng_state.init(rng_pool);\n for (rng_pptr = 0; rng_pptr < rng_pool.length; ++rng_pptr) {\n rng_pool[rng_pptr] = 0;\n }\n rng_pptr = 0;\n }\n // TODO: allow reseeding after first request\n return rng_state.next();\n}\nvar SecureRandom = /** @class */ (function () {\n function SecureRandom() {\n }\n SecureRandom.prototype.nextBytes = function (ba) {\n for (var i = 0; i < ba.length; ++i) {\n ba[i] = rng_get_byte();\n }\n };\n return SecureRandom;\n}());\n\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rng.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/rsa.js": +/*!*****************************!*\ + !*** ./lib/lib/jsbn/rsa.js ***! + \*****************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"RSAKey\": () => (/* binding */ RSAKey)\n/* harmony export */ });\n/* harmony import */ var _jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ./jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _rng__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./rng */ \"./lib/lib/jsbn/rng.js\");\n// Depends on jsbn.js and rng.js\n// Version 1.1: support utf-8 encoding in pkcs1pad2\n// convert a (hex) string to a bignum object\n\n\n// function linebrk(s,n) {\n// var ret = \"\";\n// var i = 0;\n// while(i + n < s.length) {\n// ret += s.substring(i,i+n) + \"\\n\";\n// i += n;\n// }\n// return ret + s.substring(i,s.length);\n// }\n// function byte2Hex(b) {\n// if(b < 0x10)\n// return \"0\" + b.toString(16);\n// else\n// return b.toString(16);\n// }\nfunction pkcs1pad1(s, n) {\n if (n < s.length + 22) {\n console.error(\"Message too long for RSA\");\n return null;\n }\n var len = n - s.length - 6;\n var filler = \"\";\n for (var f = 0; f < len; f += 2) {\n filler += \"ff\";\n }\n var m = \"0001\" + filler + \"00\" + s;\n return (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(m, 16);\n}\n// PKCS#1 (type 2, random) pad input string s to n bytes, and return a bigint\nfunction pkcs1pad2(s, n) {\n if (n < s.length + 11) { // TODO: fix for utf-8\n console.error(\"Message too long for RSA\");\n return null;\n }\n var ba = [];\n var i = s.length - 1;\n while (i >= 0 && n > 0) {\n var c = s.charCodeAt(i--);\n if (c < 128) { // encode using utf-8\n ba[--n] = c;\n }\n else if ((c > 127) && (c < 2048)) {\n ba[--n] = (c & 63) | 128;\n ba[--n] = (c >> 6) | 192;\n }\n else {\n ba[--n] = (c & 63) | 128;\n ba[--n] = ((c >> 6) & 63) | 128;\n ba[--n] = (c >> 12) | 224;\n }\n }\n ba[--n] = 0;\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var x = [];\n while (n > 2) { // random non-zero pad\n x[0] = 0;\n while (x[0] == 0) {\n rng.nextBytes(x);\n }\n ba[--n] = x[0];\n }\n ba[--n] = 2;\n ba[--n] = 0;\n return new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(ba);\n}\n// \"empty\" RSA key constructor\nvar RSAKey = /** @class */ (function () {\n function RSAKey() {\n this.n = null;\n this.e = 0;\n this.d = null;\n this.p = null;\n this.q = null;\n this.dmp1 = null;\n this.dmq1 = null;\n this.coeff = null;\n }\n //#region PROTECTED\n // protected\n // RSAKey.prototype.doPublic = RSADoPublic;\n // Perform raw public operation on \"x\": return x^e (mod n)\n RSAKey.prototype.doPublic = function (x) {\n return x.modPowInt(this.e, this.n);\n };\n // RSAKey.prototype.doPrivate = RSADoPrivate;\n // Perform raw private operation on \"x\": return x^d (mod n)\n RSAKey.prototype.doPrivate = function (x) {\n if (this.p == null || this.q == null) {\n return x.modPow(this.d, this.n);\n }\n // TODO: re-calculate any missing CRT params\n var xp = x.mod(this.p).modPow(this.dmp1, this.p);\n var xq = x.mod(this.q).modPow(this.dmq1, this.q);\n while (xp.compareTo(xq) < 0) {\n xp = xp.add(this.p);\n }\n return xp.subtract(xq).multiply(this.coeff).mod(this.p).multiply(this.q).add(xq);\n };\n //#endregion PROTECTED\n //#region PUBLIC\n // RSAKey.prototype.setPublic = RSASetPublic;\n // Set the public key fields N and e from hex strings\n RSAKey.prototype.setPublic = function (N, E) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n }\n else {\n console.error(\"Invalid RSA public key\");\n }\n };\n // RSAKey.prototype.encrypt = RSAEncrypt;\n // Return the PKCS#1 RSA encryption of \"text\" as an even-length hex string\n RSAKey.prototype.encrypt = function (text) {\n var maxLength = (this.n.bitLength() + 7) >> 3;\n var m = pkcs1pad2(text, maxLength);\n if (m == null) {\n return null;\n }\n var c = this.doPublic(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n var length = h.length;\n // fix zero before result\n for (var i = 0; i < maxLength * 2 - length; i++) {\n h = \"0\" + h;\n }\n return h;\n };\n // RSAKey.prototype.setPrivate = RSASetPrivate;\n // Set the private key fields N, e, and d from hex strings\n RSAKey.prototype.setPrivate = function (N, E, D) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.setPrivateEx = RSASetPrivateEx;\n // Set the private key fields N, e, d and CRT params from hex strings\n RSAKey.prototype.setPrivateEx = function (N, E, D, P, Q, DP, DQ, C) {\n if (N != null && E != null && N.length > 0 && E.length > 0) {\n this.n = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(N, 16);\n this.e = parseInt(E, 16);\n this.d = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(D, 16);\n this.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(P, 16);\n this.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(Q, 16);\n this.dmp1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DP, 16);\n this.dmq1 = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(DQ, 16);\n this.coeff = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(C, 16);\n }\n else {\n console.error(\"Invalid RSA private key\");\n }\n };\n // RSAKey.prototype.generate = RSAGenerate;\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generate = function (B, E) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n for (;;) {\n for (;;) {\n this.p = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(B - qs, 1, rng);\n if (this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.p.isProbablePrime(10)) {\n break;\n }\n }\n for (;;) {\n this.q = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(qs, 1, rng);\n if (this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && this.q.isProbablePrime(10)) {\n break;\n }\n }\n if (this.p.compareTo(this.q) <= 0) {\n var t = this.p;\n this.p = this.q;\n this.q = t;\n }\n var p1 = this.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = this.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n this.n = this.p.multiply(this.q);\n this.d = ee.modInverse(phi);\n this.dmp1 = this.d.mod(p1);\n this.dmq1 = this.d.mod(q1);\n this.coeff = this.q.modInverse(this.p);\n break;\n }\n }\n };\n // RSAKey.prototype.decrypt = RSADecrypt;\n // Return the PKCS#1 RSA decryption of \"ctext\".\n // \"ctext\" is an even-length hex string and the output is a plain string.\n RSAKey.prototype.decrypt = function (ctext) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(ctext, 16);\n var m = this.doPrivate(c);\n if (m == null) {\n return null;\n }\n return pkcs1unpad2(m, (this.n.bitLength() + 7) >> 3);\n };\n // Generate a new random private key B bits long, using public expt E\n RSAKey.prototype.generateAsync = function (B, E, callback) {\n var rng = new _rng__WEBPACK_IMPORTED_MODULE_1__.SecureRandom();\n var qs = B >> 1;\n this.e = parseInt(E, 16);\n var ee = new _jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(E, 16);\n var rsa = this;\n // These functions have non-descript names because they were originally for(;;) loops.\n // I don't know about cryptography to give them better names than loop1-4.\n var loop1 = function () {\n var loop4 = function () {\n if (rsa.p.compareTo(rsa.q) <= 0) {\n var t = rsa.p;\n rsa.p = rsa.q;\n rsa.q = t;\n }\n var p1 = rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var q1 = rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n var phi = p1.multiply(q1);\n if (phi.gcd(ee).compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0) {\n rsa.n = rsa.p.multiply(rsa.q);\n rsa.d = ee.modInverse(phi);\n rsa.dmp1 = rsa.d.mod(p1);\n rsa.dmq1 = rsa.d.mod(q1);\n rsa.coeff = rsa.q.modInverse(rsa.p);\n setTimeout(function () { callback(); }, 0); // escape\n }\n else {\n setTimeout(loop1, 0);\n }\n };\n var loop3 = function () {\n rsa.q = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.q.fromNumberAsync(qs, 1, rng, function () {\n rsa.q.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.q.isProbablePrime(10)) {\n setTimeout(loop4, 0);\n }\n else {\n setTimeout(loop3, 0);\n }\n });\n });\n };\n var loop2 = function () {\n rsa.p = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.nbi)();\n rsa.p.fromNumberAsync(B - qs, 1, rng, function () {\n rsa.p.subtract(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE).gcda(ee, function (r) {\n if (r.compareTo(_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE) == 0 && rsa.p.isProbablePrime(10)) {\n setTimeout(loop3, 0);\n }\n else {\n setTimeout(loop2, 0);\n }\n });\n });\n };\n setTimeout(loop2, 0);\n };\n setTimeout(loop1, 0);\n };\n RSAKey.prototype.sign = function (text, digestMethod, digestName) {\n var header = getDigestHeader(digestName);\n var digest = header + digestMethod(text).toString();\n var m = pkcs1pad1(digest, this.n.bitLength() / 4);\n if (m == null) {\n return null;\n }\n var c = this.doPrivate(m);\n if (c == null) {\n return null;\n }\n var h = c.toString(16);\n if ((h.length & 1) == 0) {\n return h;\n }\n else {\n return \"0\" + h;\n }\n };\n RSAKey.prototype.verify = function (text, signature, digestMethod) {\n var c = (0,_jsbn__WEBPACK_IMPORTED_MODULE_0__.parseBigInt)(signature, 16);\n var m = this.doPublic(c);\n if (m == null) {\n return null;\n }\n var unpadded = m.toString(16).replace(/^1f+00/, \"\");\n var digest = removeDigestHeader(unpadded);\n return digest == digestMethod(text).toString();\n };\n return RSAKey;\n}());\n\n// Undo PKCS#1 (type 2, random) padding and, if valid, return the plaintext\nfunction pkcs1unpad2(d, n) {\n var b = d.toByteArray();\n var i = 0;\n while (i < b.length && b[i] == 0) {\n ++i;\n }\n if (b.length - i != n - 1 || b[i] != 2) {\n return null;\n }\n ++i;\n while (b[i] != 0) {\n if (++i >= b.length) {\n return null;\n }\n }\n var ret = \"\";\n while (++i < b.length) {\n var c = b[i] & 255;\n if (c < 128) { // utf-8 decode\n ret += String.fromCharCode(c);\n }\n else if ((c > 191) && (c < 224)) {\n ret += String.fromCharCode(((c & 31) << 6) | (b[i + 1] & 63));\n ++i;\n }\n else {\n ret += String.fromCharCode(((c & 15) << 12) | ((b[i + 1] & 63) << 6) | (b[i + 2] & 63));\n i += 2;\n }\n }\n return ret;\n}\n// https://tools.ietf.org/html/rfc3447#page-43\nvar DIGEST_HEADERS = {\n md2: \"3020300c06082a864886f70d020205000410\",\n md5: \"3020300c06082a864886f70d020505000410\",\n sha1: \"3021300906052b0e03021a05000414\",\n sha224: \"302d300d06096086480165030402040500041c\",\n sha256: \"3031300d060960864801650304020105000420\",\n sha384: \"3041300d060960864801650304020205000430\",\n sha512: \"3051300d060960864801650304020305000440\",\n ripemd160: \"3021300906052b2403020105000414\"\n};\nfunction getDigestHeader(name) {\n return DIGEST_HEADERS[name] || \"\";\n}\nfunction removeDigestHeader(str) {\n for (var name_1 in DIGEST_HEADERS) {\n if (DIGEST_HEADERS.hasOwnProperty(name_1)) {\n var header = DIGEST_HEADERS[name_1];\n var len = header.length;\n if (str.substr(0, len) == header) {\n return str.substr(len);\n }\n }\n }\n return str;\n}\n// Return the PKCS#1 RSA encryption of \"text\" as a Base64-encoded string\n// function RSAEncryptB64(text) {\n// var h = this.encrypt(text);\n// if(h) return hex2b64(h); else return null;\n// }\n// public\n// RSAKey.prototype.encrypt_b64 = RSAEncryptB64;\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/rsa.js?"); + +/***/ }), + +/***/ "./lib/lib/jsbn/util.js": +/*!******************************!*\ + !*** ./lib/lib/jsbn/util.js ***! + \******************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"int2char\": () => (/* binding */ int2char),\n/* harmony export */ \"op_and\": () => (/* binding */ op_and),\n/* harmony export */ \"op_or\": () => (/* binding */ op_or),\n/* harmony export */ \"op_xor\": () => (/* binding */ op_xor),\n/* harmony export */ \"op_andnot\": () => (/* binding */ op_andnot),\n/* harmony export */ \"lbit\": () => (/* binding */ lbit),\n/* harmony export */ \"cbit\": () => (/* binding */ cbit)\n/* harmony export */ });\nvar BI_RM = \"0123456789abcdefghijklmnopqrstuvwxyz\";\nfunction int2char(n) {\n return BI_RM.charAt(n);\n}\n//#region BIT_OPERATIONS\n// (public) this & a\nfunction op_and(x, y) {\n return x & y;\n}\n// (public) this | a\nfunction op_or(x, y) {\n return x | y;\n}\n// (public) this ^ a\nfunction op_xor(x, y) {\n return x ^ y;\n}\n// (public) this & ~a\nfunction op_andnot(x, y) {\n return x & ~y;\n}\n// return index of lowest 1-bit in x, x < 2^31\nfunction lbit(x) {\n if (x == 0) {\n return -1;\n }\n var r = 0;\n if ((x & 0xffff) == 0) {\n x >>= 16;\n r += 16;\n }\n if ((x & 0xff) == 0) {\n x >>= 8;\n r += 8;\n }\n if ((x & 0xf) == 0) {\n x >>= 4;\n r += 4;\n }\n if ((x & 3) == 0) {\n x >>= 2;\n r += 2;\n }\n if ((x & 1) == 0) {\n ++r;\n }\n return r;\n}\n// return number of 1 bits in x\nfunction cbit(x) {\n var r = 0;\n while (x != 0) {\n x &= x - 1;\n ++r;\n }\n return r;\n}\n//#endregion BIT_OPERATIONS\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsbn/util.js?"); + +/***/ }), + +/***/ "./lib/lib/jsrsasign/asn1-1.0.js": +/*!***************************************!*\ + !*** ./lib/lib/jsrsasign/asn1-1.0.js ***! + \***************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"KJUR\": () => (/* binding */ KJUR)\n/* harmony export */ });\n/* harmony import */ var _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__ = __webpack_require__(/*! ../jsbn/jsbn */ \"./lib/lib/jsbn/jsbn.js\");\n/* harmony import */ var _yahoo__WEBPACK_IMPORTED_MODULE_1__ = __webpack_require__(/*! ./yahoo */ \"./lib/lib/jsrsasign/yahoo.js\");\n/* asn1-1.0.13.js (c) 2013-2017 Kenji Urushima | kjur.github.com/jsrsasign/license\n */\n/*\n * asn1.js - ASN.1 DER encoder classes\n *\n * Copyright (c) 2013-2017 Kenji Urushima (kenji.urushima@gmail.com)\n *\n * This software is licensed under the terms of the MIT License.\n * https://kjur.github.io/jsrsasign/license\n *\n * The above copyright and license notice shall be\n * included in all copies or substantial portions of the Software.\n */\n\n\n/**\n * @fileOverview\n * @name asn1-1.0.js\n * @author Kenji Urushima kenji.urushima@gmail.com\n * @version asn1 1.0.13 (2017-Jun-02)\n * @since jsrsasign 2.1\n * @license MIT License\n */\n/**\n * kjur's class library name space\n *

\n * This name space provides following name spaces:\n *

    \n *
  • {@link KJUR.asn1} - ASN.1 primitive hexadecimal encoder
  • \n *
  • {@link KJUR.asn1.x509} - ASN.1 structure for X.509 certificate and CRL
  • \n *
  • {@link KJUR.crypto} - Java Cryptographic Extension(JCE) style MessageDigest/Signature\n * class and utilities
  • \n *
\n *

\n * NOTE: Please ignore method summary and document of this namespace. This caused by a bug of jsdoc2.\n * @name KJUR\n * @namespace kjur's class library name space\n */\nvar KJUR = {};\n/**\n * kjur's ASN.1 class library name space\n *

\n * This is ITU-T X.690 ASN.1 DER encoder class library and\n * class structure and methods is very similar to\n * org.bouncycastle.asn1 package of\n * well known BouncyCaslte Cryptography Library.\n *

PROVIDING ASN.1 PRIMITIVES

\n * Here are ASN.1 DER primitive classes.\n *
    \n *
  • 0x01 {@link KJUR.asn1.DERBoolean}
  • \n *
  • 0x02 {@link KJUR.asn1.DERInteger}
  • \n *
  • 0x03 {@link KJUR.asn1.DERBitString}
  • \n *
  • 0x04 {@link KJUR.asn1.DEROctetString}
  • \n *
  • 0x05 {@link KJUR.asn1.DERNull}
  • \n *
  • 0x06 {@link KJUR.asn1.DERObjectIdentifier}
  • \n *
  • 0x0a {@link KJUR.asn1.DEREnumerated}
  • \n *
  • 0x0c {@link KJUR.asn1.DERUTF8String}
  • \n *
  • 0x12 {@link KJUR.asn1.DERNumericString}
  • \n *
  • 0x13 {@link KJUR.asn1.DERPrintableString}
  • \n *
  • 0x14 {@link KJUR.asn1.DERTeletexString}
  • \n *
  • 0x16 {@link KJUR.asn1.DERIA5String}
  • \n *
  • 0x17 {@link KJUR.asn1.DERUTCTime}
  • \n *
  • 0x18 {@link KJUR.asn1.DERGeneralizedTime}
  • \n *
  • 0x30 {@link KJUR.asn1.DERSequence}
  • \n *
  • 0x31 {@link KJUR.asn1.DERSet}
  • \n *
\n *

OTHER ASN.1 CLASSES

\n *
    \n *
  • {@link KJUR.asn1.ASN1Object}
  • \n *
  • {@link KJUR.asn1.DERAbstractString}
  • \n *
  • {@link KJUR.asn1.DERAbstractTime}
  • \n *
  • {@link KJUR.asn1.DERAbstractStructured}
  • \n *
  • {@link KJUR.asn1.DERTaggedObject}
  • \n *
\n *

SUB NAME SPACES

\n *
    \n *
  • {@link KJUR.asn1.cades} - CAdES long term signature format
  • \n *
  • {@link KJUR.asn1.cms} - Cryptographic Message Syntax
  • \n *
  • {@link KJUR.asn1.csr} - Certificate Signing Request (CSR/PKCS#10)
  • \n *
  • {@link KJUR.asn1.tsp} - RFC 3161 Timestamping Protocol Format
  • \n *
  • {@link KJUR.asn1.x509} - RFC 5280 X.509 certificate and CRL
  • \n *
\n *

\n * NOTE: Please ignore method summary and document of this namespace.\n * This caused by a bug of jsdoc2.\n * @name KJUR.asn1\n * @namespace\n */\nif (typeof KJUR.asn1 == \"undefined\" || !KJUR.asn1)\n KJUR.asn1 = {};\n/**\n * ASN1 utilities class\n * @name KJUR.asn1.ASN1Util\n * @class ASN1 utilities class\n * @since asn1 1.0.2\n */\nKJUR.asn1.ASN1Util = new function () {\n this.integerToByteHex = function (i) {\n var h = i.toString(16);\n if ((h.length % 2) == 1)\n h = '0' + h;\n return h;\n };\n this.bigIntToMinTwosComplementsHex = function (bigIntegerValue) {\n var h = bigIntegerValue.toString(16);\n if (h.substr(0, 1) != '-') {\n if (h.length % 2 == 1) {\n h = '0' + h;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n h = '00' + h;\n }\n }\n }\n else {\n var hPos = h.substr(1);\n var xorLen = hPos.length;\n if (xorLen % 2 == 1) {\n xorLen += 1;\n }\n else {\n if (!h.match(/^[0-7]/)) {\n xorLen += 2;\n }\n }\n var hMask = '';\n for (var i = 0; i < xorLen; i++) {\n hMask += 'f';\n }\n var biMask = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(hMask, 16);\n var biNeg = biMask.xor(bigIntegerValue).add(_jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger.ONE);\n h = biNeg.toString(16).replace(/^-/, '');\n }\n return h;\n };\n /**\n * get PEM string from hexadecimal data and header string\n * @name getPEMStringFromHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} dataHex hexadecimal string of PEM body\n * @param {String} pemHeader PEM header string (ex. 'RSA PRIVATE KEY')\n * @return {String} PEM formatted string of input data\n * @description\n * This method converts a hexadecimal string to a PEM string with\n * a specified header. Its line break will be CRLF(\"\\r\\n\").\n * @example\n * var pem = KJUR.asn1.ASN1Util.getPEMStringFromHex('616161', 'RSA PRIVATE KEY');\n * // value of pem will be:\n * -----BEGIN PRIVATE KEY-----\n * YWFh\n * -----END PRIVATE KEY-----\n */\n this.getPEMStringFromHex = function (dataHex, pemHeader) {\n return hextopem(dataHex, pemHeader);\n };\n /**\n * generate ASN1Object specifed by JSON parameters\n * @name newObject\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return {KJUR.asn1.ASN1Object} generated object\n * @since asn1 1.0.3\n * @description\n * generate any ASN1Object specified by JSON param\n * including ASN.1 primitive or structured.\n * Generally 'param' can be described as follows:\n *
\n * {TYPE-OF-ASNOBJ: ASN1OBJ-PARAMETER}\n *
\n * 'TYPE-OF-ASN1OBJ' can be one of following symbols:\n *
    \n *
  • 'bool' - DERBoolean
  • \n *
  • 'int' - DERInteger
  • \n *
  • 'bitstr' - DERBitString
  • \n *
  • 'octstr' - DEROctetString
  • \n *
  • 'null' - DERNull
  • \n *
  • 'oid' - DERObjectIdentifier
  • \n *
  • 'enum' - DEREnumerated
  • \n *
  • 'utf8str' - DERUTF8String
  • \n *
  • 'numstr' - DERNumericString
  • \n *
  • 'prnstr' - DERPrintableString
  • \n *
  • 'telstr' - DERTeletexString
  • \n *
  • 'ia5str' - DERIA5String
  • \n *
  • 'utctime' - DERUTCTime
  • \n *
  • 'gentime' - DERGeneralizedTime
  • \n *
  • 'seq' - DERSequence
  • \n *
  • 'set' - DERSet
  • \n *
  • 'tag' - DERTaggedObject
  • \n *
\n * @example\n * newObject({'prnstr': 'aaa'});\n * newObject({'seq': [{'int': 3}, {'prnstr': 'aaa'}]})\n * // ASN.1 Tagged Object\n * newObject({'tag': {'tag': 'a1',\n * 'explicit': true,\n * 'obj': {'seq': [{'int': 3}, {'prnstr': 'aaa'}]}}});\n * // more simple representation of ASN.1 Tagged Object\n * newObject({'tag': ['a1',\n * true,\n * {'seq': [\n * {'int': 3},\n * {'prnstr': 'aaa'}]}\n * ]});\n */\n this.newObject = function (param) {\n var _KJUR = KJUR, _KJUR_asn1 = _KJUR.asn1, _DERBoolean = _KJUR_asn1.DERBoolean, _DERInteger = _KJUR_asn1.DERInteger, _DERBitString = _KJUR_asn1.DERBitString, _DEROctetString = _KJUR_asn1.DEROctetString, _DERNull = _KJUR_asn1.DERNull, _DERObjectIdentifier = _KJUR_asn1.DERObjectIdentifier, _DEREnumerated = _KJUR_asn1.DEREnumerated, _DERUTF8String = _KJUR_asn1.DERUTF8String, _DERNumericString = _KJUR_asn1.DERNumericString, _DERPrintableString = _KJUR_asn1.DERPrintableString, _DERTeletexString = _KJUR_asn1.DERTeletexString, _DERIA5String = _KJUR_asn1.DERIA5String, _DERUTCTime = _KJUR_asn1.DERUTCTime, _DERGeneralizedTime = _KJUR_asn1.DERGeneralizedTime, _DERSequence = _KJUR_asn1.DERSequence, _DERSet = _KJUR_asn1.DERSet, _DERTaggedObject = _KJUR_asn1.DERTaggedObject, _newObject = _KJUR_asn1.ASN1Util.newObject;\n var keys = Object.keys(param);\n if (keys.length != 1)\n throw \"key of param shall be only one.\";\n var key = keys[0];\n if (\":bool:int:bitstr:octstr:null:oid:enum:utf8str:numstr:prnstr:telstr:ia5str:utctime:gentime:seq:set:tag:\".indexOf(\":\" + key + \":\") == -1)\n throw \"undefined key: \" + key;\n if (key == \"bool\")\n return new _DERBoolean(param[key]);\n if (key == \"int\")\n return new _DERInteger(param[key]);\n if (key == \"bitstr\")\n return new _DERBitString(param[key]);\n if (key == \"octstr\")\n return new _DEROctetString(param[key]);\n if (key == \"null\")\n return new _DERNull(param[key]);\n if (key == \"oid\")\n return new _DERObjectIdentifier(param[key]);\n if (key == \"enum\")\n return new _DEREnumerated(param[key]);\n if (key == \"utf8str\")\n return new _DERUTF8String(param[key]);\n if (key == \"numstr\")\n return new _DERNumericString(param[key]);\n if (key == \"prnstr\")\n return new _DERPrintableString(param[key]);\n if (key == \"telstr\")\n return new _DERTeletexString(param[key]);\n if (key == \"ia5str\")\n return new _DERIA5String(param[key]);\n if (key == \"utctime\")\n return new _DERUTCTime(param[key]);\n if (key == \"gentime\")\n return new _DERGeneralizedTime(param[key]);\n if (key == \"seq\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSequence({ 'array': a });\n }\n if (key == \"set\") {\n var paramList = param[key];\n var a = [];\n for (var i = 0; i < paramList.length; i++) {\n var asn1Obj = _newObject(paramList[i]);\n a.push(asn1Obj);\n }\n return new _DERSet({ 'array': a });\n }\n if (key == \"tag\") {\n var tagParam = param[key];\n if (Object.prototype.toString.call(tagParam) === '[object Array]' &&\n tagParam.length == 3) {\n var obj = _newObject(tagParam[2]);\n return new _DERTaggedObject({ tag: tagParam[0],\n explicit: tagParam[1],\n obj: obj });\n }\n else {\n var newParam = {};\n if (tagParam.explicit !== undefined)\n newParam.explicit = tagParam.explicit;\n if (tagParam.tag !== undefined)\n newParam.tag = tagParam.tag;\n if (tagParam.obj === undefined)\n throw \"obj shall be specified for 'tag'.\";\n newParam.obj = _newObject(tagParam.obj);\n return new _DERTaggedObject(newParam);\n }\n }\n };\n /**\n * get encoded hexadecimal string of ASN1Object specifed by JSON parameters\n * @name jsonToASN1HEX\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {Array} param JSON parameter to generate ASN1Object\n * @return hexadecimal string of ASN1Object\n * @since asn1 1.0.4\n * @description\n * As for ASN.1 object representation of JSON object,\n * please see {@link newObject}.\n * @example\n * jsonToASN1HEX({'prnstr': 'aaa'});\n */\n this.jsonToASN1HEX = function (param) {\n var asn1Obj = this.newObject(param);\n return asn1Obj.getEncodedHex();\n };\n};\n/**\n * get dot noted oid number string from hexadecimal value of OID\n * @name oidHexToInt\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} hex hexadecimal value of object identifier\n * @return {String} dot noted string of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from hexadecimal string representation of\n * ASN.1 value of object identifier to oid number string.\n * @example\n * KJUR.asn1.ASN1Util.oidHexToInt('550406') → \"2.5.4.6\"\n */\nKJUR.asn1.ASN1Util.oidHexToInt = function (hex) {\n var s = \"\";\n var i01 = parseInt(hex.substr(0, 2), 16);\n var i0 = Math.floor(i01 / 40);\n var i1 = i01 % 40;\n var s = i0 + \".\" + i1;\n var binbuf = \"\";\n for (var i = 2; i < hex.length; i += 2) {\n var value = parseInt(hex.substr(i, 2), 16);\n var bin = (\"00000000\" + value.toString(2)).slice(-8);\n binbuf = binbuf + bin.substr(1, 7);\n if (bin.substr(0, 1) == \"0\") {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(binbuf, 2);\n s = s + \".\" + bi.toString(10);\n binbuf = \"\";\n }\n }\n ;\n return s;\n};\n/**\n * get hexadecimal value of object identifier from dot noted oid value\n * @name oidIntToHex\n * @memberOf KJUR.asn1.ASN1Util\n * @function\n * @param {String} oidString dot noted string of object identifier\n * @return {String} hexadecimal value of object identifier\n * @since jsrsasign 4.8.3 asn1 1.0.7\n * @description\n * This static method converts from object identifier value string.\n * to hexadecimal string representation of it.\n * @example\n * KJUR.asn1.ASN1Util.oidIntToHex(\"2.5.4.6\") → \"550406\"\n */\nKJUR.asn1.ASN1Util.oidIntToHex = function (oidString) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n return h;\n};\n// ********************************************************************\n// Abstract ASN.1 Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * base class for ASN.1 DER encoder object\n * @name KJUR.asn1.ASN1Object\n * @class base class for ASN.1 DER encoder object\n * @property {Boolean} isModified flag whether internal data was changed\n * @property {String} hTLV hexadecimal string of ASN.1 TLV\n * @property {String} hT hexadecimal string of ASN.1 TLV tag(T)\n * @property {String} hL hexadecimal string of ASN.1 TLV length(L)\n * @property {String} hV hexadecimal string of ASN.1 TLV value(V)\n * @description\n */\nKJUR.asn1.ASN1Object = function () {\n var isModified = true;\n var hTLV = null;\n var hT = '00';\n var hL = '00';\n var hV = '';\n /**\n * get hexadecimal ASN.1 TLV length(L) bytes from TLV value(V)\n * @name getLengthHexFromValue\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV length(L)\n */\n this.getLengthHexFromValue = function () {\n if (typeof this.hV == \"undefined\" || this.hV == null) {\n throw \"this.hV is null or undefined.\";\n }\n if (this.hV.length % 2 == 1) {\n throw \"value hex must be even length: n=\" + hV.length + \",v=\" + this.hV;\n }\n var n = this.hV.length / 2;\n var hN = n.toString(16);\n if (hN.length % 2 == 1) {\n hN = \"0\" + hN;\n }\n if (n < 128) {\n return hN;\n }\n else {\n var hNlen = hN.length / 2;\n if (hNlen > 15) {\n throw \"ASN.1 length too long to represent by 8x: n = \" + n.toString(16);\n }\n var head = 128 + hNlen;\n return head.toString(16) + hN;\n }\n };\n /**\n * get hexadecimal string of ASN.1 TLV bytes\n * @name getEncodedHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV\n */\n this.getEncodedHex = function () {\n if (this.hTLV == null || this.isModified) {\n this.hV = this.getFreshValueHex();\n this.hL = this.getLengthHexFromValue();\n this.hTLV = this.hT + this.hL + this.hV;\n this.isModified = false;\n //alert(\"first time: \" + this.hTLV);\n }\n return this.hTLV;\n };\n /**\n * get hexadecimal string of ASN.1 TLV value(V) bytes\n * @name getValueHex\n * @memberOf KJUR.asn1.ASN1Object#\n * @function\n * @return {String} hexadecimal string of ASN.1 TLV value(V) bytes\n */\n this.getValueHex = function () {\n this.getEncodedHex();\n return this.hV;\n };\n this.getFreshValueHex = function () {\n return '';\n };\n};\n// == BEGIN DERAbstractString ================================================\n/**\n * base class for ASN.1 DER string classes\n * @name KJUR.asn1.DERAbstractString\n * @class base class for ASN.1 DER string classes\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @property {String} s internal string of value\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERAbstractString = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var s = null;\n var hV = null;\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @return {String} string value of this string object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newS value by a string to set\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(this.s);\n };\n /**\n * set value by a hexadecimal string\n * @name setStringHex\n * @memberOf KJUR.asn1.DERAbstractString#\n * @function\n * @param {String} newHexString value by a hexadecimal string to set\n */\n this.setStringHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\") {\n this.setString(params);\n }\n else if (typeof params['str'] != \"undefined\") {\n this.setString(params['str']);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setStringHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractString, KJUR.asn1.ASN1Object);\n// == END DERAbstractString ================================================\n// == BEGIN DERAbstractTime ==================================================\n/**\n * base class for ASN.1 DER Generalized/UTCTime class\n * @name KJUR.asn1.DERAbstractTime\n * @class base class for ASN.1 DER Generalized/UTCTime class\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractTime = function (params) {\n KJUR.asn1.DERAbstractTime.superclass.constructor.call(this);\n var s = null;\n var date = null;\n // --- PRIVATE METHODS --------------------\n this.localDateToUTC = function (d) {\n utc = d.getTime() + (d.getTimezoneOffset() * 60000);\n var utcDate = new Date(utc);\n return utcDate;\n };\n /*\n * format date string by Data object\n * @name formatDate\n * @memberOf KJUR.asn1.AbstractTime;\n * @param {Date} dateObject\n * @param {string} type 'utc' or 'gen'\n * @param {boolean} withMillis flag for with millisections or not\n * @description\n * 'withMillis' flag is supported from asn1 1.0.6.\n */\n this.formatDate = function (dateObject, type, withMillis) {\n var pad = this.zeroPadding;\n var d = this.localDateToUTC(dateObject);\n var year = String(d.getFullYear());\n if (type == 'utc')\n year = year.substr(2, 2);\n var month = pad(String(d.getMonth() + 1), 2);\n var day = pad(String(d.getDate()), 2);\n var hour = pad(String(d.getHours()), 2);\n var min = pad(String(d.getMinutes()), 2);\n var sec = pad(String(d.getSeconds()), 2);\n var s = year + month + day + hour + min + sec;\n if (withMillis === true) {\n var millis = d.getMilliseconds();\n if (millis != 0) {\n var sMillis = pad(String(millis), 3);\n sMillis = sMillis.replace(/[0]+$/, \"\");\n s = s + \".\" + sMillis;\n }\n }\n return s + \"Z\";\n };\n this.zeroPadding = function (s, len) {\n if (s.length >= len)\n return s;\n return new Array(len - s.length + 1).join('0') + s;\n };\n // --- PUBLIC METHODS --------------------\n /**\n * get string value of this string object\n * @name getString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @return {String} string value of this time object\n */\n this.getString = function () {\n return this.s;\n };\n /**\n * set value by a string\n * @name setString\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {String} newS value by a string to set such like \"130430235959Z\"\n */\n this.setString = function (newS) {\n this.hTLV = null;\n this.isModified = true;\n this.s = newS;\n this.hV = stohex(newS);\n };\n /**\n * set value by a Date object\n * @name setByDateValue\n * @memberOf KJUR.asn1.DERAbstractTime#\n * @function\n * @param {Integer} year year of date (ex. 2013)\n * @param {Integer} month month of date between 1 and 12 (ex. 12)\n * @param {Integer} day day of month\n * @param {Integer} hour hours of date\n * @param {Integer} min minutes of date\n * @param {Integer} sec seconds of date\n */\n this.setByDateValue = function (year, month, day, hour, min, sec) {\n var dateObject = new Date(Date.UTC(year, month - 1, day, hour, min, sec, 0));\n this.setByDate(dateObject);\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractTime, KJUR.asn1.ASN1Object);\n// == END DERAbstractTime ==================================================\n// == BEGIN DERAbstractStructured ============================================\n/**\n * base class for ASN.1 DER structured class\n * @name KJUR.asn1.DERAbstractStructured\n * @class base class for ASN.1 DER structured class\n * @property {Array} asn1Array internal array of ASN1Object\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERAbstractStructured = function (params) {\n KJUR.asn1.DERAbstractString.superclass.constructor.call(this);\n var asn1Array = null;\n /**\n * set value by array of ASN1Object\n * @name setByASN1ObjectArray\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {array} asn1ObjectArray array of ASN1Object to set\n */\n this.setByASN1ObjectArray = function (asn1ObjectArray) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array = asn1ObjectArray;\n };\n /**\n * append an ASN1Object to internal array\n * @name appendASN1Object\n * @memberOf KJUR.asn1.DERAbstractStructured#\n * @function\n * @param {ASN1Object} asn1Object to add\n */\n this.appendASN1Object = function (asn1Object) {\n this.hTLV = null;\n this.isModified = true;\n this.asn1Array.push(asn1Object);\n };\n this.asn1Array = new Array();\n if (typeof params != \"undefined\") {\n if (typeof params['array'] != \"undefined\") {\n this.asn1Array = params['array'];\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERAbstractStructured, KJUR.asn1.ASN1Object);\n// ********************************************************************\n// ASN.1 Object Classes\n// ********************************************************************\n// ********************************************************************\n/**\n * class for ASN.1 DER Boolean\n * @name KJUR.asn1.DERBoolean\n * @class class for ASN.1 DER Boolean\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERBoolean = function () {\n KJUR.asn1.DERBoolean.superclass.constructor.call(this);\n this.hT = \"01\";\n this.hTLV = \"0101ff\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBoolean, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Integer\n * @name KJUR.asn1.DERInteger\n * @class class for ASN.1 DER Integer\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • int - specify initial ASN.1 value(V) by integer value
  • \n *
  • bigint - specify initial ASN.1 value(V) by BigInteger object
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERInteger = function (params) {\n KJUR.asn1.DERInteger.superclass.constructor.call(this);\n this.hT = \"02\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DERInteger\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DERInteger#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n * @example\n * new KJUR.asn1.DERInteger(123);\n * new KJUR.asn1.DERInteger({'int': 123});\n * new KJUR.asn1.DERInteger({'hex': '1fad'});\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['bigint'] != \"undefined\") {\n this.setByBigInteger(params['bigint']);\n }\n else if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERInteger, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER encoded BitString primitive\n * @name KJUR.asn1.DERBitString\n * @class class for ASN.1 DER encoded BitString primitive\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • bin - specify binary string (ex. '10111')
  • \n *
  • array - specify array of boolean (ex. [true,false,true,true])
  • \n *
  • hex - specify hexadecimal string of ASN.1 value(V) including unused bits
  • \n *
  • obj - specify {@link KJUR.asn1.ASN1Util.newObject}\n * argument for \"BitString encapsulates\" structure.
  • \n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: 'obj' parameter have been supported since\n * asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).
\n * @example\n * // default constructor\n * o = new KJUR.asn1.DERBitString();\n * // initialize with binary string\n * o = new KJUR.asn1.DERBitString({bin: \"1011\"});\n * // initialize with boolean array\n * o = new KJUR.asn1.DERBitString({array: [true,false,true,true]});\n * // initialize with hexadecimal string (04 is unused bits)\n * o = new KJUR.asn1.DEROctetString({hex: \"04bac0\"});\n * // initialize with ASN1Util.newObject argument for encapsulated\n * o = new KJUR.asn1.DERBitString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // BIT STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DERBitString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = \"00\" + o.getEncodedHex();\n }\n KJUR.asn1.DERBitString.superclass.constructor.call(this);\n this.hT = \"03\";\n /**\n * set ASN.1 value(V) by a hexadecimal string including unused bits\n * @name setHexValueIncludingUnusedBits\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} newHexStringIncludingUnusedBits\n */\n this.setHexValueIncludingUnusedBits = function (newHexStringIncludingUnusedBits) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = newHexStringIncludingUnusedBits;\n };\n /**\n * set ASN.1 value(V) by unused bit and hexadecimal string of value\n * @name setUnusedBitsAndHexValue\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {Integer} unusedBits\n * @param {String} hValue\n */\n this.setUnusedBitsAndHexValue = function (unusedBits, hValue) {\n if (unusedBits < 0 || 7 < unusedBits) {\n throw \"unused bits shall be from 0 to 7: u = \" + unusedBits;\n }\n var hUnusedBits = \"0\" + unusedBits;\n this.hTLV = null;\n this.isModified = true;\n this.hV = hUnusedBits + hValue;\n };\n /**\n * set ASN.1 DER BitString by binary string
\n * @name setByBinaryString\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {String} binaryString binary value string (i.e. '10111')\n * @description\n * Its unused bits will be calculated automatically by length of\n * 'binaryValue'.
\n * NOTE: Trailing zeros '0' will be ignored.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray(\"01011\");\n */\n this.setByBinaryString = function (binaryString) {\n binaryString = binaryString.replace(/0+$/, '');\n var unusedBits = 8 - binaryString.length % 8;\n if (unusedBits == 8)\n unusedBits = 0;\n for (var i = 0; i <= unusedBits; i++) {\n binaryString += '0';\n }\n var h = '';\n for (var i = 0; i < binaryString.length - 1; i += 8) {\n var b = binaryString.substr(i, 8);\n var x = parseInt(b, 2).toString(16);\n if (x.length == 1)\n x = '0' + x;\n h += x;\n }\n this.hTLV = null;\n this.isModified = true;\n this.hV = '0' + unusedBits + h;\n };\n /**\n * set ASN.1 TLV value(V) by an array of boolean
\n * @name setByBooleanArray\n * @memberOf KJUR.asn1.DERBitString#\n * @function\n * @param {array} booleanArray array of boolean (ex. [true, false, true])\n * @description\n * NOTE: Trailing falses will be ignored in the ASN.1 DER Object.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.setByBooleanArray([false, true, false, true, true]);\n */\n this.setByBooleanArray = function (booleanArray) {\n var s = '';\n for (var i = 0; i < booleanArray.length; i++) {\n if (booleanArray[i] == true) {\n s += '1';\n }\n else {\n s += '0';\n }\n }\n this.setByBinaryString(s);\n };\n /**\n * generate an array of falses with specified length
\n * @name newFalseArray\n * @memberOf KJUR.asn1.DERBitString\n * @function\n * @param {Integer} nLength length of array to generate\n * @return {array} array of boolean falses\n * @description\n * This static method may be useful to initialize boolean array.\n * @example\n * o = new KJUR.asn1.DERBitString();\n * o.newFalseArray(3) → [false, false, false]\n */\n this.newFalseArray = function (nLength) {\n var a = new Array(nLength);\n for (var i = 0; i < nLength; i++) {\n a[i] = false;\n }\n return a;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params == \"string\" && params.toLowerCase().match(/^[0-9a-f]+$/)) {\n this.setHexValueIncludingUnusedBits(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setHexValueIncludingUnusedBits(params['hex']);\n }\n else if (typeof params['bin'] != \"undefined\") {\n this.setByBinaryString(params['bin']);\n }\n else if (typeof params['array'] != \"undefined\") {\n this.setByBooleanArray(params['array']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERBitString, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER OctetString
\n * @name KJUR.asn1.DEROctetString\n * @class class for ASN.1 DER OctetString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * This class provides ASN.1 OctetString simple type.
\n * Supported \"params\" attributes are:\n *
    \n *
  • str - to set a string as a value
  • \n *
  • hex - to set a hexadecimal string as a value
  • \n *
  • obj - to set a encapsulated ASN.1 value by JSON object\n * which is defined in {@link KJUR.asn1.ASN1Util.newObject}
  • \n *
\n * NOTE: A parameter 'obj' have been supported\n * for \"OCTET STRING, encapsulates\" structure.\n * since asn1 1.0.11, jsrsasign 6.1.1 (2016-Sep-25).\n * @see KJUR.asn1.DERAbstractString - superclass\n * @example\n * // default constructor\n * o = new KJUR.asn1.DEROctetString();\n * // initialize with string\n * o = new KJUR.asn1.DEROctetString({str: \"aaa\"});\n * // initialize with hexadecimal string\n * o = new KJUR.asn1.DEROctetString({hex: \"616161\"});\n * // initialize with ASN1Util.newObject argument\n * o = new KJUR.asn1.DEROctetString({obj: {seq: [{int: 3}, {prnstr: 'aaa'}]}});\n * // above generates a ASN.1 data like this:\n * // OCTET STRING, encapsulates {\n * // SEQUENCE {\n * // INTEGER 3\n * // PrintableString 'aaa'\n * // }\n * // }\n */\nKJUR.asn1.DEROctetString = function (params) {\n if (params !== undefined && typeof params.obj !== \"undefined\") {\n var o = KJUR.asn1.ASN1Util.newObject(params.obj);\n params.hex = o.getEncodedHex();\n }\n KJUR.asn1.DEROctetString.superclass.constructor.call(this, params);\n this.hT = \"04\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEROctetString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER Null\n * @name KJUR.asn1.DERNull\n * @class class for ASN.1 DER Null\n * @extends KJUR.asn1.ASN1Object\n * @description\n * @see KJUR.asn1.ASN1Object - superclass\n */\nKJUR.asn1.DERNull = function () {\n KJUR.asn1.DERNull.superclass.constructor.call(this);\n this.hT = \"05\";\n this.hTLV = \"0500\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNull, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER ObjectIdentifier\n * @name KJUR.asn1.DERObjectIdentifier\n * @class class for ASN.1 DER ObjectIdentifier\n * @param {Array} params associative array of parameters (ex. {'oid': '2.5.4.5'})\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • oid - specify initial ASN.1 value(V) by a oid string (ex. 2.5.4.13)
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERObjectIdentifier = function (params) {\n var itox = function (i) {\n var h = i.toString(16);\n if (h.length == 1)\n h = '0' + h;\n return h;\n };\n var roidtox = function (roid) {\n var h = '';\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(roid, 10);\n var b = bi.toString(2);\n var padLen = 7 - b.length % 7;\n if (padLen == 7)\n padLen = 0;\n var bPad = '';\n for (var i = 0; i < padLen; i++)\n bPad += '0';\n b = bPad + b;\n for (var i = 0; i < b.length - 1; i += 7) {\n var b8 = b.substr(i, 7);\n if (i != b.length - 7)\n b8 = '1' + b8;\n h += itox(parseInt(b8, 2));\n }\n return h;\n };\n KJUR.asn1.DERObjectIdentifier.superclass.constructor.call(this);\n this.hT = \"06\";\n /**\n * set value by a hexadecimal string\n * @name setValueHex\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} newHexString hexadecimal value of OID bytes\n */\n this.setValueHex = function (newHexString) {\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = newHexString;\n };\n /**\n * set value by a OID string
\n * @name setValueOidString\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidString OID string (ex. 2.5.4.13)\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueOidString(\"2.5.4.13\");\n */\n this.setValueOidString = function (oidString) {\n if (!oidString.match(/^[0-9.]+$/)) {\n throw \"malformed oid string: \" + oidString;\n }\n var h = '';\n var a = oidString.split('.');\n var i0 = parseInt(a[0]) * 40 + parseInt(a[1]);\n h += itox(i0);\n a.splice(0, 2);\n for (var i = 0; i < a.length; i++) {\n h += roidtox(a[i]);\n }\n this.hTLV = null;\n this.isModified = true;\n this.s = null;\n this.hV = h;\n };\n /**\n * set value by a OID name\n * @name setValueName\n * @memberOf KJUR.asn1.DERObjectIdentifier#\n * @function\n * @param {String} oidName OID name (ex. 'serverAuth')\n * @since 1.0.1\n * @description\n * OID name shall be defined in 'KJUR.asn1.x509.OID.name2oidList'.\n * Otherwise raise error.\n * @example\n * o = new KJUR.asn1.DERObjectIdentifier();\n * o.setValueName(\"serverAuth\");\n */\n this.setValueName = function (oidName) {\n var oid = KJUR.asn1.x509.OID.name2oid(oidName);\n if (oid !== '') {\n this.setValueOidString(oid);\n }\n else {\n throw \"DERObjectIdentifier oidName undefined: \" + oidName;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (params !== undefined) {\n if (typeof params === \"string\") {\n if (params.match(/^[0-2].[0-9.]+$/)) {\n this.setValueOidString(params);\n }\n else {\n this.setValueName(params);\n }\n }\n else if (params.oid !== undefined) {\n this.setValueOidString(params.oid);\n }\n else if (params.hex !== undefined) {\n this.setValueHex(params.hex);\n }\n else if (params.name !== undefined) {\n this.setValueName(params.name);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERObjectIdentifier, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER Enumerated\n * @name KJUR.asn1.DEREnumerated\n * @class class for ASN.1 DER Enumerated\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • int - specify initial ASN.1 value(V) by integer value
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
\n * NOTE: 'params' can be omitted.\n * @example\n * new KJUR.asn1.DEREnumerated(123);\n * new KJUR.asn1.DEREnumerated({int: 123});\n * new KJUR.asn1.DEREnumerated({hex: '1fad'});\n */\nKJUR.asn1.DEREnumerated = function (params) {\n KJUR.asn1.DEREnumerated.superclass.constructor.call(this);\n this.hT = \"0a\";\n /**\n * set value by Tom Wu's BigInteger object\n * @name setByBigInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {BigInteger} bigIntegerValue to set\n */\n this.setByBigInteger = function (bigIntegerValue) {\n this.hTLV = null;\n this.isModified = true;\n this.hV = KJUR.asn1.ASN1Util.bigIntToMinTwosComplementsHex(bigIntegerValue);\n };\n /**\n * set value by integer value\n * @name setByInteger\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {Integer} integer value to set\n */\n this.setByInteger = function (intValue) {\n var bi = new _jsbn_jsbn__WEBPACK_IMPORTED_MODULE_0__.BigInteger(String(intValue), 10);\n this.setByBigInteger(bi);\n };\n /**\n * set value by integer value\n * @name setValueHex\n * @memberOf KJUR.asn1.DEREnumerated#\n * @function\n * @param {String} hexadecimal string of integer value\n * @description\n *
\n * NOTE: Value shall be represented by minimum octet length of\n * two's complement representation.\n */\n this.setValueHex = function (newHexString) {\n this.hV = newHexString;\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['int'] != \"undefined\") {\n this.setByInteger(params['int']);\n }\n else if (typeof params == \"number\") {\n this.setByInteger(params);\n }\n else if (typeof params['hex'] != \"undefined\") {\n this.setValueHex(params['hex']);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DEREnumerated, KJUR.asn1.ASN1Object);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTF8String\n * @name KJUR.asn1.DERUTF8String\n * @class class for ASN.1 DER UTF8String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERUTF8String = function (params) {\n KJUR.asn1.DERUTF8String.superclass.constructor.call(this, params);\n this.hT = \"0c\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTF8String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER NumericString\n * @name KJUR.asn1.DERNumericString\n * @class class for ASN.1 DER NumericString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERNumericString = function (params) {\n KJUR.asn1.DERNumericString.superclass.constructor.call(this, params);\n this.hT = \"12\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERNumericString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER PrintableString\n * @name KJUR.asn1.DERPrintableString\n * @class class for ASN.1 DER PrintableString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERPrintableString = function (params) {\n KJUR.asn1.DERPrintableString.superclass.constructor.call(this, params);\n this.hT = \"13\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERPrintableString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER TeletexString\n * @name KJUR.asn1.DERTeletexString\n * @class class for ASN.1 DER TeletexString\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERTeletexString = function (params) {\n KJUR.asn1.DERTeletexString.superclass.constructor.call(this, params);\n this.hT = \"14\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTeletexString, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER IA5String\n * @name KJUR.asn1.DERIA5String\n * @class class for ASN.1 DER IA5String\n * @param {Array} params associative array of parameters (ex. {'str': 'aaa'})\n * @extends KJUR.asn1.DERAbstractString\n * @description\n * @see KJUR.asn1.DERAbstractString - superclass\n */\nKJUR.asn1.DERIA5String = function (params) {\n KJUR.asn1.DERIA5String.superclass.constructor.call(this, params);\n this.hT = \"16\";\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERIA5String, KJUR.asn1.DERAbstractString);\n// ********************************************************************\n/**\n * class for ASN.1 DER UTCTime\n * @name KJUR.asn1.DERUTCTime\n * @class class for ASN.1 DER UTCTime\n * @param {Array} params associative array of parameters (ex. {'str': '130430235959Z'})\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string (ex.'130430235959Z')
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
  • date - specify Date object.
  • \n *
\n * NOTE: 'params' can be omitted.\n *

EXAMPLES

\n * @example\n * d1 = new KJUR.asn1.DERUTCTime();\n * d1.setString('130430125959Z');\n *\n * d2 = new KJUR.asn1.DERUTCTime({'str': '130430125959Z'});\n * d3 = new KJUR.asn1.DERUTCTime({'date': new Date(Date.UTC(2015, 0, 31, 0, 0, 0, 0))});\n * d4 = new KJUR.asn1.DERUTCTime('130430125959Z');\n */\nKJUR.asn1.DERUTCTime = function (params) {\n KJUR.asn1.DERUTCTime.superclass.constructor.call(this, params);\n this.hT = \"17\";\n /**\n * set value by a Date object
\n * @name setByDate\n * @memberOf KJUR.asn1.DERUTCTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * o = new KJUR.asn1.DERUTCTime();\n * o.setByDate(new Date(\"2016/12/31\"));\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (typeof this.date == \"undefined\" && typeof this.s == \"undefined\") {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'utc');\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{12}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERUTCTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER GeneralizedTime\n * @name KJUR.asn1.DERGeneralizedTime\n * @class class for ASN.1 DER GeneralizedTime\n * @param {Array} params associative array of parameters (ex. {'str': '20130430235959Z'})\n * @property {Boolean} withMillis flag to show milliseconds or not\n * @extends KJUR.asn1.DERAbstractTime\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • str - specify initial ASN.1 value(V) by a string (ex.'20130430235959Z')
  • \n *
  • hex - specify initial ASN.1 value(V) by a hexadecimal string
  • \n *
  • date - specify Date object.
  • \n *
  • millis - specify flag to show milliseconds (from 1.0.6)
  • \n *
\n * NOTE1: 'params' can be omitted.\n * NOTE2: 'withMillis' property is supported from asn1 1.0.6.\n */\nKJUR.asn1.DERGeneralizedTime = function (params) {\n KJUR.asn1.DERGeneralizedTime.superclass.constructor.call(this, params);\n this.hT = \"18\";\n this.withMillis = false;\n /**\n * set value by a Date object\n * @name setByDate\n * @memberOf KJUR.asn1.DERGeneralizedTime#\n * @function\n * @param {Date} dateObject Date object to set ASN.1 value(V)\n * @example\n * When you specify UTC time, use 'Date.UTC' method like this:
\n * o1 = new DERUTCTime();\n * o1.setByDate(date);\n *\n * date = new Date(Date.UTC(2015, 0, 31, 23, 59, 59, 0)); #2015JAN31 23:59:59\n */\n this.setByDate = function (dateObject) {\n this.hTLV = null;\n this.isModified = true;\n this.date = dateObject;\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n };\n this.getFreshValueHex = function () {\n if (this.date === undefined && this.s === undefined) {\n this.date = new Date();\n this.s = this.formatDate(this.date, 'gen', this.withMillis);\n this.hV = stohex(this.s);\n }\n return this.hV;\n };\n if (params !== undefined) {\n if (params.str !== undefined) {\n this.setString(params.str);\n }\n else if (typeof params == \"string\" && params.match(/^[0-9]{14}Z$/)) {\n this.setString(params);\n }\n else if (params.hex !== undefined) {\n this.setStringHex(params.hex);\n }\n else if (params.date !== undefined) {\n this.setByDate(params.date);\n }\n if (params.millis === true) {\n this.withMillis = true;\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERGeneralizedTime, KJUR.asn1.DERAbstractTime);\n// ********************************************************************\n/**\n * class for ASN.1 DER Sequence\n * @name KJUR.asn1.DERSequence\n * @class class for ASN.1 DER Sequence\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • array - specify array of ASN1Object to set elements of content
  • \n *
\n * NOTE: 'params' can be omitted.\n */\nKJUR.asn1.DERSequence = function (params) {\n KJUR.asn1.DERSequence.superclass.constructor.call(this, params);\n this.hT = \"30\";\n this.getFreshValueHex = function () {\n var h = '';\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n h += asn1Obj.getEncodedHex();\n }\n this.hV = h;\n return this.hV;\n };\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSequence, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER Set\n * @name KJUR.asn1.DERSet\n * @class class for ASN.1 DER Set\n * @extends KJUR.asn1.DERAbstractStructured\n * @description\n *
\n * As for argument 'params' for constructor, you can specify one of\n * following properties:\n *
    \n *
  • array - specify array of ASN1Object to set elements of content
  • \n *
  • sortflag - flag for sort (default: true). ASN.1 BER is not sorted in 'SET OF'.
  • \n *
\n * NOTE1: 'params' can be omitted.
\n * NOTE2: sortflag is supported since 1.0.5.\n */\nKJUR.asn1.DERSet = function (params) {\n KJUR.asn1.DERSet.superclass.constructor.call(this, params);\n this.hT = \"31\";\n this.sortFlag = true; // item shall be sorted only in ASN.1 DER\n this.getFreshValueHex = function () {\n var a = new Array();\n for (var i = 0; i < this.asn1Array.length; i++) {\n var asn1Obj = this.asn1Array[i];\n a.push(asn1Obj.getEncodedHex());\n }\n if (this.sortFlag == true)\n a.sort();\n this.hV = a.join('');\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params.sortflag != \"undefined\" &&\n params.sortflag == false)\n this.sortFlag = false;\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERSet, KJUR.asn1.DERAbstractStructured);\n// ********************************************************************\n/**\n * class for ASN.1 DER TaggedObject\n * @name KJUR.asn1.DERTaggedObject\n * @class class for ASN.1 DER TaggedObject\n * @extends KJUR.asn1.ASN1Object\n * @description\n *
\n * Parameter 'tagNoNex' is ASN.1 tag(T) value for this object.\n * For example, if you find '[1]' tag in a ASN.1 dump,\n * 'tagNoHex' will be 'a1'.\n *
\n * As for optional argument 'params' for constructor, you can specify *ANY* of\n * following properties:\n *
    \n *
  • explicit - specify true if this is explicit tag otherwise false\n * (default is 'true').
  • \n *
  • tag - specify tag (default is 'a0' which means [0])
  • \n *
  • obj - specify ASN1Object which is tagged
  • \n *
\n * @example\n * d1 = new KJUR.asn1.DERUTF8String({'str':'a'});\n * d2 = new KJUR.asn1.DERTaggedObject({'obj': d1});\n * hex = d2.getEncodedHex();\n */\nKJUR.asn1.DERTaggedObject = function (params) {\n KJUR.asn1.DERTaggedObject.superclass.constructor.call(this);\n this.hT = \"a0\";\n this.hV = '';\n this.isExplicit = true;\n this.asn1Object = null;\n /**\n * set value by an ASN1Object\n * @name setString\n * @memberOf KJUR.asn1.DERTaggedObject#\n * @function\n * @param {Boolean} isExplicitFlag flag for explicit/implicit tag\n * @param {Integer} tagNoHex hexadecimal string of ASN.1 tag\n * @param {ASN1Object} asn1Object ASN.1 to encapsulate\n */\n this.setASN1Object = function (isExplicitFlag, tagNoHex, asn1Object) {\n this.hT = tagNoHex;\n this.isExplicit = isExplicitFlag;\n this.asn1Object = asn1Object;\n if (this.isExplicit) {\n this.hV = this.asn1Object.getEncodedHex();\n this.hTLV = null;\n this.isModified = true;\n }\n else {\n this.hV = null;\n this.hTLV = asn1Object.getEncodedHex();\n this.hTLV = this.hTLV.replace(/^../, tagNoHex);\n this.isModified = false;\n }\n };\n this.getFreshValueHex = function () {\n return this.hV;\n };\n if (typeof params != \"undefined\") {\n if (typeof params['tag'] != \"undefined\") {\n this.hT = params['tag'];\n }\n if (typeof params['explicit'] != \"undefined\") {\n this.isExplicit = params['explicit'];\n }\n if (typeof params['obj'] != \"undefined\") {\n this.asn1Object = params['obj'];\n this.setASN1Object(this.isExplicit, this.hT, this.asn1Object);\n }\n }\n};\n_yahoo__WEBPACK_IMPORTED_MODULE_1__.YAHOO.lang.extend(KJUR.asn1.DERTaggedObject, KJUR.asn1.ASN1Object);\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/asn1-1.0.js?"); + +/***/ }), + +/***/ "./lib/lib/jsrsasign/yahoo.js": +/*!************************************!*\ + !*** ./lib/lib/jsrsasign/yahoo.js ***! + \************************************/ +/***/ ((__unused_webpack_module, __webpack_exports__, __webpack_require__) => { + +eval("__webpack_require__.r(__webpack_exports__);\n/* harmony export */ __webpack_require__.d(__webpack_exports__, {\n/* harmony export */ \"YAHOO\": () => (/* binding */ YAHOO)\n/* harmony export */ });\n/*!\nCopyright (c) 2011, Yahoo! Inc. All rights reserved.\nCode licensed under the BSD License:\nhttp://developer.yahoo.com/yui/license.html\nversion: 2.9.0\n*/\nvar YAHOO = {};\nYAHOO.lang = {\n /**\n * Utility to set up the prototype, constructor and superclass properties to\n * support an inheritance strategy that can chain constructors and methods.\n * Static members will not be inherited.\n *\n * @method extend\n * @static\n * @param {Function} subc the object to modify\n * @param {Function} superc the object to inherit\n * @param {Object} overrides additional properties/methods to add to the\n * subclass prototype. These will override the\n * matching items obtained from the superclass\n * if present.\n */\n extend: function (subc, superc, overrides) {\n if (!superc || !subc) {\n throw new Error(\"YAHOO.lang.extend failed, please check that \" +\n \"all dependencies are included.\");\n }\n var F = function () { };\n F.prototype = superc.prototype;\n subc.prototype = new F();\n subc.prototype.constructor = subc;\n subc.superclass = superc.prototype;\n if (superc.prototype.constructor == Object.prototype.constructor) {\n superc.prototype.constructor = superc;\n }\n if (overrides) {\n var i;\n for (i in overrides) {\n subc.prototype[i] = overrides[i];\n }\n /*\n * IE will not enumerate native functions in a derived object even if the\n * function was overridden. This is a workaround for specific functions\n * we care about on the Object prototype.\n * @property _IEEnumFix\n * @param {Function} r the object to receive the augmentation\n * @param {Function} s the object that supplies the properties to augment\n * @static\n * @private\n */\n var _IEEnumFix = function () { }, ADD = [\"toString\", \"valueOf\"];\n try {\n if (/MSIE/.test(navigator.userAgent)) {\n _IEEnumFix = function (r, s) {\n for (i = 0; i < ADD.length; i = i + 1) {\n var fname = ADD[i], f = s[fname];\n if (typeof f === 'function' && f != Object.prototype[fname]) {\n r[fname] = f;\n }\n }\n };\n }\n }\n catch (ex) { }\n ;\n _IEEnumFix(subc.prototype, overrides);\n }\n }\n};\n\n\n//# sourceURL=webpack://JSEncrypt/./lib/lib/jsrsasign/yahoo.js?"); + +/***/ }), + +/***/ "./lib/version.json": +/*!**************************!*\ + !*** ./lib/version.json ***! + \**************************/ +/***/ ((module) => { + +eval("module.exports = {\"version\":\"3.1.0\"};\n\n//# sourceURL=webpack://JSEncrypt/./lib/version.json?"); + +/***/ }) + +/******/ }); +/************************************************************************/ +/******/ // The module cache +/******/ var __webpack_module_cache__ = {}; +/******/ +/******/ // The require function +/******/ function __webpack_require__(moduleId) { +/******/ // Check if module is in cache +/******/ if(__webpack_module_cache__[moduleId]) { +/******/ return __webpack_module_cache__[moduleId].exports; +/******/ } +/******/ // Create a new module (and put it into the cache) +/******/ var module = __webpack_module_cache__[moduleId] = { +/******/ // no module.id needed +/******/ // no module.loaded needed +/******/ exports: {} +/******/ }; +/******/ +/******/ // Execute the module function +/******/ __webpack_modules__[moduleId](module, module.exports, __webpack_require__); +/******/ +/******/ // Return the exports of the module +/******/ return module.exports; +/******/ } +/******/ +/************************************************************************/ +/******/ /* webpack/runtime/define property getters */ +/******/ (() => { +/******/ // define getter functions for harmony exports +/******/ __webpack_require__.d = (exports, definition) => { +/******/ for(var key in definition) { +/******/ if(__webpack_require__.o(definition, key) && !__webpack_require__.o(exports, key)) { +/******/ Object.defineProperty(exports, key, { enumerable: true, get: definition[key] }); +/******/ } +/******/ } +/******/ }; +/******/ })(); +/******/ +/******/ /* webpack/runtime/hasOwnProperty shorthand */ +/******/ (() => { +/******/ __webpack_require__.o = (obj, prop) => (Object.prototype.hasOwnProperty.call(obj, prop)) +/******/ })(); +/******/ +/******/ /* webpack/runtime/make namespace object */ +/******/ (() => { +/******/ // define __esModule on exports +/******/ __webpack_require__.r = (exports) => { +/******/ if(typeof Symbol !== 'undefined' && Symbol.toStringTag) { +/******/ Object.defineProperty(exports, Symbol.toStringTag, { value: 'Module' }); +/******/ } +/******/ Object.defineProperty(exports, '__esModule', { value: true }); +/******/ }; +/******/ })(); +/******/ +/************************************************************************/ +/******/ +/******/ // startup +/******/ // Load entry module and return exports +/******/ // This entry module can't be inlined because the eval devtool is used. +/******/ var __webpack_exports__ = __webpack_require__("./lib/index.js"); +/******/ __webpack_exports__ = __webpack_exports__.default; +/******/ +/******/ return __webpack_exports__; +/******/ })() +; +}); \ No newline at end of file diff --git a/device_home/service/relay-server.js b/device_home/service/relay-server.js index 82d2c52..e912c4f 100755 --- a/device_home/service/relay-server.js +++ b/device_home/service/relay-server.js @@ -1,51 +1,75 @@ "use strict"; -var WebSocketServer = require('ws').Server; +const io = require('socket.io'); +const JSEncryptLib = require('./jsencrypt'); const localClientIps = [ '1', '127.0.0.1' ]; const TAG = '[DeviceHome][relay-server.js]' const TO_ALL = 100; -let remoteClients = []; -let localClients = []; -let localClientMessageQueues = []; -var RelayServer = function(httpserver, options) { - var wsServer = new WebSocketServer({ server : httpserver }); +let remoteClients = {}; +let localClients = {}; +let localClientMessageQueues = {}; - wsServer.on('connection', function(ws, req) { - console.log("relay-service: connection", ws, req); +var getIp = function(rawIp) { + return rawIp.slice(rawIp.lastIndexOf(":") + 1); +} +var decrypt = function(msg, ws) { + const crypto = new JSEncryptLib(); + crypto.setPrivateKey(ws.request.session.serverPrivateKey); + console.log(`${TAG}[decrypt] encrypted : ${msg}`); + return crypto.decrypt(msg); +} +var encrypt = function(msg, ws, pkgId, clientPublicKeys) { + if (clientPublicKeys[pkgId] === undefined) + return false; + const ip = getIp(ws.handshake.address); + console.log(`${TAG}[encrypt] ip : ${ip}`); + const serverCrypto = new JSEncryptLib(); + serverCrypto.setPublicKey(clientPublicKeys[pkgId][ip]); + console.log(`${TAG}[encrypt] plain : ${msg}`); + return serverCrypto.encrypt(msg); +} +var addConnection = function(wsServer, pkgId, sessionMiddleware, clientPublicKeys) { + const namespace = wsServer.of(`/${pkgId}`); + namespace.use((socket, next) => { + sessionMiddleware(socket.request, {}, next); + }); + namespace.on('connection', ws => { + console.log(`${TAG} connection event : ${pkgId}`); // In case of local client, remoteAddress will be ::1 // In case of remote client, remoteAddress will be ::ffff:ipaddress // e.g.) ::ffff:192.168.0.21 - const rawIp = req.socket.remoteAddress; - const ip = rawIp.slice(rawIp.lastIndexOf(":") + 1); - const pkgId = req.url.slice(1); // get the substring after '/' from req.url + console.log(`${TAG} address : ${ws.handshake.address}`); + console.log(`${TAG} url : ${ws.handshake.url}`); + console.log(`${TAG} session id : ${ws.request.session.id}`); if (remoteClients[pkgId] === undefined) remoteClients[pkgId] = []; - if (localClientIps.includes(ip)) { - const TAG_LOCAL = `${TAG}[LocalClient]`; + if (localClientIps.includes(getIp(ws.handshake.address))) { + const TAG_LOCAL = `${TAG}[Local]`; console.log(`${TAG_LOCAL} connected from local`); localClients[pkgId] = ws; + console.log(`${TAG_LOCAL} remote length : ${remoteClients[pkgId].length}`); + if (!remoteClients[pkgId].length) { - console.log(`${TAG_LOCAL} connected : no client-clients`); + console.log(`${TAG_LOCAL} connected : no remote-clients`); } if (localClientMessageQueues[pkgId] !== undefined) { while (localClientMessageQueues[pkgId].length) { const msg = localClientMessageQueues[pkgId].shift(); - console.log(`${TAG_LOCAL}[message] #################################`); - console.log(`${TAG_LOCAL}[message] send pending msg : ${msg}`); - console.log(`${TAG_LOCAL}[message] #################################`); - ws.send(msg); + console.log(`${TAG_LOCAL} #################################`); + console.log(`${TAG_LOCAL} send pending msg : ${msg}`); + console.log(`${TAG_LOCAL} #################################`); + ws.emit('d2d_message', msg); } } - console.log(`${TAG_LOCAL} ws : ${ws}`); - ws.on('message', function(msg) { - console.log(`${TAG_LOCAL}[message] #################################`); - console.log(`${TAG_LOCAL}[message] msg : ${msg}`); - console.log(`${TAG_LOCAL}[message] #################################`); + ws.on('d2d_message', function(msg) { + console.log(`${TAG_LOCAL} #################################`); + console.log(`${TAG_LOCAL} on d2d message : ${msg}`); + console.log(`${TAG_LOCAL} #################################`); let myPkgId = null; for (let key in localClients) { @@ -56,6 +80,7 @@ var RelayServer = function(httpserver, options) { } let id = JSON.parse(msg).id; + console.log(`${TAG_LOCAL} id : ${id}`); if (id == -1) { // Do what need to handle in relay server only return; @@ -63,16 +88,32 @@ var RelayServer = function(httpserver, options) { if (!remoteClients[myPkgId].length) return; if (id == TO_ALL) { - for (let client of remoteClients[myPkgId]) - client.send(msg); + console.log(`${TAG_LOCAL} remoteClients length : ${remoteClients[myPkgId].length}`); + for (let client of remoteClients[myPkgId]) { + const encrypted = encrypt(msg, client, myPkgId, clientPublicKeys); + if (encrypted === false || encrypted === null) { + console.log("Error: Failed to encrypt message"); + return; + } + console.log(`${TAG_LOCAL} encrypted : ${encrypted}`); + client.emit('d2d_message', encrypted); + } } else { - if (id < remoteClients[myPkgId].length) - remoteClients[myPkgId][id].send(msg); + console.log(`${TAG_LOCAL} id : ${id}`); + if (id < remoteClients[myPkgId].length) { + msg = encrypt(msg, remoteClients[myPkgId][id], myPkgId, clientPublicKeys); + if (msg === false || msg === null) { + console.log("Error: Failed to encrypt message"); + return; + } + console.log(`${TAG_LOCAL} encrypted : ${msg}`); + remoteClients[myPkgId][id].emit('d2d_message', msg); + } } }); - ws.on('close', function(msg) { + ws.on('disconnect', function(msg) { console.log(`${TAG_LOCAL}[close] #################################`); - console.log(`${TAG_LOCAL}[close] msg : ${msg}`); + console.log(`${TAG_LOCAL}[close] on disconnect event : ${msg}`); console.log(`${TAG_LOCAL}[close] #################################`); let myPkgId = null; for (let key in localClients) { @@ -81,42 +122,55 @@ var RelayServer = function(httpserver, options) { break; } } - // remote local client localClients[myPkgId] = undefined; - console.log(`${TAG_LOCAL}[close] remoteClients[${myPkgId}] : ${remoteClients[myPkgId]}`); for (let remoteClient of remoteClients[myPkgId]) { console.log(`${TAG}[close local client] sent local_client_disconnect`); - remoteClient.send(JSON.stringify({ + let disconnection = JSON.stringify({ type: "local_client_disconnect", data: { totalcount: localClients.length, id: 0 }, id: -1 - })); + }); + disconnection = encrypt(disconnection, remoteClient, myPkgId, clientPublicKeys); + if (disconnection === false || disconnection === null) { + console.log("Error: Failed to encrypt message"); + return; + } + console.log(`${TAG_LOCAL} encrypted : ${disconnection}`); + remoteClient.emit('d2d_message', disconnection); } }); } else { - const TAG_REMOTE = `${TAG}[RemoteClient]`; + const TAG_REMOTE = `${TAG}[Remote]`; + const ip = getIp(ws.handshake.address); console.log(`${TAG_REMOTE} connected from ${ip}`); if (remoteClients[pkgId].indexOf(ws) == -1) { remoteClients[pkgId].push(ws); - let index = remoteClients[pkgId].length - 1; + const index = remoteClients[pkgId].length - 1; + console.log(`${TAG_REMOTE} pkgId : ${pkgId}`); + console.log(`${TAG_REMOTE} remote length : ${remoteClients[pkgId].length}`); + console.log(`${TAG_REMOTE} local length : ${Object.keys(localClients).length}`); + let res = JSON.stringify({type: "id", data: index, id: -1}); - ws.send(res); + res = encrypt(res, ws, pkgId, clientPublicKeys); + console.log(`${TAG_REMOTE} encrypted : ${res}`); + if (res === false || res === null) { + console.log("Error: Failed to encrypt message"); + return; + } + ws.emit('d2d_message', res); + console.log(`${TAG_REMOTE}[connection] localClients.length : ${localClients.length}`); - if (localClients[pkgId] === undefined || localClients.length === 0) { - console.log(`${TAG_REMOTE} connected : no server-client`); + if (localClients[pkgId] === undefined || Object.keys(localClients).length === 0) { + console.log(`${TAG_REMOTE} connected : no local-client`); } else { - localClients[pkgId].send(JSON.stringify({type: "new_client", data: index, id: -1})); + localClients[pkgId].emit('d2d_message', JSON.stringify({type: "new_client", data: index, id: -1})); } } - ws.on('message', function(msg) { - console.log(`${TAG_REMOTE}[message] #################################`); - console.log(`${TAG_REMOTE}[message] msg : ${msg}`); - console.log(`${TAG_REMOTE}[message] #################################`); - + ws.on('d2d_message', function(msg) { let myPkgId = null; for (let key in remoteClients) { if (remoteClients[key].indexOf(ws) != -1) { @@ -124,22 +178,31 @@ var RelayServer = function(httpserver, options) { break; } } + console.log(`${TAG_REMOTE} #################################`); + console.log(`${TAG_REMOTE} on d2d message : ${msg}`); + msg = decrypt(msg, ws); + console.log(`${TAG_REMOTE} #################################`); + if (msg === false || msg === null) { + console.log("Error: Failed to decrypt message"); + return; + } if (localClients[myPkgId]) { - localClients[myPkgId].send(msg); + console.log(`${TAG_REMOTE} decrypted : ${msg}`); + localClients[myPkgId].emit('d2d_message', msg); } else { - console.log(`${TAG_REMOTE}[message] #################################`); - console.log(`${TAG_REMOTE}[message] localClient is not ready`); - console.log(`${TAG_REMOTE}[message] #################################`); + console.log(`${TAG_REMOTE} #################################`); + console.log(`${TAG_REMOTE} localClient is not ready`); + console.log(`${TAG_REMOTE} #################################`); if (localClientMessageQueues[myPkgId] === undefined) localClientMessageQueues[myPkgId] = []; localClientMessageQueues[myPkgId].push(msg); - console.log(`${TAG_REMOTE}[message] localClient is not ready : ${localClientMessageQueues[myPkgId]}`); + console.log(`${TAG_REMOTE} localClient is not ready : ${localClientMessageQueues[myPkgId]}`); } }); - ws.on('close', function(msg) { + ws.on('disconnect', function(msg) { console.log(`${TAG_REMOTE}[close] #################################`); - console.log(`${TAG_REMOTE}[close] msg : ${msg}`); + console.log(`${TAG_REMOTE}[close] on disconnect event : ${msg}`); console.log(`${TAG_REMOTE}[close] #################################`); let myPkgId = null; for (let key in remoteClients) { @@ -148,14 +211,14 @@ var RelayServer = function(httpserver, options) { break; } } - // remote remote client + // remote client let index = remoteClients[myPkgId].indexOf(ws); remoteClients[myPkgId][index] = undefined; remoteClients[myPkgId].splice(index, 1); console.log(`${TAG_REMOTE}[close] localClients[${myPkgId}] : ${localClients[myPkgId]}`); if (localClients[myPkgId] !== undefined) { console.log(`${TAG_REMOTE}[close] sent remote_client_disconnect`); - localClients[myPkgId].send(JSON.stringify({ + localClients[myPkgId].emit('d2d_message', JSON.stringify({ type: "remote_client_disconnect", data: { totalcount: remoteClients[myPkgId].length, @@ -167,6 +230,15 @@ var RelayServer = function(httpserver, options) { }); } }); +} +var RelayServer = function(httpserver, dataApps, sessionMiddleware, clientPublicKeys) { + const wsServer = io.listen(httpserver, { + log: true, + origins: '*:*' + }); + for (var j = 0; j < dataApps.length; j++) { + addConnection(wsServer, dataApps[j].d2dApp.appPkgID, sessionMiddleware, clientPublicKeys); + } }; module.exports = RelayServer; diff --git a/device_home/service/security.js b/device_home/service/security.js index 078860b..93aebb6 100755 --- a/device_home/service/security.js +++ b/device_home/service/security.js @@ -5,8 +5,6 @@ const TAG = '[DeviceHome][security.js]'; module.exports.Security = class Security { constructor() { - this.privateKey = ''; - this.publicKey = ''; } getKeyPairPromise(pincode) { @@ -14,7 +12,7 @@ module.exports.Security = class Security { return new Promise((resolve, reject) => { console.log(`${TAG} Generating key will take some time..`); generateKeyPair("rsa", { - modulusLength: 1024, + modulusLength: 2048, publicKeyEncoding: { type: "spki", format: "pem" @@ -38,8 +36,8 @@ module.exports.Security = class Security { awaitKeyPair(req) { return this.getKeyPairPromise(req).then(r => { - req.session.privateKey = r.privateKey; - req.session.publicKey = r.publicKey; + req.session.serverPrivateKey = r.privateKey; + req.session.serverPublicKey = r.publicKey; console.log(`${TAG}[awaitKeyPair] RSA keys are generated`); }).catch(err => { console.log(`${TAG} Error : ${err}`); diff --git a/device_home/service/service.js b/device_home/service/service.js index aa41ef6..c7206f6 100755 --- a/device_home/service/service.js +++ b/device_home/service/service.js @@ -5,10 +5,20 @@ const http = require('http'); const path = require("path"); const relayServer = require('./relay-server.js'); const session = require('express-session'); +const cookieParser = require('cookie-parser'); const EventEmitter = require('events'); const XMLHttpRequest = require("xmlhttprequest").XMLHttpRequest; const crypto = require('crypto'); const { Security } = require('./security.js'); +const JSEncryptLib = require('./jsencrypt'); +const sessionMiddleware = session({ + resave: true, + saveUninitialized: false, + secret: crypto.randomBytes(16).toString('base64'), + cookie: { + httpOnly: true, + secure: false, +}}); const PUBLIC_DOMAIN = 'http://219.254.222.198'; const TAG = '[DeviceHome][service.js]' @@ -30,17 +40,16 @@ var httpserver, evtEmit; var platform_app_path = '/opt/usr/globalapps'; var serverAppId = ''; var urlParam = ''; -var pincode = ''; -var JSEncryptLib = require('./jsencrypt'); var g = { port: 9000, baseDir: __dirname, }; var tryCount = 0; var sip; +var clientPublicKeys = {}; -// Watch together doesn't use pincode just for demo. -var MODE_WT = false; +// The pincode is disabled just for demo. +var DEMO_MODE = false; function addD2Ddata(appPkgID, appAppID, appName, iconPath) { let app = {}; @@ -83,20 +92,23 @@ function setData() { } } -function getAppList() { - if (tizen.application) { - try { - tizen.application.getAppsInfo(function(applications) { - apps = applications; - setData(); - getWebclipsManifest(); - }); - } catch (err) { - return false; - } - return true; +function getAppList(resolve) { + try { + tizen.application.getAppsInfo(function(applications) { + apps = applications; + setData(); + getWebclipsManifest(); + resolve(true); + }); + } catch (err) { + resolve(false); } - return false; +} + +function promiseGetAppList() { + return new Promise(resolve => { + getAppList(resolve); + }) } function getWebclipsManifestByApp(app) { @@ -220,8 +232,8 @@ function comparePincode(req, res, encrypted) { console.log(`${TAG} comparePincode`); console.log(`${TAG} encrypted : ${encrypted}`); // Decrypt pincode using private key - const decrypt = new JSEncryptLib.JSEncrypt(); - decrypt.setPrivateKey(req.session.privateKey); + const decrypt = new JSEncryptLib(); + decrypt.setPrivateKey(req.session.serverPrivateKey); const decrypted = decrypt.decrypt(encrypted); console.log(`${TAG} decrypted : ${decrypted}`); @@ -233,11 +245,13 @@ function comparePincode(req, res, encrypted) { if (!req.session.ip || req.session.ip === undefined) { req.session.ip = sip; } + hashing(req, res); console.log(`${TAG} pincode passed`); } tryCount++; if (tryCount === 5 && !pincode_passed) { tryCount = 0; + displayPincode(req); res.send('retry'); } else { res.send(pincode_passed); @@ -254,6 +268,10 @@ async function displayPincode(req) { webapis.postPlainNotification("Input Pincode: ", req.session.pincode, 10); } +function getIp(rawIp) { + return rawIp.slice(rawIp.lastIndexOf(":") + 1); +} + var HTTPserverStart = function() { evtEmit = new EventEmitter(); const app = express(); @@ -262,6 +280,7 @@ var HTTPserverStart = function() { app.set('views', `${g.baseDir}/../`); app.disable('x-powered-by'); app.use('/pincode', express.static(`${g.baseDir}/../pincode`)); + app.use(cookieParser()); // For post method app.use(express.urlencoded({ @@ -269,37 +288,40 @@ var HTTPserverStart = function() { })); app.use(express.json()); // For session management - app.use(session({ - resave: false, - saveUninitialized: true, - secret: String(crypto.randomBytes(20)), - cookie: { - httpOnly: true, - secure: false, - }, - })); + app.use(sessionMiddleware); var sessionChecker = function(req, res, next) { console.log(`${TAG} url : ${req.url}`); console.log(`${TAG} session id : ${req.session.id}`); - const rawIp = req.socket.remoteAddress; - const ip = rawIp.slice(rawIp.lastIndexOf(":") + 1); - console.log(`${TAG} ip : ${ip}`); - sip = ip; + sip = getIp(req.socket.remoteAddress); + console.log(`${TAG} ip : ${sip}`); // The pincode page and local connections are allowed without session. - if (req.session.ip !== ip && + if (req.session.ip !== sip && req.session.ip === undefined && !req.url.includes('id=') && !req.url.includes('/pincode/') && - !non_ip_list.includes(ip)) { + !non_ip_list.includes(sip) && + req.session.exchange !== req.cookies.exchange) { console.log(`${TAG} Not valid access`); res.redirect(401, PUBLIC_DOMAIN); + } else if (hasFilename(req.url)) { + next(); } else { + hashing(req, res); next(); } }; - if (!MODE_WT) + var hasFilename = function(url) { + if (url) { + var m = url.toString().match(/.*\/(.+?)\./); + if (m && m.length > 1) + return true; + } + return false; + } + + if (!DEMO_MODE) app.use(sessionChecker); const appProxy = require('./app_proxy'); @@ -374,13 +396,16 @@ var HTTPserverStart = function() { res.sendFile(fullPath); }); - app.get('/', function(req, res) { + app.get('/', async function(req, res) { console.log(`${TAG} URL parameter : ${req.originalUrl}`); urlParam = req.originalUrl; - if (!MODE_WT) { + if (!DEMO_MODE) { res.redirect("/pincode/pincode.html"); } else { + console.log(`${TAG} Set session ip and RSA keys in WT mode`); + req.session.ip = getIp(req.socket.remoteAddress); + await security.awaitKeyPair(req); if (req.query.roomId !== undefined) { // FIXME: Remove app logic here res.render("client/invited.html"); @@ -416,7 +441,11 @@ var HTTPserverStart = function() { app.get('/pincode/publicKey', async (req, res) => { tryCount = 0; await displayPincode(req); - res.send(req.session.publicKey); + res.send(req.session.serverPublicKey); + }); + + app.get('/pincode/getServerPublicKey', (req, res) => { + res.send(req.session.serverPublicKey); }); app.post('/pincode/pinCodeToServer', express.json(), (req, res) => { @@ -426,6 +455,15 @@ var HTTPserverStart = function() { comparePincode(req, res, resultData); }); + app.post('/pincode/publicKeyToServer', express.json(), (req, res) => { + const pkgId = req.body['pkgId'] + if (clientPublicKeys[pkgId] === undefined) + clientPublicKeys[pkgId] = {}; + const ip = req.session.ip.toString(); + clientPublicKeys[pkgId][ip] = req.body['publicKey']; + console.log(`${TAG} client publicKey : ${clientPublicKeys[pkgId][ip]}`); + }); + app.post('/d2d', (req, res) => { if (req.session.ip !== undefined) { console.log(`${TAG} client.html`); @@ -464,16 +502,26 @@ var HTTPserverStart = function() { } } }); - relayServer(httpserver); + relayServer(httpserver, dataApps, sessionMiddleware, clientPublicKeys); }; -module.exports.getUrlParam = function() { +function hashing(req, res) { + const hash = crypto.randomBytes(16).toString('base64'); + console.log(`${TAG} hash : ${hash}`); + + res.cookie('exchange', hash, { + httpOnly: true + }); + req.session.exchange = hash; +} + +module.exports.getUrlParam = function () { console.log(`${TAG} getUrlParam is called`); return urlParam; }; -module.exports.onStart = function() { - getAppList(); +module.exports.onStart = async function() { + await promiseGetAppList(); HTTPserverStart(); setPackageInfoEventListener(); console.log(`${TAG} onStart is called in DNS Resolver`); -- 2.7.4 From f62edda184d65f902c5801528ed7c082d0b90556 Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Wed, 23 Jun 2021 11:21:55 +0900 Subject: [PATCH 07/16] Fix an error of 'Object has been destroyed' When app is terminate by SIGTERM or tizen.application...exit(), There comes a TypeError 'Object has been destroyed' suspend() will be called again on quit() for backgroun-runnable apps, but since this.mainWindow can be already destroyed, below code can throw exception with destroyed object 'this.mainWindow' - addonManager.emit('lcSuspend', this.mainWindow.id); It is enough to call setEnable() for suspending (if window is alive) Change-Id: Ie2e99cf74ca412902e4456901dc8350f038e3067 Signed-off-by: DongHyun Song --- wrt_app/src/web_application.ts | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/wrt_app/src/web_application.ts b/wrt_app/src/web_application.ts index 53e0899..84be283 100644 --- a/wrt_app/src/web_application.ts +++ b/wrt_app/src/web_application.ts @@ -283,10 +283,11 @@ export class WebApplication { if (this.suspended || this.inQuit) return; console.log('WebApplication : suspend'); - addonManager.emit('lcSuspend', this.mainWindow.id); this.suspended = true; - if (this.windowList.length > 0) + if (this.windowList.length > 0) { + addonManager.emit('lcSuspend', this.mainWindow.id); this.windowList[this.windowList.length - 1].hide(); + } this.flushData(); if (this.profileDelegate.canIgnoreSuspend()) return; @@ -318,10 +319,11 @@ export class WebApplication { quit() { console.log('WebApplication : quit'); this.flushData(); - this.windowList.forEach((window) => window.removeAllListeners()); + this.windowList.forEach((window) => { + window.removeAllListeners(); + window.setEnabled(false); + }); this.inQuit = false; - if (!this.suspended) - this.suspend(); } beforeQuit() { -- 2.7.4 From 715718671e3494ae4c2e2b834f564547174f8491 Mon Sep 17 00:00:00 2001 From: liwei Date: Thu, 24 Jun 2021 18:07:43 +0800 Subject: [PATCH 08/16] [Tizen6.5 Migration]Skip logic of check firstrender in resume Resume() is invoked after window show, and window show is called in "ready-to-show", in "ready-to-show" event, firstrender has been set to true, so check firstrender logic can be skipped in resume. Reference Patch: https://review.tizen.org/gerrit/260240/ Change-Id: If8be2926596965e75fe2324a87f4a2ccd0de084f Signed-off-by: liwei --- wrt_app/src/web_application.ts | 6 ------ 1 file changed, 6 deletions(-) diff --git a/wrt_app/src/web_application.ts b/wrt_app/src/web_application.ts index 84be283..8a39aaa 100644 --- a/wrt_app/src/web_application.ts +++ b/wrt_app/src/web_application.ts @@ -34,7 +34,6 @@ export class WebApplication { backgroundSupport: boolean = wrt.getBackgroundSupport(); debugPort: number = 0; - firstRendered: boolean = false; contentSrc: string = ''; loadFinished: boolean = false; pendingCallbacks: Map = new Map(); @@ -184,7 +183,6 @@ export class WebApplication { if (this.showTimer) clearTimeout(this.showTimer); wrt.hideSplashScreen(0); - this.firstRendered = true; if (this.profileDelegate.isPreloading()) return; this.show(); @@ -307,10 +305,6 @@ export class WebApplication { this.suspended = false; addonManager.emit('lcResume', this.mainWindow.id); - if (!this.firstRendered) { - console.log('WebApplication : resume firstRendered is false'); - return; - } if (!this.backgroundRunnable()) this.windowList.forEach((window) => window.setEnabled(true)); this.windowList[this.windowList.length - 1].show(); -- 2.7.4 From 78bf70348608dfb192f43661fa0093da6cce8b5a Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Fri, 25 Jun 2021 14:38:55 +0900 Subject: [PATCH 09/16] [VideoSplash] Fix focus issue of VSS and refactors [PROBLEM] Before the update to VSS's player, the WRT.js could call WRT.hideSplashScreen(...), with one window show (after 'ready-to-show'). With VSS player reacting to focus steal, now showing the window will result in premature playback stop. [SOLUTION] With change in WRT interface in libchromium the WebApplication can now check, if the reason for hiding was valid. Side effect is, if the RENDERED was not a valid reason to hide a window, the window is not shown at any other event. The additional show() is therefore added to LOADFINISHED and CUSTOM (VIDEOFINISHED and CUSTOM's show() is already in the Chromium patch). NOTE: part of this change was provided in Chromium project as change [259340][1]. To have current change compile, you either have to have chromium RPM with its change, or -- after first unsuccessfull build -- go to your GBS scratch area, into /usr/include/wrt/ and edit the native_wrtjs.d.ts to have WRT.hideSplashScreen method return `boolean`. [1]: https://review.tizen.org/gerrit/c/259340 Change-Id: Id63f6b4192cdc9da8da1e4ff0296f11bc15b10b3 Bug-Id: https://cam.sprc.samsung.pl/browse/WPMEDMAIN-2915 Signed-off-by: Marcin Zdun Signed-off-by: DongHyun Song --- wrt_app/common/web_application_delegate.ts | 1 - wrt_app/src/runtime.ts | 2 ++ wrt_app/src/tv/web_application_tv.ts | 12 ++------ wrt_app/src/web_application.ts | 48 +++++++++++++++++++++++++----- 4 files changed, 44 insertions(+), 19 deletions(-) diff --git a/wrt_app/common/web_application_delegate.ts b/wrt_app/common/web_application_delegate.ts index b31a4d9..8d80b78 100644 --- a/wrt_app/common/web_application_delegate.ts +++ b/wrt_app/common/web_application_delegate.ts @@ -44,5 +44,4 @@ export class WebApplicationDelegate { needShowTimer() { return true; } onDidFinishLoad() { } profileName() { return 'common' } - show() { } } diff --git a/wrt_app/src/runtime.ts b/wrt_app/src/runtime.ts index 3a1d846..2f8a850 100644 --- a/wrt_app/src/runtime.ts +++ b/wrt_app/src/runtime.ts @@ -109,6 +109,8 @@ class Runtime { } else if (type === 'stopService') { require('../common/service_manager').stopService(app_id); event.preventDefault(); + } else if (type === 'hideSplashScreen') { + this.webApplication?.hideSplashScreen(params[0]); } }); diff --git a/wrt_app/src/tv/web_application_tv.ts b/wrt_app/src/tv/web_application_tv.ts index bbda5e2..ade4147 100644 --- a/wrt_app/src/tv/web_application_tv.ts +++ b/wrt_app/src/tv/web_application_tv.ts @@ -116,12 +116,8 @@ Then you can get profile log from the initial loading.`; } private handlePreloadState(launchMode: string) { - if (this.preloadStatus === 'preload') { - this.show(); - } else { - if (launchMode != 'backgroundAtStartup') - this.preloadStatus = 'none'; - } + if (this.preloadStatus === 'preload' || launchMode != 'backgroundAtStartup') + this.preloadStatus = 'none'; } backgroundExecutable() { @@ -136,10 +132,6 @@ Then you can get profile log from the initial loading.`; return false; } - show() { - this.preloadStatus = 'none'; - } - canIgnoreSuspend() { if (this.launchMode == 'runningAsForeground' || this.launchMode == 'runningAsBackground') { diff --git a/wrt_app/src/web_application.ts b/wrt_app/src/web_application.ts index 8a39aaa..4d4872a 100644 --- a/wrt_app/src/web_application.ts +++ b/wrt_app/src/web_application.ts @@ -42,6 +42,7 @@ export class WebApplication { windowList: Electron.BrowserWindow[] = []; inQuit: boolean = false; profileDelegate: WebApplicationDelegate; + splashShown: boolean = false; constructor(options: RuntimeOption) { if (wrt.tv) { @@ -177,15 +178,42 @@ export class WebApplication { }; } + hideSplashScreen(reason: string) { + switch (reason) { + case 'first-paint': { + if (wrt.hideSplashScreen(0) !== false) + this.show(); + break; + } + case 'complete': { + if (wrt.hideSplashScreen(1) !== false) + this.show(); + break; + } + case 'custom': { + if (wrt.hideSplashScreen(2) !== false) + this.show(); + break; + } + case 'video-finished': { + this.show(); + break; + } + default: + break; + } + } + private setupMainWindowEventListener() { this.mainWindow.once('ready-to-show', () => { console.log('mainWindow ready-to-show'); if (this.showTimer) clearTimeout(this.showTimer); - wrt.hideSplashScreen(0); - if (this.profileDelegate.isPreloading()) - return; - this.show(); + + if (this.splashShown) + this.hideSplashScreen('first-paint'); + else + this.show(); }); this.mainWindow.webContents.on('did-start-loading', () => { @@ -196,7 +224,9 @@ export class WebApplication { this.mainWindow.webContents.on('did-finish-load', () => { console.log('webContents did-finish-load'); this.loadFinished = true; - wrt.hideSplashScreen(1); + if (this.splashShown) + this.hideSplashScreen('complete'); + addonManager.emit('contentDidFinishLoad', this.mainWindow.id); if (wrt.isIMEWebApp()) { this.activateIMEWebHelperClient(); @@ -219,8 +249,8 @@ export class WebApplication { if (this.profileDelegate.isPreloading()) return; - let splashShown = wrt.showSplashScreen(); - if (splashShown || !this.profileDelegate.needShowTimer()) + this.splashShown = wrt.showSplashScreen(); + if (this.splashShown || !this.profileDelegate.needShowTimer()) return; this.showTimer = setTimeout(() => { @@ -363,6 +393,9 @@ export class WebApplication { } show() { + if (this.profileDelegate.isPreloading()) { + return; + } console.log('WebApplication : show'); if (this.profileDelegate.backgroundExecutable()) { console.log('skip showing while backgroundExecution mode'); @@ -373,7 +406,6 @@ export class WebApplication { this.windowList[this.windowList.length - 1].moveTop(); } } - this.profileDelegate.show(); } private closeWindows() { -- 2.7.4 From 3d187f96060e9c367e861017b61cef832c9aa163 Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Fri, 4 Jun 2021 11:32:21 +0900 Subject: [PATCH 10/16] [Service][Workaround] Make singleton worker thread before app start This patch will make singleton webapi worker thread ahead of app launching to keep it 'User' smack label. There are lots usage of putting message at singleton worker thread by - TaskQueue::GetInstance().Queue() - TaskQueue::GetInstance().Async() tizen.systeminfo.getPropertyValue() is one of API to use TaskQueue singleton instance. + remove unnecessary log Related patch of filesystem webapi worker issue: https://review.tizen.org/gerrit/#/c/platform/core/api/webapi-plugins/+/259382/ Change-Id: I7e0abe5e93335d2798bc388f22a88aff754d8d2b Signed-off-by: DongHyun Song --- wrt_app/common/service_runner.ts | 13 +++++++++---- wrt_app/service/device_api_router.ts | 1 - 2 files changed, 9 insertions(+), 5 deletions(-) diff --git a/wrt_app/common/service_runner.ts b/wrt_app/common/service_runner.ts index 3b5c308..93be76e 100644 --- a/wrt_app/common/service_runner.ts +++ b/wrt_app/common/service_runner.ts @@ -78,16 +78,21 @@ export function start(id: string, filename: string) { console.log(`serviceType : ${global['serviceType']}`) new DeviceAPIRouter(id, isGlobalService()); + // this is workaround solution to make webapis singleton worker + // ahead of dropThreadPrivilege() + global.tizen.systeminfo.getPropertyValue("CPU", () => { }, () => { }); + + // This is for awaking up uv loop. + dummyTimer = setInterval(() => { + checkLauncherAlive(id); + }, 100); + if (isServiceApplication()) { registerExtensionResolver(id); filename = wrt.getStartServiceFile(id); console.log(`start global service file: ${filename}`); } - // This is for awaking up uv loop. - dummyTimer = setInterval(() => { - checkLauncherAlive(id); - }, 100); printAppControlData(id); try { diff --git a/wrt_app/service/device_api_router.ts b/wrt_app/service/device_api_router.ts index 3347e61..ae2fd53 100644 --- a/wrt_app/service/device_api_router.ts +++ b/wrt_app/service/device_api_router.ts @@ -311,7 +311,6 @@ export class DeviceAPIRouter { injectVirtualRootResolver(func: Function) { return (...args: any[]) => { - console.log('arguments : ' + args); if (args.length && !(args[0] === null || args[0] === undefined)) { args[0] = wrt.resolveVirtualRoot(this.getServiceId(), args[0]); console.log('updated argument[0] : ' + args[0]); -- 2.7.4 From 659ec643fbe21332e464201206a0e70bdffd90a7 Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Wed, 7 Jul 2021 17:53:21 +0900 Subject: [PATCH 11/16] [Service] Change a way to apply virtual path Not only tizen.filesystem, File object of webapis can use virtual path. But wrtjs side cannot access File object prototype directly Thus, basically, if we can change virtual path map in webapis side, that is best solution. Reference: https://review.tizen.org/gerrit/#/c/platform/core/api/webapi-plugins/+/260943/2 Change-Id: I858ebe853ddd719515dc30616f8f92d8ba91ace1 Signed-off-by: DongHyun Song --- wrt_app/service/device_api_router.ts | 27 +++++---------------------- 1 file changed, 5 insertions(+), 22 deletions(-) diff --git a/wrt_app/service/device_api_router.ts b/wrt_app/service/device_api_router.ts index ae2fd53..5dda076 100644 --- a/wrt_app/service/device_api_router.ts +++ b/wrt_app/service/device_api_router.ts @@ -309,29 +309,12 @@ export class DeviceAPIRouter { } } - injectVirtualRootResolver(func: Function) { - return (...args: any[]) => { - if (args.length && !(args[0] === null || args[0] === undefined)) { - args[0] = wrt.resolveVirtualRoot(this.getServiceId(), args[0]); - console.log('updated argument[0] : ' + args[0]); - } - return func.apply(global.tizen.filesystem, args); - } - } - refineFilesystemApis() { - global.tizen.filesystem.resolve = this.injectVirtualRootResolver(global.tizen.filesystem.resolve); - global.tizen.filesystem.listDirectory = this.injectVirtualRootResolver(global.tizen.filesystem.listDirectory); - global.tizen.filesystem.createDirectory = this.injectVirtualRootResolver(global.tizen.filesystem.createDirectory); - global.tizen.filesystem.deleteDirectory = this.injectVirtualRootResolver(global.tizen.filesystem.deleteDirectory); - global.tizen.filesystem.openFile = this.injectVirtualRootResolver(global.tizen.filesystem.openFile); - global.tizen.filesystem.deleteFile = this.injectVirtualRootResolver(global.tizen.filesystem.deleteFile); - global.tizen.filesystem.moveFile = this.injectVirtualRootResolver(global.tizen.filesystem.moveFile); - global.tizen.filesystem.copyFile = this.injectVirtualRootResolver(global.tizen.filesystem.copyFile); - global.tizen.filesystem.isFile = this.injectVirtualRootResolver(global.tizen.filesystem.isFile); - global.tizen.filesystem.toURI = this.injectVirtualRootResolver(global.tizen.filesystem.toURI); - global.tizen.filesystem.isDirectory = this.injectVirtualRootResolver(global.tizen.filesystem.isDirectory); - global.tizen.filesystem.pathExists = this.injectVirtualRootResolver(global.tizen.filesystem.pathExists); + let virtualPath = ['wgt-private', 'wgt-private-tmp', 'wgt-package']; + virtualPath.forEach(name => { + let realPath = wrt.resolveVirtualRoot(this.getServiceId(), name); + global.tizen.filesystem.setVirtualPath?.(name, realPath, 'INTERVAL', 'MOUNTED'); + }); } refineXwalkUtilApis() { -- 2.7.4 From a41cfa5d222c8ff12ee5fa869c5cdfe2235a271f Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Wed, 7 Jul 2021 14:02:54 +0900 Subject: [PATCH 12/16] [Service] Move service files to service/ folder It is more proper that service*.ts are placed in service/ directory. Change-Id: I5bd14d66d3196e4a1e32dd5af8b07eb68035ba26 Signed-off-by: DongHyun Song --- wrt_app/service/main.ts | 2 +- wrt_app/{common => service}/service_manager.ts | 0 wrt_app/{common => service}/service_runner.ts | 6 +++--- 3 files changed, 4 insertions(+), 4 deletions(-) rename wrt_app/{common => service}/service_manager.ts (100%) rename wrt_app/{common => service}/service_runner.ts (96%) diff --git a/wrt_app/service/main.ts b/wrt_app/service/main.ts index 6e6c222..b0292ae 100755 --- a/wrt_app/service/main.ts +++ b/wrt_app/service/main.ts @@ -18,7 +18,7 @@ import '../common/init'; import { wrt } from '../browser/wrt'; -import * as ServiceManager from '../common/service_manager'; +import * as ServiceManager from './service_manager'; wrt.on('start-service', (event: any, internal_id: string) => { console.log(`start service app : ${internal_id}`); diff --git a/wrt_app/common/service_manager.ts b/wrt_app/service/service_manager.ts similarity index 100% rename from wrt_app/common/service_manager.ts rename to wrt_app/service/service_manager.ts diff --git a/wrt_app/common/service_runner.ts b/wrt_app/service/service_runner.ts similarity index 96% rename from wrt_app/common/service_runner.ts rename to wrt_app/service/service_runner.ts index 93be76e..c028e03 100644 --- a/wrt_app/common/service_runner.ts +++ b/wrt_app/service/service_runner.ts @@ -1,6 +1,6 @@ -import './init'; -import * as XWalkExtension from './wrt_xwalk_extension'; -import { DeviceAPIRouter } from '../service/device_api_router'; +import '../common/init'; +import * as XWalkExtension from '../common/wrt_xwalk_extension'; +import { DeviceAPIRouter } from './device_api_router'; import { isMainThread, parentPort, workerData } from 'worker_threads'; import { wrt } from '../browser/wrt'; -- 2.7.4 From 24027515bc2fbb12f6020608d242d1df438fe816 Mon Sep 17 00:00:00 2001 From: "Dong Hyun, Song" Date: Tue, 13 Jul 2021 11:10:29 +0900 Subject: [PATCH 13/16] [Service] Fix virtual path issue Remove optional chaining. getter was disabled by webapis side. Change-Id: Ia619f6ca6b933e686f3444afe2243c284a1e8768 Signed-off-by: Dong Hyun, Song --- wrt_app/service/device_api_router.ts | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/wrt_app/service/device_api_router.ts b/wrt_app/service/device_api_router.ts index 5dda076..1799792 100644 --- a/wrt_app/service/device_api_router.ts +++ b/wrt_app/service/device_api_router.ts @@ -310,11 +310,15 @@ export class DeviceAPIRouter { } refineFilesystemApis() { - let virtualPath = ['wgt-private', 'wgt-private-tmp', 'wgt-package']; - virtualPath.forEach(name => { - let realPath = wrt.resolveVirtualRoot(this.getServiceId(), name); - global.tizen.filesystem.setVirtualPath?.(name, realPath, 'INTERVAL', 'MOUNTED'); - }); + try { + let virtualPath = ['wgt-private', 'wgt-private-tmp', 'wgt-package']; + virtualPath.forEach(name => { + let realPath = wrt.resolveVirtualRoot(this.getServiceId(), name); + global.tizen.filesystem.setVirtualPath(name, realPath, 'INTERVAL', 'MOUNTED'); + }); + } catch (e) { + console.log(`refineFilesystemApis has an error ${e}`); + } } refineXwalkUtilApis() { -- 2.7.4 From e88a4d708b9048f997b5c27f626bef9de277eb03 Mon Sep 17 00:00:00 2001 From: liwei Date: Wed, 7 Jul 2021 20:39:37 +0800 Subject: [PATCH 14/16] [Service][Builtin] Notify WAS module install app This built-in service support W3C AppManifest installation, notify webappservice module to install app, then this app can be shown in apps store. Native side patch https://review.tizen.org/gerrit/260966/ Change-Id: If9d0d476a49916be5ff6e0ff6f85485ceaeb3466 Signed-off-by: liwei --- wrt_app/service/builtins/appmanifest_loader.ts | 19 ++++--------------- 1 file changed, 4 insertions(+), 15 deletions(-) diff --git a/wrt_app/service/builtins/appmanifest_loader.ts b/wrt_app/service/builtins/appmanifest_loader.ts index 2c8597b..3743501 100644 --- a/wrt_app/service/builtins/appmanifest_loader.ts +++ b/wrt_app/service/builtins/appmanifest_loader.ts @@ -128,22 +128,11 @@ function cleanUpAndQuit(appName: string) { } function installWgt(appName: string) { - let onInstallation = { - onprogress: (packageId: string, percentage: string) => { - console.log("On installation(" + packageId + ") : progress(" + percentage + ")"); - }, - oncomplete: (packageId: string) => { - console.log("Installation(" + packageId + ") Complete"); - wrt.postPlainNotification(appName, 'Install Success', 5); - cleanUpAndQuit(appName); - } - }; let wgtPath = `${baseWorkingDir}/${appName}/${appName}.wgt`; - console.log(`wgtPath: ${wgtPath}`); - global.tizen.package.install(wgtPath, onInstallation, (err: any) => { - console.log("Error occurred on installation : " + err.name); - cleanUpAndQuit(appName); - }); + let installinfo = "{\"app_id\":\"" + appName + "\",\"pkg_path\":\"" + wgtPath + "\"}"; + console.log(`installWgt info: ${installinfo}`); + wrt.notifyInstall(installinfo); + process.exit(); } function makeWgt(appName: string) { -- 2.7.4 From 3da9a4868f0a5ee3962f985f63e9fa979cf07a09 Mon Sep 17 00:00:00 2001 From: "DongHyun, Song" Date: Wed, 14 Jul 2021 13:57:53 +0900 Subject: [PATCH 15/16] [Service] Add wrt.setServiceAppId() To set app id by tid base, calls wrt.setServiceAppId() at first. Related patch: https://review.tizen.org/gerrit/#/c/platform/framework/web/chromium-efl/+/261259/ Change-Id: Idc38d5b179fe71fdc264564e03aaf4a432bf2a87 Signed-off-by: DongHyun, Song --- wrt_app/service/device_api_router.ts | 2 -- wrt_app/service/service_runner.ts | 4 ++-- 2 files changed, 2 insertions(+), 4 deletions(-) diff --git a/wrt_app/service/device_api_router.ts b/wrt_app/service/device_api_router.ts index 1799792..2c9c051 100644 --- a/wrt_app/service/device_api_router.ts +++ b/wrt_app/service/device_api_router.ts @@ -239,8 +239,6 @@ export class DeviceAPIRouter { this.funcRequestedAppcontrol = this.currentApplication.getRequestedAppControl; this.currentApplication.getRequestedAppControl = () => { console.log(`Routing - getRequestedAppControl() : ${this.getServiceId()}`); - if (wrt.tv) - wrt.tv.setCurrentApplication(this.getServiceId()); return this.funcRequestedAppcontrol(); } return this.currentApplication; diff --git a/wrt_app/service/service_runner.ts b/wrt_app/service/service_runner.ts index c028e03..1fd2080 100644 --- a/wrt_app/service/service_runner.ts +++ b/wrt_app/service/service_runner.ts @@ -67,6 +67,7 @@ let checkLauncherAlive = (id: string) => { } export function start(id: string, filename: string) { + wrt.setServiceAppId(id); XWalkExtension.initialize(); XWalkExtension.setRuntimeMessageHandler((type, data) => { if (type === 'tizen://exit') { @@ -93,13 +94,12 @@ export function start(id: string, filename: string) { console.log(`start global service file: ${filename}`); } - printAppControlData(id); - try { let ids = id.split(':'); let serviceId = ids[0]; let packageId = global.webapis.getPackageId(); wrt.security?.dropThreadPrivilege(packageId, serviceId); + printAppControlData(id); app = require(filename); if (app.onStart !== undefined) { -- 2.7.4 From aca24fead8299939d54e196ba78a0ec17606eff7 Mon Sep 17 00:00:00 2001 From: DongHyun Song Date: Mon, 12 Apr 2021 16:33:52 +0900 Subject: [PATCH 16/16] [Service][appmanifest] Fix app id Making same app id by its URL, otherwise duplicate apps cane be created. Change-Id: I99cebbfff38c191364ab18f1d9cd8709fef108b0 Signed-off-by: DongHyun Song --- wrt_app/service/builtins/appmanifest_loader.ts | 19 +++++++++++-------- 1 file changed, 11 insertions(+), 8 deletions(-) diff --git a/wrt_app/service/builtins/appmanifest_loader.ts b/wrt_app/service/builtins/appmanifest_loader.ts index 3743501..7037b35 100644 --- a/wrt_app/service/builtins/appmanifest_loader.ts +++ b/wrt_app/service/builtins/appmanifest_loader.ts @@ -46,8 +46,8 @@ async function downloadIcon(iconSrc: string, iconFile: string) { }); } -function copyManifest(filePath: string, manifestData: string) { - fs.writeFileSync(filePath, manifestData); +function makeFileSync(file: string, data: string) { + fs.writeFileSync(file, data); } function concatWithBaseUrl(url: string, baseUrl: string) { @@ -95,28 +95,31 @@ function handleStartUrl(appName: string, manifestUrl: string, manifest: any) { let startUrl = concatWithBaseUrl(manifest['start_url'], manifestUrl); manifest['start_url'] = startUrl; manifestFile = `${baseWorkingDir}/${appName}/appmanifest.json`; - copyManifest(manifestFile, JSON.stringify(manifest)); + makeFileSync(manifestFile, JSON.stringify(manifest)); manifestFile = `${downloadVirtualDir}/${appName}/appmanifest.json`; refCount++; return startUrl; } -function makeRandomId() { - return Math.random().toString(36).substring(2, 12); +function makeAppId(startUrl: string) { + let id = Buffer.from(startUrl).toString('base64'); + id = id.replace(/=/i, ''); + console.log(`id : ${id}`); + return id.substr(2, 12); } function convertConfigXml(appName: string, startUrl: string) { convertedConfigXml = `${baseWorkingDir}/${appName}/config.xml`; - let id = makeRandomId(); + let id = makeAppId(startUrl); let configXml = ``; configXml += ``; - configXml += ``; + configXml += ``; configXml += `` configXml += ``; configXml += `${appName}`; configXml += ``; configXml += ``; - copyManifest(convertedConfigXml, configXml); + makeFileSync(convertedConfigXml, configXml); convertedConfigXml = `${downloadVirtualDir}/${appName}/config.xml`; refCount++; } -- 2.7.4