From 6cdc89f070ac9ccebd37027afbcfe8c2fa0d9215 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BE=90=E5=8B=A4=E6=B0=91?= Date: Tue, 7 May 2024 17:41:21 +0800 Subject: [PATCH] init --- .gitignore | 6 + BuildProfile.ets | 5 + Index.ets | 11 + README.md | 148 + build-profile.json5 | 28 + consumer-rules.txt | 19 + hvigorfile.ts | 6 + obfuscation-rules.txt | 224 + oh-package-lock.json5 | 17 + oh-package.json5 | 12 + src/main/ets/ConstantValue.ets | 3 + src/main/ets/bean/data/AutoData.ets | 12 + src/main/ets/bean/data/AutoStopData.ets | 13 + src/main/ets/bean/data/CertInfoData.ets | 9 + src/main/ets/bean/data/CheckStateData.ets | 8 + src/main/ets/bean/data/GetUserInfoData.ets | 11 + src/main/ets/bean/data/PinData.ets | 8 + src/main/ets/bean/data/SignData.ets | 17 + src/main/ets/bean/model/AgreementModel.ets | 8 + src/main/ets/bean/model/CertDownModel.ets | 6 + src/main/ets/bean/model/CertInfoModel.ets | 18 + src/main/ets/bean/model/CheckStateModel.ets | 13 + src/main/ets/bean/model/VerifyCodeModel.ets | 3 + src/main/ets/common/EnvUrl.ets | 8 + src/main/ets/common/GlobalValue.ets | 181 + src/main/ets/common/StorageKeys.ets | 24 + src/main/ets/components/mainpage/MainPage.ets | 16 + src/main/ets/enum/CertEnvType.ets | 10 + src/main/ets/enum/EnvEnum.ets | 27 + src/main/ets/http/ApiConfig.ets | 141 + src/main/ets/http/ApiUtils.ets | 85 + src/main/ets/manager/BackManager.ets | 45 + src/main/ets/manager/CaManagerReal.ets | 245 + src/main/ets/manager/EnvCheck.ets | 69 + src/main/ets/manager/SettingManagerReal.ets | 138 + src/main/ets/manager/SignManagerReal.ets | 242 + src/main/ets/pages/CertDetails.ets | 162 + src/main/ets/pages/CertDown.ets | 283 + src/main/ets/pages/PinView.ets | 14 + src/main/ets/public/BJCASDK.ets | 48 + src/main/ets/public/CaManager.ets | 83 + src/main/ets/public/SettingManager.ets | 77 + src/main/ets/public/SignManager.ets | 73 + src/main/ets/public/bean/SignModel.ets | 3 + src/main/ets/public/bean/UserInfoModel.ets | 14 + src/main/ets/public/callBack/BJCACallMsg.ets | 82 + src/main/ets/public/sign/PinDialog.ets | 263 + src/main/ets/util/base64Util.js | 170 + src/main/ets/util/encodeUtil.js | 9 + src/main/ets/util/jsencryp.js | 5385 ++++++++++++++++++++ src/main/ets/util/md5.js | 257 + src/main/module.json5 | 12 + src/main/resources/base/element/string.json | 12 + .../resources/base/media/mo_ywx_icon_title.png | Bin 0 -> 4635 bytes .../resources/base/media/mo_ywx_module_bg_cert.png | Bin 0 -> 483391 bytes .../base/media/mo_ywx_module_icon_stamp.png | Bin 0 -> 15792 bytes src/main/resources/base/profile/main_pages.json | 6 + src/main/resources/en_US/element/string.json | 12 + src/main/resources/zh_CN/element/string.json | 12 + src/test/List.test.ets | 5 + src/test/LocalUnit.test.ets | 33 + 61 files changed, 8851 insertions(+) create mode 100644 .gitignore create mode 100644 BuildProfile.ets create mode 100644 Index.ets create mode 100644 README.md create mode 100644 build-profile.json5 create mode 100644 consumer-rules.txt create mode 100644 hvigorfile.ts create mode 100644 obfuscation-rules.txt create mode 100644 oh-package-lock.json5 create mode 100644 oh-package.json5 create mode 100644 src/main/ets/ConstantValue.ets create mode 100644 src/main/ets/bean/data/AutoData.ets create mode 100644 src/main/ets/bean/data/AutoStopData.ets create mode 100644 src/main/ets/bean/data/CertInfoData.ets create mode 100644 src/main/ets/bean/data/CheckStateData.ets create mode 100644 src/main/ets/bean/data/GetUserInfoData.ets create mode 100644 src/main/ets/bean/data/PinData.ets create mode 100644 src/main/ets/bean/data/SignData.ets create mode 100644 src/main/ets/bean/model/AgreementModel.ets create mode 100644 src/main/ets/bean/model/CertDownModel.ets create mode 100644 src/main/ets/bean/model/CertInfoModel.ets create mode 100644 src/main/ets/bean/model/CheckStateModel.ets create mode 100644 src/main/ets/bean/model/VerifyCodeModel.ets create mode 100644 src/main/ets/common/EnvUrl.ets create mode 100644 src/main/ets/common/GlobalValue.ets create mode 100644 src/main/ets/common/StorageKeys.ets create mode 100644 src/main/ets/components/mainpage/MainPage.ets create mode 100644 src/main/ets/enum/CertEnvType.ets create mode 100644 src/main/ets/enum/EnvEnum.ets create mode 100644 src/main/ets/http/ApiConfig.ets create mode 100644 src/main/ets/http/ApiUtils.ets create mode 100644 src/main/ets/manager/BackManager.ets create mode 100644 src/main/ets/manager/CaManagerReal.ets create mode 100644 src/main/ets/manager/EnvCheck.ets create mode 100644 src/main/ets/manager/SettingManagerReal.ets create mode 100644 src/main/ets/manager/SignManagerReal.ets create mode 100644 src/main/ets/pages/CertDetails.ets create mode 100644 src/main/ets/pages/CertDown.ets create mode 100644 src/main/ets/pages/PinView.ets create mode 100644 src/main/ets/public/BJCASDK.ets create mode 100644 src/main/ets/public/CaManager.ets create mode 100644 src/main/ets/public/SettingManager.ets create mode 100644 src/main/ets/public/SignManager.ets create mode 100644 src/main/ets/public/bean/SignModel.ets create mode 100644 src/main/ets/public/bean/UserInfoModel.ets create mode 100644 src/main/ets/public/callBack/BJCACallMsg.ets create mode 100644 src/main/ets/public/sign/PinDialog.ets create mode 100644 src/main/ets/util/base64Util.js create mode 100644 src/main/ets/util/encodeUtil.js create mode 100644 src/main/ets/util/jsencryp.js create mode 100644 src/main/ets/util/md5.js create mode 100644 src/main/module.json5 create mode 100644 src/main/resources/base/element/string.json create mode 100644 src/main/resources/base/media/mo_ywx_icon_title.png create mode 100644 src/main/resources/base/media/mo_ywx_module_bg_cert.png create mode 100644 src/main/resources/base/media/mo_ywx_module_icon_stamp.png create mode 100644 src/main/resources/base/profile/main_pages.json create mode 100644 src/main/resources/en_US/element/string.json create mode 100644 src/main/resources/zh_CN/element/string.json create mode 100644 src/test/List.test.ets create mode 100644 src/test/LocalUnit.test.ets diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..e2713a2 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +/node_modules +/oh_modules +/.preview +/build +/.cxx +/.test \ No newline at end of file diff --git a/BuildProfile.ets b/BuildProfile.ets new file mode 100644 index 0000000..edf15ed --- /dev/null +++ b/BuildProfile.ets @@ -0,0 +1,5 @@ +export default class BuildProfile { + static readonly HAR_VERSION = '1.0.4'; + static readonly BUILD_MODE_NAME = 'debug'; + static readonly DEBUG = true; +} \ No newline at end of file diff --git a/Index.ets b/Index.ets new file mode 100644 index 0000000..ec645fc --- /dev/null +++ b/Index.ets @@ -0,0 +1,11 @@ + +//sdk入口 +export { BJCASDK } from './src/main/ets/public/BJCASDK' + +// 环境枚举 +export { EnvEnum } from './src/main/ets/enum/EnvEnum' +export { CertEnvType } from './src/main/ets/enum/CertEnvType' + +// dialog +export { PinDialog } from './src/main/ets/public/sign/PinDialog' + diff --git a/README.md b/README.md new file mode 100644 index 0000000..afbd4ed --- /dev/null +++ b/README.md @@ -0,0 +1,148 @@ +# 鸿蒙医网信SDK + +## 1. 初始化配置相关 +> 相关方法Manager为`BJCASDK.settingManager()` +### 1.1 获取sdk版本号 +```typescript +BJCASDK.settingManager().getVersion() +``` +### 1.2 运行环境相关 +> [环境码表](./src/main/ets/enum/EnvEnum.ets) + +```typescript +// 设置环境 +BJCASDK.settingManager().setServerEnvType(this.envType) +``` +```typescript +// 获取当前运行环境 +BJCASDK.settingManager().getServerEnvType() +``` +### 1.3 厂商id +```typescript +// 设置厂商id +BJCASDK.settingManager().setClientId('51313546135') +``` +```typescript +// 获取当前厂商id +BJCASDK.settingManager().getClientId() +``` +## 2. 证书相关 +> 相关方法Manager为`BJCASDK.certManager()` +### 2.1 证书是否存在 + +```typescript +BJCASDK.certManager().existsCert(this.phone) +``` + +### 2.2 显示证书页面 + +```typescript +BJCASDK.certManager().showCertPage(this.phone, (result) => { + ToolsHelper.showMessage(result.msg) +}) +``` + + + +### 2.3 下证 + +```typescript +BJCASDK.certManager().certDown(this.phone, null, (result) => { + ToolsHelper.showMessage(result.msg) +}) +``` + + + +### 2.4 更新证书 + +```typescript + +BJCASDK.certManager().certUpdate(this.phone, undefined, res => { + if (res !== BJCACallMsg.SUCCESS) { + ToolsHelper.showMessage(JSON.stringify(res)) + } +}) +``` + + + +### 2.5 密码重置 + +```typescript +BJCASDK.certManager().certResetPin(this.phone, res => { + if (res !== BJCACallMsg.SUCCESS) { + ToolsHelper.showMessage(JSON.stringify(res)) + } +}) +``` + + + +### 2.6 清除本地证书 + +```typescript +BJCASDK.certManager().certClear() +``` + + + +### 2.7 获取签章图片 + +```typescript +BJCASDK.certManager().drawStamp(this.phone, res => { + if (res.code === BJCACallMsg.SUCCESS.code && res.data) { + this.draw = res.data + } else { + ToolsHelper.showMessage("未设置签名图片") + } +}) +``` + +```typescript +Image(`data:image/png;base64,${this.draw}`) + .width(300) + .height(200) + .margin({ top: 15 }) + .objectFit(ImageFit.Contain) + .visibility(this.draw ? Visibility.Visible : Visibility.None) +``` + + + +### 2.8 获取用户信息 + +```typescript +BJCASDK.certManager().getUserInfo(this.phone, res => { + ToolsHelper.showMessage(JSON.stringify(res)) +}) +``` + + + + + +## [常见错误码](src/main/ets/public/callBack/BJCACallMsg.ets) + + + + + + + + + + + + + + + + + + + + + + + diff --git a/build-profile.json5 b/build-profile.json5 new file mode 100644 index 0000000..a726ccf --- /dev/null +++ b/build-profile.json5 @@ -0,0 +1,28 @@ +{ + "apiType": "stageMode", + "buildOption": { + }, + "buildOptionSet": [ + { + "name": "release", + "arkOptions": { + "obfuscation": { + "ruleOptions": { + "enable": true, + "files": [ + "obfuscation-rules.txt" + ] + }, + "consumerFiles": [ + "./consumer-rules.txt" + ] + } + }, + }, + ], + "targets": [ + { + "name": "default" + } + ] +} diff --git a/consumer-rules.txt b/consumer-rules.txt new file mode 100644 index 0000000..46f7574 --- /dev/null +++ b/consumer-rules.txt @@ -0,0 +1,19 @@ +# 开启属性混淆 +-enable-property-obfuscation +# 开启顶层作用域名称混淆 +-enable-toplevel-obfuscation +# 开启直接导入或导出的类或对象的名称和属性名混淆 +-enable-export-obfuscation +# 混淆字符串字面量属性名 +-enable-string-property-obfuscation +# 开启文件/文件夹名称混淆 +-enable-filename-obfuscation +# -compact +-remove-log + +-keep-file-name +./Index.ets + + + + diff --git a/hvigorfile.ts b/hvigorfile.ts new file mode 100644 index 0000000..4218707 --- /dev/null +++ b/hvigorfile.ts @@ -0,0 +1,6 @@ +import { harTasks } from '@ohos/hvigor-ohos-plugin'; + +export default { + system: harTasks, /* Built-in plugin of Hvigor. It cannot be modified. */ + plugins:[] /* Custom plugin to extend the functionality of Hvigor. */ +} diff --git a/obfuscation-rules.txt b/obfuscation-rules.txt new file mode 100644 index 0000000..b6d55a0 --- /dev/null +++ b/obfuscation-rules.txt @@ -0,0 +1,224 @@ +# 开启属性混淆 +-enable-property-obfuscation +# 开启顶层作用域名称混淆 +-enable-toplevel-obfuscation +# 开启直接导入或导出的类或对象的名称和属性名混淆 +-enable-export-obfuscation +# 混淆字符串字面量属性名 +# -enable-string-property-obfuscation +# 开启文件/文件夹名称混淆 +-enable-filename-obfuscation +# -compact +-remove-log + +-keep-file-name +./Index +./src/main/ets/public +./src/main/ets/public/BJCASDK +./src/main/ets/public/CaManager +./src/main/ets/public/SignManager +./src/main/ets/public/SettingManager +./src/main/ets/public/sign/PinDialog +./src/main/ets/public/callBack/BJCACallMsg +./src/main/ets/public/bean/SignModel +./src/main/ets/public/bean/UserInfoModel +./src/main/ets/enum +./src/main/ets/enum/EnvEnum +./src/main/ets/enum/CertEnvType +# ./src/main/ets/bean/data/AutoData +# ./src/main/ets/bean/data/AutoStopData +# ./src/main/ets/bean/data/CertInfoData +# ./src/main/ets/bean/data/CheckStateData +# ./src/main/ets/bean/data/GetUserInfoData +# ./src/main/ets/bean/data/PinData +# ./src/main/ets/bean/data/SignData +# ./src/main/ets/bean/model/AgreementModel +# ./src/main/ets/bean/model/CertDownModel +# ./src/main/ets/bean/model/CertInfoModel +# ./src/main/ets/bean/model/CheckStateModel +# ./src/main/ets/bean/model/UserInfoModel +# ./src/main/ets/bean/model/VerifyCodeModel + +-keep-global-name +BJCASDK +CaManager +SignManager +SettingManager +PinDialog +CallBackForData +CallBackMsg +BJCACallMsg +EnvEnum +CertEnvType +# AutoData +# AutoStopData +# CertInfoData +# CheckStateData +# GetUserInfoData +# PinData +# SignData +# AgreementItem +# AgreementModel +# CertDownModel +# CertInfoModel +# CheckStateModel +# CertList +SignModel +UserInfoModel +# VerifyCodeModel + +# 指定你想保留的属性名 +-keep-property-name +controller +# BJCASDK +settingManager +signManager +CaManager +certManager +# SettingManager +setServerEnvType +envType +clientId +url +init +getVersion +getServerEnvType +getServerEnvUrl +setClientId +getClientId +getEnvTypeByUrl +getUrlByEnvType +# PinDialog +controller +# BJCACallMsg +SUCCESS +CANCEL +FAILED +UNKOWN +ROUTER +ILLEGALITY +NOT_CLIENT +NOT_PHONE +CERT_NOT_EXISTS +CERT_EXISTS +SUCCESS_CERT_INFO +ERROR_CERT_INFO +CERT_NOT_UPDATE +SIGN_CANCEL +SIGN_SUCCESS +SIGN_SUCCESS_REST +# CaManager +existsCert +phone +mFirmId +certDown +certUpdate +certResetPin +certClear +drawStamp +showCertPage +getUserInfo +# SignManager +dialogController +signWithFirmId +uniqueIdList +listener +keepDay +sysTag +keepPin +isPinExempt +clearPin +signForSignAuto +stopSignAuto +getSignAutoInfo +# CertEnvType +DOCTOR +MASS +# EnvEnum +PUBLIC +INTEGRATE +TEST +DEV +TEST_DOMAIN +DEV_DOMAIN +# AutoData +sysTag +pin +firmId +# AutoStopData +clientId +userId +sysTag +# CertInfoData +userId +clientId +# CheckStateData +firmId +# GetUserInfoData +userId +openId +clientId +# PinData +pin +# SignData +clientId +signDataIdList +userId +pin +orderFirmId +# AgreementModel +agreementName +agreementUrl +list +# CertDownModel +userId +endDate +# CertInfoModel +caChannel +caOrgName +caSealBase64 +credenceAppend +credenceStatus +deviceId +deviceType +deviceVersion +endDate +idCardNum +idType +idTypeDes +sex +startDate +userName +unit +# CheckStateModel +certList +deviceId +enableCertUpdate +phone +userName +firmId +endTime +startTime +# SignModel +fileUniqueId +# UserInfoModel +certUpdateTipDay +deviceId +enableCert +endDate +idCardNum +idCardType +nowDate +openId +phoneNum +picUrl +startDate +userName +# VerifyCodeModel +userId + + + + + + diff --git a/oh-package-lock.json5 b/oh-package-lock.json5 new file mode 100644 index 0000000..0340231 --- /dev/null +++ b/oh-package-lock.json5 @@ -0,0 +1,17 @@ +{ + "meta": { + "stableOrder": false + }, + "lockfileVersion": 3, + "ATTENTION": "THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.", + "specifiers": { + "@szyx/sdk_base@../basic": "@szyx/sdk_base@../basic" + }, + "packages": { + "@szyx/sdk_base@../basic": { + "name": "@szyx/sdk_base", + "resolved": "../basic", + "registryType": "local" + } + } +} \ No newline at end of file diff --git a/oh-package.json5 b/oh-package.json5 new file mode 100644 index 0000000..9bec0d2 --- /dev/null +++ b/oh-package.json5 @@ -0,0 +1,12 @@ +{ + "name": "@szyx/sdk_ywx", + "version": "1.0.4", + "description": "医网信,签名sdk。", + "main": "Index.ets", + "author": "xuqm", + "license": "Apache-2.0", + "dependencies": { + "@szyx/sdk_base": "file:../basic" +// "@szyx/sdk_base": "^1.0.2" + } +} diff --git a/src/main/ets/ConstantValue.ets b/src/main/ets/ConstantValue.ets new file mode 100644 index 0000000..f4f5767 --- /dev/null +++ b/src/main/ets/ConstantValue.ets @@ -0,0 +1,3 @@ +export class ConstantValue { + public static VERSION = '1.0.0' +} \ No newline at end of file diff --git a/src/main/ets/bean/data/AutoData.ets b/src/main/ets/bean/data/AutoData.ets new file mode 100644 index 0000000..162f270 --- /dev/null +++ b/src/main/ets/bean/data/AutoData.ets @@ -0,0 +1,12 @@ +export class AutoData { + sysTag: string + pin: string + firmId: string + + constructor(sysTag: string, firmId: string, pin: string) { + this.sysTag = sysTag + this.pin = pin + this.firmId = firmId + } + +} \ No newline at end of file diff --git a/src/main/ets/bean/data/AutoStopData.ets b/src/main/ets/bean/data/AutoStopData.ets new file mode 100644 index 0000000..e8a0078 --- /dev/null +++ b/src/main/ets/bean/data/AutoStopData.ets @@ -0,0 +1,13 @@ +export class AutoStopData { + clientId: string + userId: string + sysTag?: string + + constructor(clientId: string, userId: string, sysTag?: string) { + this.clientId = clientId + this.userId = userId + this.sysTag = sysTag + } + + +} \ No newline at end of file diff --git a/src/main/ets/bean/data/CertInfoData.ets b/src/main/ets/bean/data/CertInfoData.ets new file mode 100644 index 0000000..f702657 --- /dev/null +++ b/src/main/ets/bean/data/CertInfoData.ets @@ -0,0 +1,9 @@ +export class CertInfoData { + userId: string + clientId: string + + constructor(userId: string, clientId: string) { + this.userId = userId + this.clientId = clientId + } +} \ No newline at end of file diff --git a/src/main/ets/bean/data/CheckStateData.ets b/src/main/ets/bean/data/CheckStateData.ets new file mode 100644 index 0000000..9dcbf11 --- /dev/null +++ b/src/main/ets/bean/data/CheckStateData.ets @@ -0,0 +1,8 @@ +export class CheckStateData { + firmId?: string + + constructor(firmId?: string) { + this.firmId = firmId + } + +} \ No newline at end of file diff --git a/src/main/ets/bean/data/GetUserInfoData.ets b/src/main/ets/bean/data/GetUserInfoData.ets new file mode 100644 index 0000000..adf5714 --- /dev/null +++ b/src/main/ets/bean/data/GetUserInfoData.ets @@ -0,0 +1,11 @@ +export class GetUserInfoData{ + userId:string + openId:string + clientId:string + + constructor(userId: string, openId: string, clientId: string) { + this.userId = userId + this.openId = openId + this.clientId = clientId + } +} \ No newline at end of file diff --git a/src/main/ets/bean/data/PinData.ets b/src/main/ets/bean/data/PinData.ets new file mode 100644 index 0000000..de2d7a2 --- /dev/null +++ b/src/main/ets/bean/data/PinData.ets @@ -0,0 +1,8 @@ +export class PinData { + pin: string + + constructor(pin: string) { + this.pin = pin + } + +} \ No newline at end of file diff --git a/src/main/ets/bean/data/SignData.ets b/src/main/ets/bean/data/SignData.ets new file mode 100644 index 0000000..88f50e6 --- /dev/null +++ b/src/main/ets/bean/data/SignData.ets @@ -0,0 +1,17 @@ +import { List } from '@kit.ArkTS'; + +export class SignData { + clientId: string + signDataIdList: List | Array + userId: string + pin: string + orderFirmId?: string + + constructor(clientId: string, signDataIdList: List | Array, userId: string, pin: string, orderFirmId?: string) { + this.clientId = clientId; + this.signDataIdList = signDataIdList; + this.userId = userId; + this.pin = pin; + this.orderFirmId = orderFirmId; + } +} \ No newline at end of file diff --git a/src/main/ets/bean/model/AgreementModel.ets b/src/main/ets/bean/model/AgreementModel.ets new file mode 100644 index 0000000..74badbe --- /dev/null +++ b/src/main/ets/bean/model/AgreementModel.ets @@ -0,0 +1,8 @@ +export interface AgreementItem { + agreementName: string + agreementUrl: string +} + +export interface AgreementModel { + list: Array +} \ No newline at end of file diff --git a/src/main/ets/bean/model/CertDownModel.ets b/src/main/ets/bean/model/CertDownModel.ets new file mode 100644 index 0000000..9b7d14b --- /dev/null +++ b/src/main/ets/bean/model/CertDownModel.ets @@ -0,0 +1,6 @@ +export interface CertDownModel{ + userId:string + endDate:string + stamp?:string + startDate:string +} \ No newline at end of file diff --git a/src/main/ets/bean/model/CertInfoModel.ets b/src/main/ets/bean/model/CertInfoModel.ets new file mode 100644 index 0000000..843d1d2 --- /dev/null +++ b/src/main/ets/bean/model/CertInfoModel.ets @@ -0,0 +1,18 @@ +export interface CertInfoModel { + caChannel: number + caOrgName: string + caSealBase64: string + credenceAppend: string + credenceStatus: number + deviceId: string + deviceType: string + deviceVersion: string + endDate: string + idCardNum: string + idType: string + idTypeDes: string + sex: string + startDate: string + userName: string + unit?: string +} \ No newline at end of file diff --git a/src/main/ets/bean/model/CheckStateModel.ets b/src/main/ets/bean/model/CheckStateModel.ets new file mode 100644 index 0000000..5f4d218 --- /dev/null +++ b/src/main/ets/bean/model/CheckStateModel.ets @@ -0,0 +1,13 @@ +export interface CertList { + endTime: string; + firmId: string; + startTime: string; +} + +export interface CheckStateModel { + certList: CertList[]; + deviceId: string; + enableCertUpdate: boolean; + phone: string; + userName: string; +} \ No newline at end of file diff --git a/src/main/ets/bean/model/VerifyCodeModel.ets b/src/main/ets/bean/model/VerifyCodeModel.ets new file mode 100644 index 0000000..a89b94f --- /dev/null +++ b/src/main/ets/bean/model/VerifyCodeModel.ets @@ -0,0 +1,3 @@ +export interface VerifyCodeModel{ + userId:string +} \ No newline at end of file diff --git a/src/main/ets/common/EnvUrl.ets b/src/main/ets/common/EnvUrl.ets new file mode 100644 index 0000000..57215f1 --- /dev/null +++ b/src/main/ets/common/EnvUrl.ets @@ -0,0 +1,8 @@ +export class EnvUrl { + public static DEV = "http://dev.51trust.com/"; + public static DEV_DOMAIN = "http://dev.51trust.com/"; + public static TEST = "http://beta.51trust.com/"; + public static TEST_DOMAIN = "http://beta.51trust.com/"; + public static INTEGRATE = "http://test.51trust.com/"; + public static PUBLIC = "https://www.51trust.com/"; +} \ No newline at end of file diff --git a/src/main/ets/common/GlobalValue.ets b/src/main/ets/common/GlobalValue.ets new file mode 100644 index 0000000..239ec2f --- /dev/null +++ b/src/main/ets/common/GlobalValue.ets @@ -0,0 +1,181 @@ +import { AppStorageHelper, PreferencesHelper } from '@szyx/sdk_base/Index' +import { EnvEnum } from '../enum/EnvEnum' +import { EnvCheck } from '../manager/EnvCheck' +import { EnvUrl } from './EnvUrl' +import { StorageKeys } from './StorageKeys' +import util from '@ohos.util' +import { CertEnvType } from '../enum/CertEnvType' + +export class GlobalValue { + // 是否实例的标志 + private static instance: GlobalValue | null = null + + // 单例模式 + static getInstance() { + // 判断系统是否已经有单例了 + if (GlobalValue.instance === null) { + GlobalValue.instance = new GlobalValue() + } + return GlobalValue.instance + } + + private constructor() { + } + + private _envType: EnvEnum = EnvEnum.PUBLIC + private _certEnvType: CertEnvType = CertEnvType.DOCTOR + private _envUrl: string = EnvUrl.PUBLIC + private _clientId: string | null = null + private _userId: string | null = null + private _deviceId: string | null = null + private _stampPic: string | null = null + private _certClientId: string | null = null + private _certPhone: string | null = null + private _certEnvUrl: string | null = null + private _signAutoPin: string | null = null + private _signAutoDay: string | null = null + + public set signAutoPin(value: string | null) { + this._signAutoPin = value + AppStorageHelper.save(StorageKeys.SIGN_AUTO_PIN, value ?? undefined) + PreferencesHelper.put(StorageKeys.SIGN_AUTO_PIN, value ?? undefined) + } + + public get signAutoPin(): string | null { + return this._signAutoPin ?? AppStorageHelper.get(StorageKeys.SIGN_AUTO_PIN) ?? null + } + + public set signAutoDay(value: string | null) { + this._signAutoDay = value + AppStorageHelper.save(StorageKeys.SIGN_AUTO_DAY, value ?? undefined) + PreferencesHelper.put(StorageKeys.SIGN_AUTO_DAY, value ?? undefined) + } + + public get signAutoDay(): string | null { + return this._signAutoDay ?? AppStorageHelper.get(StorageKeys.SIGN_AUTO_DAY) ?? null + } + + public set certEnvUrl(value: string | null) { + this._certEnvUrl = value + if (value) { + AppStorageHelper.save(StorageKeys.CERT_ENV_URL, value) + PreferencesHelper.put(StorageKeys.CERT_ENV_URL, value) + } + } + + public get certEnvUrl(): string | null { + return this._certEnvUrl ?? AppStorageHelper.get(StorageKeys.CERT_ENV_URL) ?? null + } + + public set stampPic(value: string | null) { + this._stampPic = value + AppStorageHelper.save(StorageKeys.STAMP_PIC, value ?? undefined) + PreferencesHelper.put(StorageKeys.STAMP_PIC, value ?? undefined) + } + + public get stampPic(): string | null { + return this._stampPic ?? AppStorageHelper.get(StorageKeys.STAMP_PIC) ?? null + } + + + public set certClientId(value: string | null) { + this._certClientId = value + AppStorageHelper.save(StorageKeys.NOT_CLIENT_ID, value ?? undefined) + PreferencesHelper.put(StorageKeys.NOT_CLIENT_ID, value ?? undefined) + } + + public get certClientId(): string | null { + return this._certClientId ?? AppStorageHelper.get(StorageKeys.NOT_CLIENT_ID) ?? null + } + + + public set certPhone(value: string | null) { + this._certPhone = value + AppStorageHelper.save(StorageKeys.NOT_PHONE, value ?? undefined) + PreferencesHelper.put(StorageKeys.NOT_PHONE, value ?? undefined) + } + + public get certPhone(): string | null { + return this._certPhone ?? AppStorageHelper.get(StorageKeys.NOT_PHONE) ?? null + } + + public set deviceId(value: string) { + this._deviceId = value + PreferencesHelper.put(StorageKeys.DEVICE_ID, value) + } + + public get deviceId(): string { + + if (!this._deviceId) { + this.deviceId = util.generateRandomUUID() + } + + return this._deviceId! + } + + public set userId(value: string | null) { + this._userId = value + if (value) { + AppStorageHelper.save(StorageKeys.USER_ID, value) + PreferencesHelper.put(StorageKeys.USER_ID, value) + } + } + + public get userId(): string | null { + return this._userId ?? AppStorageHelper.get(StorageKeys.USER_ID) ?? null + } + + public set envType(value: EnvEnum) { + this._envType = value + this._envUrl = EnvCheck.getUrlByEnvType(value) + AppStorageHelper.save(StorageKeys.ENV_URL, this._envUrl) + PreferencesHelper.put(StorageKeys.ENV_URL, this._envUrl) + } + + public get envType(): EnvEnum { + return this._envType + } + + public set certEnvType(value: CertEnvType) { + this._certEnvType = value + AppStorageHelper.save(StorageKeys.CERT_ENV_TYPE, value === CertEnvType.DOCTOR ? "101" : "102") + PreferencesHelper.put(StorageKeys.CERT_ENV_TYPE, value === CertEnvType.DOCTOR ? "101" : "102") + } + + public get certEnvType(): CertEnvType { + return this._certEnvType + } + + public get envUrl(): string { + return this._envUrl + } + + + public setClientId(value: string) { + this._clientId = value + AppStorageHelper.save(StorageKeys.CLIENT_ID, value) + PreferencesHelper.put(StorageKeys.CLIENT_ID, value) + } + + public getClientId(): string | undefined { + return this._clientId ?? AppStorageHelper.get(StorageKeys.CLIENT_ID) + } + + public getOpenId(): string | undefined { + if (this.userId) { + + /** + * salt一旦定下来不能变更,userId运算成openId需要的参数 + */ + let OPENID_SALT = ['y', 'w', 'q'] + + let array = this.userId.split('') + array.splice(8, 0, OPENID_SALT[0]) + array.splice(13, 0, OPENID_SALT[1]) + array.splice(18, 0, OPENID_SALT[2]) + array.reverse() + return array.join('') + } + return undefined + } +} \ No newline at end of file diff --git a/src/main/ets/common/StorageKeys.ets b/src/main/ets/common/StorageKeys.ets new file mode 100644 index 0000000..e82eae8 --- /dev/null +++ b/src/main/ets/common/StorageKeys.ets @@ -0,0 +1,24 @@ +export class StorageKeys{ + // 厂商id + public static CLIENT_ID = 'szyxSdkClientId' + // userId用户唯一标识 + public static USER_ID = 'szyxSdkUserId' + // 环境地址 + public static ENV_URL = 'szyxSdkEnvUrl' + // 证书用户的环境类型 + public static CERT_ENV_TYPE = 'szyxSdkCertEnvType' + // 设备唯一码 + public static DEVICE_ID = 'szyxSdkDeviceId' + // 签名图片 + public static STAMP_PIC = 'szyxSdkStampPic' + // 证书id,存储的是下证的clientId + public static NOT_CLIENT_ID = 'szyxSdkCertClientId' + // 下证的手机号 + public static NOT_PHONE = 'szyxSdkCertPhone' + // 下证时的环境地址 + public static CERT_ENV_URL = 'szyxSdkCertEnvUrl' + // 免密签名用到的pin码 + public static SIGN_AUTO_PIN = 'signAutoPin' + // 免密签名到期时间 + public static SIGN_AUTO_DAY = 'signAutoDay' +} \ No newline at end of file diff --git a/src/main/ets/components/mainpage/MainPage.ets b/src/main/ets/components/mainpage/MainPage.ets new file mode 100644 index 0000000..8bc3e27 --- /dev/null +++ b/src/main/ets/components/mainpage/MainPage.ets @@ -0,0 +1,16 @@ +@Component +export struct MainPage { + @State message: string = 'Hello World'; + + build() { + Row() { + Column() { + Text(this.message) + .fontSize(50) + .fontWeight(FontWeight.Bold) + } + .width('100%') + } + .height('100%') + } +} diff --git a/src/main/ets/enum/CertEnvType.ets b/src/main/ets/enum/CertEnvType.ets new file mode 100644 index 0000000..bd3cc2f --- /dev/null +++ b/src/main/ets/enum/CertEnvType.ets @@ -0,0 +1,10 @@ +export enum CertEnvType { + /** + * 医师用户 + */ + DOCTOR = '医师用户', + /** + * 公众用户 + */ + MASS = '公众用户', +} diff --git a/src/main/ets/enum/EnvEnum.ets b/src/main/ets/enum/EnvEnum.ets new file mode 100644 index 0000000..d79642c --- /dev/null +++ b/src/main/ets/enum/EnvEnum.ets @@ -0,0 +1,27 @@ +export enum EnvEnum { + /** + * 运营环境 + */ + PUBLIC = '运营环境', + /** + * 集成环境 + */ + INTEGRATE = '集成环境', + /** + * 测试环境 + */ + TEST = '测试环境', + /** + * 开发环境 + */ + DEV = '开发环境', + /** + * 测试环境-域名 + */ + TEST_DOMAIN = '测试环境-域名', + /** + * 开发环境-域名 + */ + DEV_DOMAIN = '开发环境-域名' + +} diff --git a/src/main/ets/http/ApiConfig.ets b/src/main/ets/http/ApiConfig.ets new file mode 100644 index 0000000..5b31c6e --- /dev/null +++ b/src/main/ets/http/ApiConfig.ets @@ -0,0 +1,141 @@ +import { CertEnvType } from '../../../../Index' +import { GlobalValue } from '../common/GlobalValue' + +export interface ApiElem { + url: string + apiNo?: string +} + +/** + * 获取验证码 + */ +export const verifyCodeUrl: ApiElem = { + apiNo: 'VerifyCode', + url: 'am/v3/userCenter/account/getSMSVerifyCode' +} + +/** + * 下载证书 + */ +export const certDown: ApiElem = { + apiNo: 'updateAuthorizeCert', + url: 'am/v3/doctor/cert/updateAuthorizeCert' +} + +/** + * 获取协议列表信息 + */ +export const getAgreement: ApiElem = { + apiNo: 'agreementList', + url: 'am/v3/common/agreementList' +} + +const getUserInfoForDoctor: ApiElem = { + apiNo: 'getUserInfoForDoctor', + url: 'am/v3/doctor/getDoctorBaseInfo' +} + +const getUserInfoForMass: ApiElem = { + apiNo: 'getUserInfoForMass', + url: 'am/v3/userCenter/user/getUserInfo' +} + +/** + * 获取用户信息 + */ +export const getUserInfo = (): ApiElem => { + return GlobalValue.getInstance().certEnvType === CertEnvType.MASS ? getUserInfoForMass : getUserInfoForDoctor +} + +const getCertInfoForDoctor: ApiElem = { + apiNo: 'getCertInfoForDoctor', + url: 'am/v3/doctor/cert/viewMyCert' +} + +const getCertInfoForMass: ApiElem = { + apiNo: 'getCertInfoForMass', + url: 'am/v3/userCenter/user/getCert' +} + +/** + * 获取证书信息 + */ +export const getCertInfo = (): ApiElem => { + return GlobalValue.getInstance().certEnvType === CertEnvType.MASS ? getCertInfoForMass : getCertInfoForDoctor +} + +/** + * 获取证书状态 + */ +export const checkState: ApiElem = { + apiNo: 'checkState', + url: 'am/v3/doctor/checkState' +} + + +/** + * 签名 + */ +export const signWithServer: ApiElem = { + apiNo: 'signWithServer', + url: 'am/v3/recipe/authorizeSign' +} + +/** + * 校验托管证书pin码 + */ +export const verifyPin: ApiElem = { + apiNo: 'signWithServer', + url: 'am/v3/doctor/cert/verifyPin' +} + +/** + * 授权签名操作-确认授权 + */ +export const sureStartForGrant: ApiElem = { + apiNo: 'sureStartForGrant', + url: 'am/v3/grant/sure' +} + +/** + * 开启自动签名(托管证书方式) + */ +export const sureSignForSignAuto: ApiElem = { + apiNo: 'sureSignForSignAuto', + url: 'am/v3/selfSign/authorize/sure' +} +/** + * 停止自动签名(托管证书方式) + */ +export const getSignAutoQuit: ApiElem = { + apiNo: 'getSignAutoQuit', + url: 'am/v3/selfSign/quit' +} +/** + * 获取自动签信息 + */ +export const getSignAutoInfo: ApiElem = { + apiNo: 'getSignAutoInfo', + url: 'am/v3/selfSign/getSelfSignInfo' +} + + + + + + + + + + + + + + + + + + + + + diff --git a/src/main/ets/http/ApiUtils.ets b/src/main/ets/http/ApiUtils.ets new file mode 100644 index 0000000..3db0f88 --- /dev/null +++ b/src/main/ets/http/ApiUtils.ets @@ -0,0 +1,85 @@ +import { HttpHelper } from '@szyx/sdk_base/src/main/ets/http/HttpHelper'; +import { GlobalValue } from '../common/GlobalValue'; +import { ConstantValue } from '../ConstantValue'; +import { ApiElem } from '../http/ApiConfig'; +import { md5_hex } from '../util/md5'; + +interface HttpResult { + status: string + data?: T + message?: string +} + +export class ApiUtils { + public static post(url: ApiElem, data?: Object): Promise { + + return new Promise((resolve, reject) => { + + let MD5_KEY = 'YWQ!@#' + let timeStamp = Date.now() + let signOrigin = `timeStamp=${timeStamp}#${MD5_KEY}` + let sign = md5_hex(signOrigin) + + HttpHelper.get() + .post>(url.url.startsWith('http') ? url.url : GlobalValue.getInstance().envUrl + url.url, + data ? JSON.stringify(data) : undefined, { + userId: GlobalValue.getInstance().userId, + clientId: GlobalValue.getInstance().getClientId(), + version: ConstantValue.VERSION, + deviceType: '01', + deviceId: GlobalValue.getInstance().deviceId, + timeStamp: timeStamp + '', + sign: sign, + phoneModel: 'sign', + phoneVersion: 'sign', + phoneBrand: 'HarmonyOS' + }, url.apiNo) + .then((res: HttpResult) => { + if (res.status === '0') { + resolve(res.data as T) + } else { + reject(new Error(res.message)) + } + + }) + .catch((error: Error) => { + reject(error) + }) + }) + } + public static get(url: ApiElem, data?: Object): Promise { + + return new Promise((resolve, reject) => { + + let MD5_KEY = 'YWQ!@#' + let timeStamp = Date.now() + let signOrigin = `timeStamp=${timeStamp}#${MD5_KEY}` + let sign = md5_hex(signOrigin) + + HttpHelper.get() + .get>(url.url.startsWith('http') ? url.url : GlobalValue.getInstance().envUrl + url.url, + data ? JSON.stringify(data) : undefined, { + userId: GlobalValue.getInstance().userId, + clientId: GlobalValue.getInstance().getClientId(), + version: ConstantValue.VERSION, + deviceType: '01', + timeStamp: timeStamp + '', + sign: sign, + phoneModel: 'sign', + phoneVersion: 'sign', + phoneBrand: 'HarmonyOS' + }, url.apiNo) + .then((res: HttpResult) => { + if (res.status === '0') { + resolve(res.data as T) + } else { + reject(new Error(res.message)) + } + + }) + .catch((error: Error) => { + reject(error) + }) + }) + } +} diff --git a/src/main/ets/manager/BackManager.ets b/src/main/ets/manager/BackManager.ets new file mode 100644 index 0000000..38b1d0e --- /dev/null +++ b/src/main/ets/manager/BackManager.ets @@ -0,0 +1,45 @@ +import { ValidatorHelper } from '@szyx/sdk_base/Index' +import { BJCACallMsg, CallBackForData, CallBackMsg } from '../public/callBack/BJCACallMsg' +import { GlobalValue } from '../common/GlobalValue' + +export class BackManager { + // 是否实例的标志 + private static instance: BackManager | null = null + + static get() { + // 判断系统是否已经有单例了 + if (BackManager.instance === null) { + BackManager.instance = new BackManager() + } + return BackManager.instance + } + + private constructor() { + } + + private _listener: ((result: CallBackMsg) => void) | null = null + + private setListener(listener: (result: CallBackMsg) => void) { + this._listener = listener + } + + public call(result: CallBackMsg) { + if (this._listener) { + this._listener(result) + this._listener = null + } + } + + public checkParams(phone: string, listener: (result: CallBackMsg) => void): boolean { + this.setListener(listener) + if (!GlobalValue.getInstance().getClientId()) { + BackManager.get().call(BJCACallMsg.NOT_CLIENT) + return false + } + if (!ValidatorHelper.isPhone(phone)) { + BackManager.get().call(BJCACallMsg.NOT_PHONE) + return false + } + return true + } +} \ No newline at end of file diff --git a/src/main/ets/manager/CaManagerReal.ets b/src/main/ets/manager/CaManagerReal.ets new file mode 100644 index 0000000..1afa693 --- /dev/null +++ b/src/main/ets/manager/CaManagerReal.ets @@ -0,0 +1,245 @@ +import { ValidatorHelper } from '@szyx/sdk_base/Index'; +import { BJCACallMsg, CallBackForData, CallBackMsg } from '../public/callBack/BJCACallMsg'; +import { GlobalValue } from '../common/GlobalValue'; +import router from '@ohos.router'; +import { BusinessError } from '@kit.BasicServicesKit'; +import { BackManager } from '../manager/BackManager'; +import { ApiUtils } from '../http/ApiUtils'; +import { checkState, getUserInfo } from '../http/ApiConfig'; +import { GetUserInfoData } from '../bean/data/GetUserInfoData'; +import { UserInfoModel } from '../public/bean/UserInfoModel'; +import { CheckStateData } from '../bean/data/CheckStateData'; +import { CheckStateModel } from '../bean/model/CheckStateModel'; + +const CertDown = import('../pages/CertDown'); +const CertDetails = import('../pages/CertDetails'); + + +export class CaManagerReal { + /** + * 证书是否存在 + * @param phone + * @returns + */ + public static existsCert(phone?: string): boolean { + + if (!GlobalValue.getInstance().getClientId()) { + return false + } + if (phone && !ValidatorHelper.isPhone(phone)) { + return false + } + + if (GlobalValue.getInstance().certEnvUrl === GlobalValue.getInstance().envUrl && + GlobalValue.getInstance().certClientId === GlobalValue.getInstance().getClientId() && + GlobalValue.getInstance().certPhone && + (!phone || GlobalValue.getInstance().certPhone === phone)) { + return true + } else { + return false + } + + } + + /** + * 下证 + * @param phone + * @param listener BJCACallMsg.(NOT_CLIENT|NOT_PHONE|ROUTER|SUCCESS|CANCEL) + */ + public static certDown(phone: string, mFirmId: string | undefined, listener: (result: CallBackMsg) => void) { + + if (!BackManager.get().checkParams(phone, listener)) { + return + } + + router.pushNamedRoute({ + name: 'CertDown', + params: { + phone: phone, + mFirmId: mFirmId, + certDownType: 0, + } + }, router.RouterMode.Single).then(() => { + console.info('Succeeded in jumping to the CertDown page.') + + }).catch((err: BusinessError) => { + BackManager.get().call(BJCACallMsg.ROUTER) + console.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`) + }) + } + + /** + * 更新证书 + * @param phone + * @param listener BJCACallMsg.(NOT_CLIENT|NOT_PHONE|ROUTER|SUCCESS|CANCEL|CERT_NOT_UPDATE|CERT_NOT_EXISTS) + */ + public static certUpdate(phone: string, mFirmId: string | undefined, listener: (result: CallBackMsg) => void) { + + if (!BackManager.get().checkParams(phone, listener)) { + return + } + + // 获取证书状态 + ApiUtils.post(checkState, new CheckStateData(mFirmId)) + .then((res: CheckStateModel) => { + if (res.enableCertUpdate) { + router.pushNamedRoute({ + name: 'CertDown', + params: { + phone: phone, + mFirmId: mFirmId, + certDownType: 1, + } + }, router.RouterMode.Single).then(() => { + console.info('Succeeded in jumping to the CertDown page.') + + }).catch((err: BusinessError) => { + BackManager.get().call(BJCACallMsg.ROUTER) + console.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`) + }) + } else { + BackManager.get().call(BJCACallMsg.CERT_NOT_UPDATE) + } + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + BackManager.get().call(BJCACallMsg.CERT_NOT_EXISTS) + }) + + } + + /** + * 重置pin码 + * @param mFirmId + * @param listener BJCACallMsg.(NOT_CLIENT|NOT_PHONE|ROUTER|SUCCESS|CANCEL|CERT_NOT_EXISTS) + */ + public static certResetPin(mFirmId: string | undefined, listener: (result: CallBackMsg) => void) { + const phone = GlobalValue.getInstance().certPhone + if (!phone) { + listener(BJCACallMsg.CERT_NOT_EXISTS) + return + } + + if (!BackManager.get().checkParams(phone, listener)) { + return + } + + // 获取证书状态 + ApiUtils.post(checkState, new CheckStateData(mFirmId)) + .then((res: CheckStateModel) => { + router.pushNamedRoute({ + name: 'CertDown', + params: { + phone: phone, + mFirmId: mFirmId, + certDownType: 2, + } + }, router.RouterMode.Single).then(() => { + console.info('Succeeded in jumping to the CertDown page.') + + }).catch((err: BusinessError) => { + BackManager.get().call(BJCACallMsg.ROUTER) + console.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`) + }) + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + BackManager.get().call(BJCACallMsg.CERT_NOT_EXISTS) + }) + + } + + /** + * 清除本地证书 + * @param phone + * @param listener 操作完成 + */ + public static certClear(listener?: () => void) { + + GlobalValue.getInstance().stampPic = null + GlobalValue.getInstance().certClientId = null + GlobalValue.getInstance().certPhone = null + listener && listener() + + } + + /** + * 获取签章图片 + * @param listener BJCACallMsg.SUCCESS.code & base64 || BJCACallMsg.FAILED.code + */ + public static drawStamp(phone: string, listener: (result: CallBackForData) => void) { + + if (CaManagerReal.existsCert(phone) && GlobalValue.getInstance().stampPic) { + listener({ + code: BJCACallMsg.SUCCESS.code, + msg: "获取签名信息成功", + data: GlobalValue.getInstance().stampPic!! + }) + } else { + listener({ + code: BJCACallMsg.FAILED.code, + msg: "获取签名信息失败", + }) + } + + } + + /** + * 显示证书页面 + * @param phone + * @param listener BJCACallMsg.(NOT_CLIENT|NOT_PHONE|ROUTER|SUCCESS|CANCEL|CERT_NOT_EXISTS|ERROR_CERT_INFO) + */ + public static showCertPage(phone: string, listener: (result: CallBackMsg) => void) { + + if (!BackManager.get().checkParams(phone, listener)) { + return + } + + if (CaManagerReal.existsCert(phone)) { + router.pushNamedRoute({ + name: 'ShowCertPage' + }, router.RouterMode.Single).then(() => { + console.info('Succeeded in jumping to the CertDown page.') + + }).catch((err: BusinessError) => { + BackManager.get().call(BJCACallMsg.ROUTER) + console.error(`Failed to jump to the second page.Code is ${err.code}, message is ${err.message}`) + }) + } else { + BackManager.get().call(BJCACallMsg.CERT_NOT_EXISTS) + } + + } + + /** + * 获取用户信息 + * @param phone + * @param listener BJCACallMsg.(NOT_CLIENT|NOT_PHONE|CERT_NOT_EXISTS)||BJCACallMsg.SUCCESS.code & base64 || BJCACallMsg.FAILED.code + */ + public static getUserInfo(phone: string, listener: (result: CallBackForData) => void) { + + if (!BackManager.get().checkParams(phone, listener)) { + return + } + + if (CaManagerReal.existsCert(phone)) { + ApiUtils.get(getUserInfo(), new GetUserInfoData(GlobalValue.getInstance() + .userId!!, GlobalValue.getInstance().getOpenId()!!, GlobalValue.getInstance().getClientId()!!)) + .then((res: UserInfoModel) => { + console.log('------------->', JSON.stringify(res)) + listener({ + code: BJCACallMsg.SUCCESS.code, + msg: "获取证书信息成功", + data: res + }) + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + listener({ + code: BJCACallMsg.FAILED.code, + msg: "获取证书信息失败", + }) + }) + } else { + BackManager.get().call(BJCACallMsg.CERT_NOT_EXISTS) + } + + } +} \ No newline at end of file diff --git a/src/main/ets/manager/EnvCheck.ets b/src/main/ets/manager/EnvCheck.ets new file mode 100644 index 0000000..ca6899c --- /dev/null +++ b/src/main/ets/manager/EnvCheck.ets @@ -0,0 +1,69 @@ +import { EnvUrl } from '../common/EnvUrl'; +import { EnvEnum } from '../enum/EnvEnum'; + +export class EnvCheck { + /** + * 根据url,获取对应环境信息 + * @param rul + */ + public static getEnvTypeByUrl(url: string) { + + let envType = EnvEnum.PUBLIC + + switch (url) { + case EnvUrl.DEV: + envType = EnvEnum.DEV; + break; + case EnvUrl.TEST: + envType = EnvEnum.TEST; + break; + case EnvUrl.INTEGRATE: + envType = EnvEnum.INTEGRATE; + break; + case EnvUrl.PUBLIC: + envType = EnvEnum.PUBLIC; + break; + case EnvUrl.TEST_DOMAIN: + envType = EnvEnum.TEST_DOMAIN; + break; + case EnvUrl.DEV_DOMAIN: + envType = EnvEnum.DEV_DOMAIN; + break; + } + return envType; + } + + /** + * 根据环境信息,获取url + * @param envType + */ + public static getUrlByEnvType(envType: EnvEnum) { + let url = EnvUrl.PUBLIC; + switch (envType) { + case EnvEnum.PUBLIC: + url = EnvUrl.PUBLIC; + break; + case EnvEnum.INTEGRATE: + url = EnvUrl.INTEGRATE; + break; + case EnvEnum.TEST: + url = EnvUrl.TEST; + break; + case EnvEnum.DEV: + url = EnvUrl.DEV; + break; + case EnvEnum.TEST_DOMAIN: + url = EnvUrl.TEST_DOMAIN; + break; + case EnvEnum.DEV_DOMAIN: + url = EnvUrl.DEV_DOMAIN; + break; + default: + break; + } + return url; + + } + + +} \ No newline at end of file diff --git a/src/main/ets/manager/SettingManagerReal.ets b/src/main/ets/manager/SettingManagerReal.ets new file mode 100644 index 0000000..ab7d270 --- /dev/null +++ b/src/main/ets/manager/SettingManagerReal.ets @@ -0,0 +1,138 @@ +import { PreferencesHelper } from '@szyx/sdk_base/Index' +import { GlobalValue } from '../common/GlobalValue' +import { StorageKeys } from '../common/StorageKeys' +import { ConstantValue } from '../ConstantValue' +import { CertEnvType } from '../enum/CertEnvType' +import { EnvEnum } from '../enum/EnvEnum' +import { EnvCheck } from './EnvCheck' + + +export class SettingManagerReal { + /** + * 初始化方法,不调用的话,无法获取本地clientId + * + */ + public static init() { + + PreferencesHelper.get(StorageKeys.CLIENT_ID).then((res) => { + if (res) { + GlobalValue.getInstance().setClientId(res.toString()) + } + }) + PreferencesHelper.get(StorageKeys.USER_ID).then((res) => { + if (res) { + GlobalValue.getInstance().userId = res.toString() + } + }) + PreferencesHelper.get(StorageKeys.ENV_URL).then((res) => { + if (res) { + GlobalValue.getInstance().envType = EnvCheck.getEnvTypeByUrl(res.toString()) + } + }) + PreferencesHelper.get(StorageKeys.DEVICE_ID).then((res) => { + if (res) { + GlobalValue.getInstance().deviceId = res.toString() + } + }) + PreferencesHelper.get(StorageKeys.STAMP_PIC).then((res) => { + if (res) { + GlobalValue.getInstance().stampPic = res.toString() + } + }) + PreferencesHelper.get(StorageKeys.NOT_CLIENT_ID).then((res) => { + if (res) { + GlobalValue.getInstance().certClientId = res.toString() + } + }) + PreferencesHelper.get(StorageKeys.NOT_PHONE).then((res) => { + if (res) { + GlobalValue.getInstance().certPhone = res.toString() + } + }) + PreferencesHelper.get(StorageKeys.CERT_ENV_URL).then((res) => { + if (res) { + GlobalValue.getInstance().certEnvUrl = res.toString() + } + }) + PreferencesHelper.get(StorageKeys.SIGN_AUTO_PIN).then((res) => { + if (res) { + GlobalValue.getInstance().signAutoPin = res.toString() + } + }) + PreferencesHelper.get(StorageKeys.SIGN_AUTO_DAY).then((res) => { + if (res) { + GlobalValue.getInstance().signAutoDay = res.toString() + } + }) + PreferencesHelper.get(StorageKeys.CERT_ENV_TYPE).then((res) => { + if (res) { + GlobalValue.getInstance().certEnvType = res.toString() === "101" ? CertEnvType.DOCTOR : CertEnvType.MASS + } + }) + + } + + /** + * 获取当前sdk版本号,独立维护 + * @returns + */ + public static getVersion() { + return ConstantValue.VERSION + } + + /** + * 设置运行环境 + * @param envType + */ + public static setServerEnvType(envType: EnvEnum) { + GlobalValue.getInstance().envType = envType + } + + /** + * 获取当前运行环境 + * @returns + */ + public static getServerEnvType(): EnvEnum { + return GlobalValue.getInstance().envType + } + + /** + * 获取当前运行环境的url + * @returns + */ + public static getServerEnvUrl(): string { + return GlobalValue.getInstance().envUrl + } + + /** + * 设置厂商id + * @param clientId + */ + public static setClientId(clientId: string) { + GlobalValue.getInstance().setClientId(clientId) + } + + /** + * 获取当前厂商id + * @returns + */ + public static getClientId() { + return GlobalValue.getInstance().getClientId() + } + + /** + * 根据url,获取对应环境信息 + * @param rul + */ + public static getEnvTypeByUrl(url: string): EnvEnum { + return EnvCheck.getEnvTypeByUrl(url) + } + + /** + * 根据环境信息,获取url + * @param envType + */ + public static getUrlByEnvType(envType: EnvEnum): string { + return EnvCheck.getUrlByEnvType(envType) + } +} \ No newline at end of file diff --git a/src/main/ets/manager/SignManagerReal.ets b/src/main/ets/manager/SignManagerReal.ets new file mode 100644 index 0000000..ac217bd --- /dev/null +++ b/src/main/ets/manager/SignManagerReal.ets @@ -0,0 +1,242 @@ +import { List } from '@kit.ArkTS'; +import { CaManagerReal } from './CaManagerReal'; +import { BJCASDK } from '../public/BJCASDK'; +import { BJCACallMsg, CallBackForData } from '../public/callBack/BJCACallMsg'; +import { ApiUtils } from '../http/ApiUtils'; +import { getSignAutoInfo, getSignAutoQuit, signWithServer, sureSignForSignAuto, verifyPin } from '../http/ApiConfig'; +import { SignData } from '../bean/data/SignData'; +import { GlobalValue } from '../common/GlobalValue'; +import { encodeByRsa } from '../util/encodeUtil'; +import { SignModel } from '../public/bean/SignModel'; +import { PinData } from '../bean/data/PinData'; +import { AutoData } from '../bean/data/AutoData'; +import { AutoStopData } from '../bean/data/AutoStopData'; + + +export class SignManagerReal { + private static SIGN_BATCH_MAX_NUM = 100 + public static listener: ((result: CallBackForData) => void) | null = null + + public static signWithFirmId(uniqueIdList: List | Array, listener: (result: CallBackForData>) => void) { + + if (uniqueIdList.length === 0) { + listener(BJCACallMsg.ILLEGALITY) + return + } + if (uniqueIdList.length > SignManagerReal.SIGN_BATCH_MAX_NUM) { + listener(BJCACallMsg.ILLEGALITY) + return + } + if (!CaManagerReal.existsCert()) { + listener && listener(BJCACallMsg.CERT_NOT_EXISTS) + return + } + if (SignManagerReal.isPinExempt()) { + + if (!GlobalValue.getInstance().certClientId) { + listener && listener(BJCACallMsg.CERT_NOT_EXISTS) + return + } + + console.log('-------->', JSON.stringify(uniqueIdList)) + // 开始签名 + ApiUtils.post>(signWithServer, new SignData( + GlobalValue.getInstance().certClientId!, + uniqueIdList, + GlobalValue.getInstance().userId!, + GlobalValue.getInstance().signAutoPin!, + undefined + )) + .then((res: Array) => { + listener && listener({ + code: 1001, + msg: '操作完成', + data: res + }) + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + listener && listener({ + code: 1003, + msg: `用户操作失败:${error.message}` + }) + }) + } else { + SignManagerReal.listener = (result: CallBackForData) => { + if (result.code === BJCACallMsg.SUCCESS.code) { + + console.log('-------->', JSON.stringify(uniqueIdList)) + // 开始签名 + ApiUtils.post>(signWithServer, new SignData( + GlobalValue.getInstance().certClientId!, + uniqueIdList, + GlobalValue.getInstance().userId!, + encodeByRsa(result.data), + undefined + )) + .then((res: Array) => { + listener && listener({ + code: 1001, + msg: '操作完成', + data: res + }) + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + listener && listener({ + code: 1003, + msg: `用户操作失败:${error.message}` + }) + }) + } else { + listener && listener({ + code: 1003, + msg: `用户操作失败:${result.data}` + }) + } + } + BJCASDK.signManager().dialogController.open() + } + } + + public static keepPin(keepDay: number, listener: (result: CallBackForData) => void) { + + if (keepDay < 1 || keepDay > 60 || !Number.isInteger(keepDay)) { + listener(BJCACallMsg.ILLEGALITY) + return + } + if (!CaManagerReal.existsCert()) { + listener && listener(BJCACallMsg.CERT_NOT_EXISTS) + return + } + + SignManagerReal.listener = (result: CallBackForData) => { + if (result.code === BJCACallMsg.SUCCESS.code) { + + // 请求免密 + ApiUtils.post(verifyPin, new PinData( + encodeByRsa(result.data), + )) + .then(() => { + GlobalValue.getInstance().signAutoPin = encodeByRsa(result.data) + const curDate = new Date().getTime() + const keep = keepDay * 24 * 60 * 60 * 1000 + GlobalValue.getInstance().signAutoDay = (curDate + keep).toString() + + listener && listener(BJCACallMsg.SIGN_SUCCESS) + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + listener && listener({ + code: 1003, + msg: `用户操作失败:${error.message}` + }) + }) + } else { + listener && listener(result) + } + } + BJCASDK.signManager().dialogController.open() + } + + public static isPinExempt(): boolean { + + if (!CaManagerReal.existsCert()) { + return false + } + const day = GlobalValue.getInstance().signAutoDay + if (!day) { + return false + } + if (!GlobalValue.getInstance().signAutoPin) { + return false + } + + const curTime = new Date().getTime() + if (Number.parseInt(day) - curTime < 0) { + SignManagerReal.clearPin(() => { + }) + return false + } + return true + } + + public static clearPin(listener: () => void) { + GlobalValue.getInstance().signAutoPin = null + GlobalValue.getInstance().signAutoDay = null + listener() + } + + public static signForSignAuto(sysTag: string, listener: (result: CallBackForData) => void) { + if (!CaManagerReal.existsCert()) { + listener && listener(BJCACallMsg.CERT_NOT_EXISTS) + return + } + + SignManagerReal.listener = (result: CallBackForData) => { + if (result.code === BJCACallMsg.SUCCESS.code) { + // 请求自动签 + ApiUtils.post(sureSignForSignAuto, new AutoData( + sysTag, + GlobalValue.getInstance().certClientId!, + encodeByRsa(result.data), + )) + .then(() => { + listener && listener(BJCACallMsg.SIGN_SUCCESS) + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + listener && listener({ + code: 1003, + msg: `用户操作失败:${error.message}` + }) + }) + } else { + listener && listener(result) + } + } + BJCASDK.signManager().dialogController.open() + } + + public static stopSignAuto(sysTag: string|undefined, listener: (result: CallBackForData) => void) { + if (!CaManagerReal.existsCert()) { + listener && listener(BJCACallMsg.CERT_NOT_EXISTS) + return + } + + // 停止自动签 + ApiUtils.post(getSignAutoQuit, new AutoStopData( + GlobalValue.getInstance().certClientId!, + GlobalValue.getInstance().userId!, + sysTag, + )) + .then(() => { + listener && listener(BJCACallMsg.SIGN_SUCCESS) + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + listener && listener({ + code: 1003, + msg: `用户操作失败:${error.message}` + }) + }) + } + + public static getSignAutoInfo(listener: (result: CallBackForData) => void) { + if (!CaManagerReal.existsCert()) { + listener && listener(BJCACallMsg.CERT_NOT_EXISTS) + return + } + + // 停止自动签 + ApiUtils.post(getSignAutoInfo, new AutoStopData( + GlobalValue.getInstance().certClientId!, + GlobalValue.getInstance().userId!, + undefined, + )) + .then(() => { + listener && listener(BJCACallMsg.SIGN_SUCCESS) + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + listener && listener({ + code: 1003, + msg: `用户操作失败:${error.message}` + }) + }) + } +} \ No newline at end of file diff --git a/src/main/ets/pages/CertDetails.ets b/src/main/ets/pages/CertDetails.ets new file mode 100644 index 0000000..d547dc1 --- /dev/null +++ b/src/main/ets/pages/CertDetails.ets @@ -0,0 +1,162 @@ +import { GlobalValue } from '../common/GlobalValue' +import { getCertInfo } from '../http/ApiConfig' +import { ApiUtils } from '../http/ApiUtils' +import { CertInfoModel } from '../bean/model/CertInfoModel' +import { AlertDialog } from '@ohos.arkui.advanced.Dialog' +import { BackManager } from '../manager/BackManager' +import { BJCACallMsg } from '../public/callBack/BJCACallMsg' +import { ComposeTitleBar, router, SwipeRefresher } from '@kit.ArkUI' +import { CertInfoData } from '../bean/data/CertInfoData' + + +@Entry({ routeName: 'ShowCertPage' }) +@Preview +@Component +export struct CertDetails { + // 证书信息 + @State certInfo: CertInfoModel | null = null + @State isLoading: boolean = false + dialogControllerConfirm: CustomDialogController = new CustomDialogController({ + builder: AlertDialog({ + content: '获取证书信息失败', + secondaryButton: { + value: '确认', + fontColor: $r('sys.color.ohos_id_color_warning'), + action: () => { + // BackManager.get().call(BJCACallMsg.ERROR_CERT_INFO) + router.back() + } + }, + }), + autoCancel: false, + customStyle: true, + alignment: DialogAlignment.Center + }) + + aboutToDisappear(): void { + BackManager.get() + .call(this.isLoading ? BJCACallMsg.CANCEL : this.certInfo ? BJCACallMsg.SUCCESS : BJCACallMsg.ERROR_CERT_INFO) + } + + aboutToAppear(): void { + // 获取证书信息 + ApiUtils.post(getCertInfo(), new CertInfoData(GlobalValue.getInstance() + .userId!!, GlobalValue.getInstance().getClientId()!!)) + .then((res: CertInfoModel) => { + console.log('------------->', JSON.stringify(res)) + this.certInfo = res + }).catch((error: Error) => { + this.dialogControllerConfirm.open() + console.log('>>>>>', JSON.stringify(error)) + // ToolsHelper.showMessage(error.message) + }) + } + + build() { + Column() { + Column() { + ComposeTitleBar({ + title: "证书详情", + }).width('100%') + Column() { + Image($r("app.media.mo_ywx_icon_title")) + .width(50) + .height(50) + .margin({ top: 10 }) + Text($r("app.string.mo_ywx_module_cert_title")) + .fontSize(17) + .fontColor("#073152") + Text(`姓名:${this.certInfo?.userName ?? ""}`) + .fontSize(14) + .fontColor("#073152") + .width("100%") + .margin({ top: 15 }) + .padding({ left: 30, right: 30 }) + Text(`性别:${this.certInfo?.sex ?? ""}`) + .fontSize(14) + .fontColor("#073152") + .width("100%") + .margin({ top: 5 }) + .padding({ left: 30, right: 30 }) + Text(`单位:${this.certInfo?.unit ?? ""}`) + .fontSize(14) + .fontColor("#073152") + .width("100%") + .margin({ top: 5 }) + .padding({ left: 30, right: 30 }) + Text(`资格证书类型:${this.certInfo?.idTypeDes ?? ""}`) + .fontSize(14) + .fontColor("#073152") + .width("100%") + .margin({ top: 5 }) + .padding({ left: 30, right: 30 }) + Text(`该人员已通过${this.certInfo?.caOrgName ?? ""}线下资格审定及真实身份真实性验证,该人员身份及信息真实可靠,特此认证。`) + .fontSize(14) + .fontColor("#073152") + .width("100%") + .margin({ top: 80 }) + .lineHeight(20) + .padding({ left: 30, right: 30 }) + Stack() { + Image($r("app.media.mo_ywx_module_icon_stamp")) + .width(50) + .height(50) + .margin({ top: 10 }) + Column() { + Text(`颁发机构:${this.certInfo?.caOrgName ?? ""}`) + .fontSize(12) + .fontColor("#073152") + .padding({ left: 30, right: 70 }) + Text(`颁发时间:${this.certInfo?.startDate ?? ""}`) + .fontSize(12) + .fontColor("#073152") + .margin({ top: 5 }) + .padding({ left: 30, right: 70 }) + Text(`有效时间:${this.certInfo?.endDate ?? ""}`) + .fontSize(12) + .fontColor("#073152") + .margin({ top: 5 }) + .padding({ left: 30, right: 70 }) + } + }.margin({ top: 90 }) + + Column() { + Text("一一证书说明一一") + .fontSize(12) + .fontColor("#666666") + .margin({ top: 5 }) + .fontWeight(FontWeight.Bold) + Text(`本授权证书为有效文本、不得影印、涂改、转让。\n ${this.certInfo?.caOrgName ?? ""}拥有此授权书的最终解释权。`) + .fontSize(12) + .lineHeight(16) + .fontColor("#666666") + .margin({ top: 5 }) + .fontWeight(FontWeight.Bold) + } + .justifyContent(FlexAlign.End) + .margin({ top: 90 }) + + } + .backgroundImage($r("app.media.mo_ywx_module_bg_cert")) + .backgroundImageSize(ImageSize.Contain) + .padding(20) + .width('100%') + .height('100%') + } + .width('100%') + .height('100%') + .visibility(this.isLoading ? Visibility.None : Visibility.Visible) + + Column() { + SwipeRefresher({ + content: '', + isLoading: true + }) + } + .width('100%') + .height('100%') + .justifyContent(FlexAlign.Center) + .visibility(this.isLoading ? Visibility.Visible : Visibility.None) + }.width('100%').height('100%') + } +} \ No newline at end of file diff --git a/src/main/ets/pages/CertDown.ets b/src/main/ets/pages/CertDown.ets new file mode 100644 index 0000000..f9a4694 --- /dev/null +++ b/src/main/ets/pages/CertDown.ets @@ -0,0 +1,283 @@ +import { ComposeTitleBar, router } from '@kit.ArkUI'; +import { GlobalValue } from '../common/GlobalValue'; +import { certDown, getAgreement, verifyCodeUrl } from '../http/ApiConfig'; +import { ApiUtils } from '../http/ApiUtils'; +import { VerifyCodeModel } from '../bean/model/VerifyCodeModel'; +import { ToolsHelper, XWebHelper } from '@szyx/sdk_base/Index'; +import { BJCACallMsg } from '../public/callBack/BJCACallMsg'; +import { BackManager } from '../manager/BackManager'; +import { AgreementItem, AgreementModel } from '../bean/model/AgreementModel'; +import { encodeByRsa } from '../util/encodeUtil'; +import { CertDownModel } from '../bean/model/CertDownModel'; + + +class routerParams { + phone: string + mFirmId?: string + // 0-下证;1-更新;2-重置 + certDownType: number + + constructor(phone: string, certDownType: number, mFirmId?: string) { + this.phone = phone + this.mFirmId = mFirmId + this.certDownType = certDownType + } +} + +class data { + phoneNum: string + type: number + + constructor(phone: string, type: number) { + this.phoneNum = phone; + this.type = type; + } +} + +class AgreementData { + phone: string + type: string + firmId?: string + + constructor(phone: string, type: string, firmId?: string) { + this.phone = phone; + this.type = type; + this.firmId = firmId; + } +} + +class DownBean { + verifyCode: string + userId: string + pin: string + clientId?: string + + constructor(verifyCode: string, userId: string, pin: string, clientId?: string) { + this.verifyCode = verifyCode; + this.userId = userId; + this.pin = pin; + this.clientId = clientId; + } +} + +@Entry({ routeName: 'CertDown' }) +@Preview +@Component +export struct CertDown { + // 手机号 + @State phone: string = (router.getParams() as routerParams).phone + @State mFirmId?: string = (router.getParams() as routerParams).mFirmId + // @State phone: string = '13691543886' + //验证码 + @State verifyCode: string | null = null + @State userId: string | null = null + // 签名密码设置 + @State pwd: string | null = null + // 签名密码确认 + @State pwd2: string | null = null + // 验证码倒计时 + @State verifyCodeCountDown: number = 60 + // 是否正在倒计时 + @State isCountDown: boolean = false + // 退出页面时,是否用户主动取消 + @State isCancel: boolean = true + // 是否需要显示协议 + @State showAgreement: boolean = false + // 导航栏title + @State title: string = '证书下载' + // 下证类型 + @State certDownType: number = (router.getParams() as routerParams).certDownType + // 协议列表 + @State agreementModel: AgreementModel | null = null + // 是否勾选协议 + @State checkAgreement: boolean = false + + aboutToAppear(): void { + + switch (this.certDownType) { + case 0: + this.showAgreement = true + this.title = '证书下载' + // 只有下证需要获取协议列表 + ApiUtils.get(getAgreement, new AgreementData(this.phone, 'certDown', this.mFirmId)) + .then((res: AgreementModel) => { + this.agreementModel = res + console.log('------------->', JSON.stringify(res.list)) + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + ToolsHelper.showMessage(error.message) + }) + break + case 1: + this.showAgreement = false + this.title = '证书更新' + break + case 2: + this.showAgreement = false + this.title = '签名密码重置' + break + } + ApiUtils.post(verifyCodeUrl, new data(this.phone, 0)) + .then((res: VerifyCodeModel) => { + GlobalValue.getInstance().userId = res.userId + this.userId = res.userId + this.verifyCodeCountDown = 60 + this.isCountDown = true + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + ToolsHelper.showMessage(error.message) + }) + + setInterval(() => { + if (this.isCountDown) { + this.verifyCodeCountDown -= 1 + } + if (this.verifyCodeCountDown <= 0) { + this.isCountDown = false + } + }, 1000) + } + + aboutToDisappear(): void { + // 退出页面时候,判断操作状态 + BackManager.get().call(this.isCancel ? BJCACallMsg.CANCEL : BJCACallMsg.SUCCESS) + } + + build() { + Column() { + ComposeTitleBar({ + title: this.title, + }).width('100%') + Column() { + Text(`下证手机号${this.phone}`).margin({ top: 30 }) + Flex({ wrap: FlexWrap.NoWrap, alignItems: ItemAlign.Center }) { + Text('验证码').width('17%') + TextInput({ + placeholder: '请输入验证码', + text: $$this.verifyCode, + }).width('50%') + .maxLength(6) + .type(InputType.PhoneNumber) + Button(this.isCountDown ? `${this.verifyCodeCountDown}s` : '获取验证码', { + stateEffect: true, + type: ButtonType.Capsule, + buttonStyle: ButtonStyleMode.EMPHASIZED + }) + .fontColor('#ffffff') + .height(40) + .flexGrow(1) + .enabled(!this.isCountDown) + .onClick(() => { + ApiUtils.post(verifyCodeUrl, new data(this.phone, 0)) + .then((res: VerifyCodeModel) => { + GlobalValue.getInstance().userId = res.userId + this.userId = res.userId + this.verifyCodeCountDown = 60 + this.isCountDown = true + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error)) + ToolsHelper.showMessage(error.message) + }) + }) + .width('30%') + }.margin({ top: 30 }) + + Flex({ wrap: FlexWrap.NoWrap, alignItems: ItemAlign.Center }) { + Text('签名密码').width('22%') + TextInput({ + placeholder: '请创建签名密码', + text: $$this.pwd, + }).width('70%') + .maxLength(6) + .type(InputType.NUMBER_PASSWORD) + }.margin({ top: 20 }) + + Flex({ wrap: FlexWrap.NoWrap, alignItems: ItemAlign.Center }) { + Text('确认密码').width('22%') + TextInput({ + placeholder: '请再次输入签名密码', + text: $$this.pwd2, + }).width('70%') + .maxLength(6) + .type(InputType.NUMBER_PASSWORD) + }.margin({ top: 20 }) + + Flex({ alignItems: ItemAlign.Center }) { + Checkbox({ name: 'checkbox1', group: 'checkboxGroup' }) + .shape(CheckBoxShape.ROUNDED_SQUARE) + .selectedColor(0x39a2db) + .onChange((value: boolean) => { + console.info('Checkbox1 change is' + value) + this.checkAgreement = value + }) + .mark({ + strokeColor: Color.Black, + size: 50, + strokeWidth: 5 + }) + .width(30) + .height(30) + ForEach(this.agreementModel?.list, (item: AgreementItem, index) => { + Text(`${index === 0 ? '' : '、'}《${item.agreementName}》`) + .fontSize(13) + .fontColor('#0089FF') + .onClick(() => { + XWebHelper.openWeb({ + url: item.agreementUrl, + title: item.agreementName, + }) + }) + }) + }.margin({ top: 20 }) + .visibility(this.showAgreement ? Visibility.Visible : Visibility.None) + + Button('确定', { stateEffect: true, type: ButtonType.Capsule, buttonStyle: ButtonStyleMode.EMPHASIZED }) + .width('40%') + .fontColor('#ffffff') + .height(40) + .onClick(() => { + if (!this.userId) { + ToolsHelper.showMessage('验证码获取可能存在异常,请重新获取后再试。') + return + } + if (!this.verifyCode) { + ToolsHelper.showMessage('请输入验证码') + return + } + if (!GlobalValue.getInstance().userId) { + ToolsHelper.showMessage('请先获取验证码') + return + } + if (!this.pwd || !this.pwd2 || this.pwd !== this.pwd2) { + ToolsHelper.showMessage('请输入签名密码') + return + } + if (!this.checkAgreement && this.showAgreement) { + ToolsHelper.showMessage('请阅读并同意相关协议') + return + } + ApiUtils.post(certDown, new DownBean(this.verifyCode, GlobalValue.getInstance() + .userId!, encodeByRsa(this.pwd))) + .then((res: CertDownModel) => { + console.log('>>>>>', JSON.stringify(res)) + this.isCancel = false + if (res.stamp) { + GlobalValue.getInstance().stampPic = res.stamp + } else { + GlobalValue.getInstance().stampPic = null + } + GlobalValue.getInstance().userId = res.userId + GlobalValue.getInstance().certClientId = GlobalValue.getInstance().getClientId()!! + GlobalValue.getInstance().certPhone = this.phone + GlobalValue.getInstance().certEnvUrl = GlobalValue.getInstance().envUrl + router.back() + }).catch((error: Error) => { + console.log('>>>>>', JSON.stringify(error.message)) + ToolsHelper.showMessage(error.message) + }) + }) + .margin({ top: 30 }) + }.padding({ left: 15, right: 15 }).width('100%').height('100%') + }.width('100%').height('100%') + } +} \ No newline at end of file diff --git a/src/main/ets/pages/PinView.ets b/src/main/ets/pages/PinView.ets new file mode 100644 index 0000000..36b240b --- /dev/null +++ b/src/main/ets/pages/PinView.ets @@ -0,0 +1,14 @@ +import { WindowHelper } from '@szyx/sdk_base/Index' + +@Entry +@Component +export struct PinView { + build() { + Button('pushPathByName', { stateEffect: true, type: ButtonType.Capsule }) + .width('80%') + .height(40) + .margin(20) + .onClick(() => { + }) + } +} \ No newline at end of file diff --git a/src/main/ets/public/BJCASDK.ets b/src/main/ets/public/BJCASDK.ets new file mode 100644 index 0000000..0e69e37 --- /dev/null +++ b/src/main/ets/public/BJCASDK.ets @@ -0,0 +1,48 @@ +import { CaManager } from './CaManager' +import { SettingManager } from './SettingManager' +import { SignManager } from './SignManager' + +/** + * 数字医信签名sdk,入口 + */ +export class BJCASDK { + // 是否实例的标志 + private static instance1: SettingManager | null = null + private static instance2: CaManager | null = null + private static instance3: SignManager | null = null + + /** + * 设置管理 + * @returns + */ + static settingManager() { + // 判断系统是否已经有单例了 + if (BJCASDK.instance1 === null) { + BJCASDK.instance1 = new SettingManager() + } + return BJCASDK.instance1 + } + + /** + * 证书管理 + * @returns + */ + static certManager() { + // 判断系统是否已经有单例了 + if (BJCASDK.instance2 === null) { + BJCASDK.instance2 = new CaManager() + } + return BJCASDK.instance2 + } + /** + * 签名管理 + * @returns + */ + static signManager() { + // 判断系统是否已经有单例了 + if (BJCASDK.instance3 === null) { + BJCASDK.instance3 = new SignManager() + } + return BJCASDK.instance3 + } +} \ No newline at end of file diff --git a/src/main/ets/public/CaManager.ets b/src/main/ets/public/CaManager.ets new file mode 100644 index 0000000..496577d --- /dev/null +++ b/src/main/ets/public/CaManager.ets @@ -0,0 +1,83 @@ +import { CallBackForData, CallBackMsg } from './callBack/BJCACallMsg'; +import { BackManager } from '../manager/BackManager'; +import { UserInfoModel } from './bean/UserInfoModel'; +import { CaManagerReal } from '../manager/CaManagerReal'; + +export class CaManager { + /** + * 证书是否存在 + * @param phone + * @returns + */ + public existsCert(phone?: string): boolean { + + return CaManagerReal.existsCert(phone) + } + + /** + * 下证 + * @param phone + * @param listener BJCACallMsg.(NOT_CLIENT|NOT_PHONE|ROUTER|SUCCESS|CANCEL) + */ + public certDown(phone: string, mFirmId: string | undefined, listener: (result: CallBackMsg) => void) { + CaManagerReal.certDown(phone, mFirmId, listener) + } + + /** + * 更新证书 + * @param phone + * @param listener BJCACallMsg.(NOT_CLIENT|NOT_PHONE|ROUTER|SUCCESS|CANCEL|CERT_NOT_UPDATE|CERT_NOT_EXISTS) + */ + public certUpdate(phone: string, mFirmId: string | undefined, listener: (result: CallBackMsg) => void) { + CaManagerReal.certUpdate(phone, mFirmId, listener) + } + + /** + * 重置pin码 + * @param mFirmId + * @param listener BJCACallMsg.(NOT_CLIENT|NOT_PHONE|ROUTER|SUCCESS|CANCEL|CERT_NOT_EXISTS) + */ + public certResetPin(mFirmId: string | undefined, listener: (result: CallBackMsg) => void) { + CaManagerReal.certResetPin(mFirmId, listener) + } + + /** + * 清除本地证书 + * @param phone + * @param listener 操作完成 + */ + public certClear(listener?: () => void) { + CaManagerReal.certClear(listener) + } + + /** + * 获取签章图片 + * @param listener BJCACallMsg.SUCCESS.code & base64 || BJCACallMsg.FAILED.code + */ + public drawStamp(phone: string, listener: (result: CallBackForData) => void) { + CaManagerReal.drawStamp(phone, listener) + } + + /** + * 显示证书页面 + * @param phone + * @param listener BJCACallMsg.(NOT_CLIENT|NOT_PHONE|ROUTER|SUCCESS|CANCEL|CERT_NOT_EXISTS|ERROR_CERT_INFO) + */ + public showCertPage(phone: string, listener: (result: CallBackMsg) => void) { + CaManagerReal.showCertPage(phone, listener) + } + + /** + * 获取用户信息 + * @param phone + * @param listener BJCACallMsg.(NOT_CLIENT|NOT_PHONE|CERT_NOT_EXISTS)||BJCACallMsg.SUCCESS.code & base64 || BJCACallMsg.FAILED.code + */ + public getUserInfo(phone: string, listener: (result: CallBackForData) => void) { + CaManagerReal.getUserInfo(phone, listener) + + if (!BackManager.get().checkParams(phone, listener)) { + return + } + + } +} \ No newline at end of file diff --git a/src/main/ets/public/SettingManager.ets b/src/main/ets/public/SettingManager.ets new file mode 100644 index 0000000..ccf7806 --- /dev/null +++ b/src/main/ets/public/SettingManager.ets @@ -0,0 +1,77 @@ +import { EnvEnum } from '../enum/EnvEnum' +import { SettingManagerReal } from '../manager/SettingManagerReal' + + +export class SettingManager { + /** + * 初始化方法,不调用的话,无法获取本地clientId + * + */ + public init() { + SettingManagerReal.init() + } + + /** + * 获取当前sdk版本号,独立维护 + * @returns + */ + public getVersion(): string { + return SettingManagerReal.getVersion() + } + + /** + * 设置运行环境 + * @param envType + */ + public setServerEnvType(envType: EnvEnum) { + SettingManagerReal.setServerEnvType(envType) + } + + /** + * 获取当前运行环境 + * @returns + */ + public getServerEnvType(): EnvEnum { + return SettingManagerReal.getServerEnvType() + } + + /** + * 获取当前运行环境的url + * @returns + */ + public getServerEnvUrl(): string { + return SettingManagerReal.getServerEnvUrl() + } + + /** + * 设置厂商id + * @param clientId + */ + public setClientId(clientId: string) { + SettingManagerReal.setClientId(clientId) + } + + /** + * 获取当前厂商id + * @returns + */ + public getClientId(): string | undefined { + return SettingManagerReal.getClientId() + } + + /** + * 根据url,获取对应环境信息 + * @param rul + */ + public getEnvTypeByUrl(url: string): EnvEnum { + return SettingManagerReal.getEnvTypeByUrl(url) + } + + /** + * 根据环境信息,获取url + * @param envType + */ + public getUrlByEnvType(envType: EnvEnum): string { + return SettingManagerReal.getUrlByEnvType(envType) + } +} \ No newline at end of file diff --git a/src/main/ets/public/SignManager.ets b/src/main/ets/public/SignManager.ets new file mode 100644 index 0000000..872e326 --- /dev/null +++ b/src/main/ets/public/SignManager.ets @@ -0,0 +1,73 @@ +import { SignManagerReal } from '../manager/SignManagerReal'; +import { List } from '@kit.ArkTS'; +import { XDialogController } from '@szyx/sdk_base/Index'; +import { CallBackForData } from './callBack/BJCACallMsg'; +import { SignModel } from './bean/SignModel'; + +export class SignManager { + dialogController: XDialogController = {} as XDialogController + + /** + * 开始签名 + * @param uniqueIdList 待签数据 + * @param listener + */ + public signWithFirmId(uniqueIdList: List | Array, listener: (result: CallBackForData>) => void) { + + SignManagerReal.signWithFirmId(uniqueIdList, listener) + + } + + /** + * 开启免密签名 + * @param keepDay 开启天数,1-60 + * @param listener + */ + public keepPin(keepDay: number, listener: (result: CallBackForData) => void) { + + SignManagerReal.keepPin(keepDay, listener) + + } + + /** + * 查询免密签名开启状态 + * @returns 是否已开启 + */ + public isPinExempt(): boolean { + return SignManagerReal.isPinExempt() + } + + /** + * 关闭免密签名 + * + */ + public clearPin(listener: () => void) { + SignManagerReal.clearPin(listener) + } + + /** + * 开启自动签 + * @param sysTag 开启系统标识 + * @param listener + */ + public signForSignAuto(sysTag: string, listener: (result: CallBackForData) => void) { + SignManagerReal.signForSignAuto(sysTag, listener) + } + + /** + * 关闭自动签 + * @param sysTag 开启系统标识 + * @param listener + */ + public stopSignAuto(sysTag: string | undefined, listener: (result: CallBackForData) => void) { + SignManagerReal.stopSignAuto(sysTag, listener) + } + + /** + * 获取自动签信息 + * @param listener + */ + public getSignAutoInfo(listener: (result: CallBackForData) => void) { + SignManagerReal.getSignAutoInfo(listener) + } +} \ No newline at end of file diff --git a/src/main/ets/public/bean/SignModel.ets b/src/main/ets/public/bean/SignModel.ets new file mode 100644 index 0000000..3445ec7 --- /dev/null +++ b/src/main/ets/public/bean/SignModel.ets @@ -0,0 +1,3 @@ +export interface SignModel { + fileUniqueId: string +} \ No newline at end of file diff --git a/src/main/ets/public/bean/UserInfoModel.ets b/src/main/ets/public/bean/UserInfoModel.ets new file mode 100644 index 0000000..b5dd884 --- /dev/null +++ b/src/main/ets/public/bean/UserInfoModel.ets @@ -0,0 +1,14 @@ +export interface UserInfoModel { + certUpdateTipDay: number + deviceId: string + enableCert: boolean + endDate: string + idCardNum: string + idCardType: string + nowDate: string + openId: string + phoneNum: string + picUrl: string + startDate: string + userName: string +} \ No newline at end of file diff --git a/src/main/ets/public/callBack/BJCACallMsg.ets b/src/main/ets/public/callBack/BJCACallMsg.ets new file mode 100644 index 0000000..226911f --- /dev/null +++ b/src/main/ets/public/callBack/BJCACallMsg.ets @@ -0,0 +1,82 @@ +import { UserInfoModel } from '../bean/UserInfoModel' + +export interface CallBackMsg { + code: number + msg: string +} + +export interface CallBackForData { + code: number + msg: string + data?: T +} + +export class BJCACallMsg { + //通用 + public static SUCCESS: CallBackMsg = { + code: 1001, + msg: '操作完成' + } + public static CANCEL: CallBackMsg = { + code: 1002, + msg: '用户取消操作' + } + public static FAILED: CallBackMsg = { + code: 1003, + msg: '用户操作失败' + } + public static UNKOWN: CallBackMsg = { + code: 1004, + msg: '未知错误' + } + public static ROUTER: CallBackMsg = { + code: 1005, + msg: '路由错误' + } + public static ILLEGALITY: CallBackMsg = { + code: 1006, + msg: '参数不合法' + } + public static NOT_CLIENT: CallBackMsg = { + code: 10001, + msg: '厂商id不存在' + } + public static NOT_PHONE: CallBackMsg = { + code: 10002, + msg: '手机号格式错误' + } + // 证书相关 + public static CERT_NOT_EXISTS: CallBackMsg = { + code: 10003, + msg: '证书不存在' + } + public static CERT_EXISTS: CallBackMsg = { + code: 1001, + msg: '证书存在' + } + public static SUCCESS_CERT_INFO: CallBackForData = { + code: 1001, + msg: '获取证书信息成功' + } + public static ERROR_CERT_INFO: CallBackForData = { + code: 10004, + msg: '获取证书信息失败' + } + public static CERT_NOT_UPDATE: CallBackForData = { + code: 10005, + msg: '证书未到可更新时间' + } + // 签名相关 + public static SIGN_CANCEL: CallBackForData = { + code: 1002, + msg: '用户取消操作' + } + public static SIGN_SUCCESS: CallBackForData = { + code: 1001, + msg: '操作完成' + } + public static SIGN_SUCCESS_REST: CallBackForData = { + code: 10011, + msg: '重置密码' + } +} \ No newline at end of file diff --git a/src/main/ets/public/sign/PinDialog.ets b/src/main/ets/public/sign/PinDialog.ets new file mode 100644 index 0000000..5cca58d --- /dev/null +++ b/src/main/ets/public/sign/PinDialog.ets @@ -0,0 +1,263 @@ +import { XDialogCommon, XDialogController } from '@szyx/sdk_base/Index' +import { SignManagerReal } from '../../manager/SignManagerReal' +import { BJCASDK } from '../BJCASDK' +import { BJCACallMsg, CallBackMsg } from '../callBack/BJCACallMsg' + +@Preview +@Component +export struct PinDialog { + controller: XDialogController | null = null + private dialogController: CustomDialogController | null = null + @State list: Array = new Array() + + build() { + // this.buildContent() + } + + aboutToAppear(): void { + this.list = [] + + this.dialogController = new CustomDialogController({ + builder: XDialogCommon({ + dialogContent: () => { + this.buildContent() + }, + }), + alignment: DialogAlignment.Bottom, + autoCancel: true, + customStyle: true, + cancel: () => { + SignManagerReal.listener && SignManagerReal.listener(BJCACallMsg.SIGN_CANCEL) + } + }) + if (this.controller) { + this.controller.open = () => { + this.list = [] + this.dialogController?.open() + } + this.controller.close = () => { + this.list = [] + this.dialogController?.close() + } + } + } + + private addNum(num: string) { + this.list.push(num) + if (this.list.length === 6) { + SignManagerReal.listener && SignManagerReal.listener({ + code: 1001, + msg: '操作完成', + data: this.list.join('') + }) + this.dialogController?.close() + } + } + + @Builder + buildContent() { + Column() { + Text('请输入6位数字密码') + .fontSize(16) + .textAlign(TextAlign.Center) + .width('100%') + .height(60) + Row() { + Column() { + Circle().width(13).height(13).visibility(this.list.length >= 1 ? Visibility.Visible : Visibility.Hidden) + }.width('16.65%').height('100%').justifyContent(FlexAlign.Center) + + Divider().strokeWidth(1).color('#DDDDDD').vertical(true) + Column() { + Circle().width(13).height(13).visibility(this.list.length >= 2 ? Visibility.Visible : Visibility.Hidden) + }.width('16.65%').height('100%').justifyContent(FlexAlign.Center) + + Divider().strokeWidth(1).color('#DDDDDD').vertical(true) + Column() { + Circle().width(13).height(13).visibility(this.list.length >= 3 ? Visibility.Visible : Visibility.Hidden) + }.width('16.65%').height('100%').justifyContent(FlexAlign.Center) + + Divider().strokeWidth(1).color('#DDDDDD').vertical(true) + Column() { + Circle().width(13).height(13).visibility(this.list.length >= 4 ? Visibility.Visible : Visibility.Hidden) + }.width('16.65%').height('100%').justifyContent(FlexAlign.Center) + + Divider().strokeWidth(1).color('#DDDDDD').vertical(true) + Column() { + Circle().width(13).height(13).visibility(this.list.length >= 5 ? Visibility.Visible : Visibility.Hidden) + }.width('16.65%').height('100%').justifyContent(FlexAlign.Center) + + Divider().strokeWidth(1).color('#DDDDDD').vertical(true) + Column() { + Circle().width(13).height(13).visibility(this.list.length >= 6 ? Visibility.Visible : Visibility.Hidden) + }.width('16.65%').height('100%').justifyContent(FlexAlign.Center) + }.height(48).border({ + width: 1, + color: '#DDDDDD' + }).margin({ + left: 10, + right: 10, + top: 30 + }) + + Text('忘记密码?') + .width('100%') + .margin({ top: 12, right: 10 }) + .textAlign(TextAlign.End) + .fontSize(10) + .fontColor('#18ABFB') + .onClick(() => { + BJCASDK.certManager().certResetPin(undefined, (result: CallBackMsg) => { + if (result.code === BJCACallMsg.SUCCESS.code) { + SignManagerReal.listener && SignManagerReal.listener(BJCACallMsg.SIGN_SUCCESS_REST) + } else { + SignManagerReal.listener && SignManagerReal.listener(result) + } + }) + }) + + + Divider().strokeWidth(0.5).color('#DDDDDD').margin({ + top: 30 + }) + Row() { + Text('1') + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .onClick(() => { + this.addNum('1') + }) + Divider().strokeWidth(0.5).color('#DDDDDD').vertical(true) + Text('2') + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .onClick(() => { + this.addNum('2') + }) + Divider().strokeWidth(0.5).color('#DDDDDD').vertical(true) + Text('3') + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .onClick(() => { + this.addNum('3') + }) + }.height(55) + + Divider().strokeWidth(0.5).color('#DDDDDD') + Row() { + Text('4') + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .onClick(() => { + this.addNum('4') + }) + Divider().strokeWidth(0.5).color('#DDDDDD').vertical(true) + Text('5') + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .onClick(() => { + this.addNum('5') + }) + Divider().strokeWidth(0.5).color('#DDDDDD').vertical(true) + Text('6') + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .onClick(() => { + this.addNum('6') + }) + }.height(55) + + Divider().strokeWidth(0.5).color('#DDDDDD') + Row() { + Text('7') + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .onClick(() => { + this.addNum('7') + }) + Divider().strokeWidth(0.5).color('#DDDDDD').vertical(true) + Text('8') + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .onClick(() => { + this.addNum('8') + }) + Divider().strokeWidth(0.5).color('#DDDDDD').vertical(true) + Text('9') + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .onClick(() => { + this.addNum('9') + }) + }.height(55) + + Divider().strokeWidth(0.5).color('#DDDDDD') + Row() { + Text() + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .backgroundColor('#E3E7EE') + Divider().strokeWidth(0.5).color('#DDDDDD').vertical(true) + Text('0') + .width('33.33%') + .height('100%') + .textAlign(TextAlign.Center) + .fontSize(30) + .fontColor('#333333') + .onClick(() => { + this.addNum('0') + }) + Divider().strokeWidth(0.5).color('#DDDDDD').vertical(true) + Column() { + Text('X') + .width(24) + .height(24) + .textAlign(TextAlign.Center) + .fontSize(18) + .fontColor('#999999') + .backgroundColor('#FFFFFF') + } + .width('33.33%') + .height('100%') + .justifyContent(FlexAlign.Center) + .backgroundColor('#E3E7EE') + .onClick(() => { + this.list.pop() + }) + }.height(55) + + } + .width('100%') + .backgroundColor('#ffffff') + } +} \ No newline at end of file diff --git a/src/main/ets/util/base64Util.js b/src/main/ets/util/base64Util.js new file mode 100644 index 0000000..bafbcb5 --- /dev/null +++ b/src/main/ets/util/base64Util.js @@ -0,0 +1,170 @@ +/* eslint-disable no-useless-escape */ +/************************************************************************************************* + *
+ * @包路径:
+ * @版权所有: 北京数字医信科技有限公司 (C) 2019
+ *
+ * @类描述:
+ * @版本:       V3.2.0
+ * @作者        daizhenhong
+ * @创建时间    2019/6/4 3:30 PM
+ *
+ * @修改记录:
+ -----------------------------------------------------------------------------------------------
+ ----------- 时间      |   修改人    |     修改的方法       |         修改描述   ---------------
+ -----------------------------------------------------------------------------------------------
+ 
+ ************************************************************************************************/ + +/* + * base64编码(编码,配合encodeURIComponent使用) + * @parm : str 传入的字符串 + * 使用: + 1、引入util.js(路径更改) :const util = require('../../utils/util.js'); + 2、util.base64_encode(util.utf16to8('base64 编码')); + */ +function base64Encode (str) { + // 下面是64个基本的编码 + let base64EncodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/' + let out, i, len + let c1, c2, c3 + len = str.length + i = 0 + out = '' + while (i < len) { + c1 = str.charCodeAt(i++) & 0xff + if (i === len) { + out += base64EncodeChars.charAt(c1 >> 2) + out += base64EncodeChars.charAt((c1 & 0x3) << 4) + out += '==' + break + } + c2 = str.charCodeAt(i++) + if (i === len) { + out += base64EncodeChars.charAt(c1 >> 2) + out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)) + out += base64EncodeChars.charAt((c2 & 0xF) << 2) + out += '=' + break + } + c3 = str.charCodeAt(i++) + out += base64EncodeChars.charAt(c1 >> 2) + out += base64EncodeChars.charAt(((c1 & 0x3) << 4) | ((c2 & 0xF0) >> 4)) + out += base64EncodeChars.charAt(((c2 & 0xF) << 2) | ((c3 & 0xC0) >> 6)) + out += base64EncodeChars.charAt(c3 & 0x3F) + } + return out +} + +/* + * base64编码(编码,配合encodeURIComponent使用) + * @parm : str 传入的字符串 + */ +function utf16to8 (str) { + let out, i, len, c + out = '' + len = str.length + for (i = 0; i < len; i++) { + c = str.charCodeAt(i) + if ((c >= 0x0001) && (c <= 0x007F)) { + out += str.charAt(i) + } else if (c > 0x07FF) { + out += String.fromCharCode(0xE0 | ((c >> 12) & 0x0F)) + out += String.fromCharCode(0x80 | ((c >> 6) & 0x3F)) + out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)) + } else { + out += String.fromCharCode(0xC0 | ((c >> 6) & 0x1F)) + out += String.fromCharCode(0x80 | ((c >> 0) & 0x3F)) + } + } + return out +} + +/* + * base64解码(配合decodeURIComponent使用) + * @parm : input 传入的字符串 + * 使用: + 1、引入util.js(路径更改) :const util = require('../../utils/util.js'); + 2、util.base64_decode('YmFzZTY0IOe8lueggQ=='); + */ +function base64Decode (input) { + let base64EncodeChars = 'ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/=' + let output = '' + let chr1, chr2, chr3 + let enc1, enc2, enc3, enc4 + let i = 0 + input = input.replace(/[^A-Za-z0-9\+\/\=]/g, '') + while (i < input.length) { + enc1 = base64EncodeChars.indexOf(input.charAt(i++)) + enc2 = base64EncodeChars.indexOf(input.charAt(i++)) + enc3 = base64EncodeChars.indexOf(input.charAt(i++)) + enc4 = base64EncodeChars.indexOf(input.charAt(i++)) + chr1 = (enc1 << 2) | (enc2 >> 4) + chr2 = ((enc2 & 15) << 4) | (enc3 >> 2) + chr3 = ((enc3 & 3) << 6) | enc4 + output = output + String.fromCharCode(chr1) + if (enc3 !== 64) { + output = output + String.fromCharCode(chr2) + } + if (enc4 !== 64) { + output = output + String.fromCharCode(chr3) + } + } + return utf8Decode(output) +} + +/* + * utf-8解码 + * @parm : utftext 传入的字符串 + */ +function utf8Decode (utftext) { + let string = '' + let i = 0 + let c = 0 + let c1 = 0 + let c2 = 0 + while (i < utftext.length) { + c = utftext.charCodeAt(i) + if (c < 128) { + string += String.fromCharCode(c) + i++ + } else if ((c > 191) && (c < 224)) { + c1 = utftext.charCodeAt(i + 1) + string += String.fromCharCode(((c & 31) << 6) | (c1 & 63)) + i += 2 + } else { + c1 = utftext.charCodeAt(i + 1) + c2 = utftext.charCodeAt(i + 2) + string += String.fromCharCode(((c & 15) << 12) | ((c1 & 63) << 6) | (c2 & 63)) + i += 3 + } + } + return string +} + +/* + * base64编码函数封装 + * @parm: str(传入要编成base64的内容) + * 使用: + 1、引入util.js(路径更改) :const util = require('../../utils/util.js'); + 2、util.baseEncode('base64 编码'); +*/ +function baseEncode (str) { + return base64Encode(utf16to8(str)) +} + +/* + * base64解码函数封装 + * @parm: str(传入要解为正常字体) + * 使用: + 1、引入util.js(路径更改) :const util = require('../../utils/util.js'); + 2、util.baseDecode(util.baseEncode('base64 编码')) +*/ +function baseDecode (str) { + return base64Decode(str) +}// 抛出函数使用 + +export { + baseEncode, + baseDecode +} diff --git a/src/main/ets/util/encodeUtil.js b/src/main/ets/util/encodeUtil.js new file mode 100644 index 0000000..a64371a --- /dev/null +++ b/src/main/ets/util/encodeUtil.js @@ -0,0 +1,9 @@ +import {JSEncrypt} from './jsencryp.js' +// 医网信公钥,用于数据加密 +const rsa_public_key = 'MIGfMA0GCSqGSIb3DQEBAQUAA4GNADCBiQKBgQDsLnkJaVr5hdNlqPNhU+YW4LctrwuDCeUb+GHS\nPNd/g83nNGibYWqNmYgyVw2jZPTDNrZDw/piWhPsV9iWY0Ie6zuUbrKRQEWBEuQxXhEoRv92nw1B\nWzd7vvOk63Xss7iWqLn8PvE6a4OJC90mWPDQFfiLl49SYbK5QvfD5lY5TQIDAQAB' + +export function encodeByRsa(origin) { + let jsEncrypt = new JSEncrypt(); + jsEncrypt.setPublicKey(rsa_public_key) + return jsEncrypt.encrypt(origin) +} \ No newline at end of file diff --git a/src/main/ets/util/jsencryp.js b/src/main/ets/util/jsencryp.js new file mode 100644 index 0000000..a23415f --- /dev/null +++ b/src/main/ets/util/jsencryp.js @@ -0,0 +1,5385 @@ +// 由于小程序不支持window对象,所以,需要修改源码。 +// https://blog.csdn.net/qq_34672907/article/details/89605498 +(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'; + + // 用来替换 navigator2 + var navigator2 = { + appName: 'Netscape', + userAgent: 'Mozilla/5.0 (iPhone; CPU iPhone OS 9_1 like Mac OS X) AppleWebKit/601.1.46 (KHTML, like Gecko) Version/9.0 Mobile/13B143 Safari/601.1' + }; + // 用来替换window2 + var window2 = { + ASN1: null, + Base64: null, + Hex: null, + crypto: null, + href: null + }; + //--------- 这里结束添加-------- + +var BI_RM = "0123456789abcdefghijklmnopqrstuvwxyz"; +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 window2 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 && (navigator2.appName == "Microsoft Internet Explorer")) { + BigInteger.prototype.am = am2; + dbits = 30; +} +else if (j_lm && (navigator2.appName != "Netscape")) { + BigInteger.prototype.am = am1; + dbits = 26; +} +else { // Mozilla/Netscape seems to prefer am3 + BigInteger.prototype.am = am3; + dbits = 28; +} +BigInteger.prototype.DB = dbits; +BigInteger.prototype.DM = ((1 << dbits) - 1); +BigInteger.prototype.DV = (1 << dbits); +var BI_FP = 52; +BigInteger.prototype.FV = Math.pow(2, BI_FP); +BigInteger.prototype.F1 = BI_FP - dbits; +BigInteger.prototype.F2 = 2 * dbits - BI_FP; +// 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 (window2.crypto && window2.crypto.getRandomValues) { + // Extract entropy (2048 bits) from RNG if available + var z = new Uint32Array(256); + window2.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 (window2.removeEventListener) { + window2.removeEventListener("mousemove", onMouseMoveListener_1, false); + } + else if (window2.detachEvent) { + window2.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 (window2.addEventListener) { + window2.addEventListener("mousemove", onMouseMoveListener_1, false); + } + else if (window2.attachEvent) { + window2.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(navigator2.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 + */ +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"; + + /** + * 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); + }; + + /** + * 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); + }; + + /** + * 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; + }; + + 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); + +// ******************************************************************** +/** + * 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); + +// ******************************************************************** +/** + * 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); + +// ******************************************************************** +/** + * 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); + +// ******************************************************************** +/** + * 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"; + + /** + * 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; + }; + + 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); + +// ******************************************************************** +/** + * 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); + }; + + 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; + }; + + 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); + +// ******************************************************************** +/** + * 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; + }; + + 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; +}()); + +window2.JSEncrypt = JSEncrypt; + +exports.JSEncrypt = JSEncrypt; +exports.default = JSEncrypt; + +Object.defineProperty(exports, '__esModule', { value: true }); + +}))); \ No newline at end of file diff --git a/src/main/ets/util/md5.js b/src/main/ets/util/md5.js new file mode 100644 index 0000000..3d2b018 --- /dev/null +++ b/src/main/ets/util/md5.js @@ -0,0 +1,257 @@ +/* + * A JavaScript implementation of the RSA Data Security, Inc. MD5 Message + * Digest Algorithm, as defined in RFC 1321. + * Version 2.1 Copyright (C) Paul Johnston 1999 - 2002. + * Other contributors: Greg Holt, Andrew Kepert, Ydnar, Lostinet + * Distributed under the BSD License + * See http://pajhome.org.uk/crypt/md5 for more info. + */ + +/* + * Configurable variables. You may need to tweak these to be compatible with + * the server-side, but the defaults work in most cases. + */ +var hexcase = 0; /* hex output format. 0 - lowercase; 1 - uppercase */ +var b64pad = ""; /* base-64 pad character. "=" for strict RFC compliance */ +var chrsz = 8; /* bits per input character. 8 - ASCII; 16 - Unicode */ + +/* + * These are the functions you'll usually want to call + * They take string arguments and return either hex or base-64 encoded strings + */ +//32位小写 +export function md5_hex(s){ return binl2hex(core_md5(str2binl(s), s.length * chrsz));} +export function md5_b64(s){ return binl2b64(core_md5(str2binl(s), s.length * chrsz));} +export function md5_str(s){ return binl2str(core_md5(str2binl(s), s.length * chrsz));} +export function md5_hex_hmac(key, data) { return binl2hex(core_hmac_md5(key, data)); } +export function md5_b64_hmac(key, data) { return binl2b64(core_hmac_md5(key, data)); } +export function md5_str_hmac(key, data) { return binl2str(core_hmac_md5(key, data)); } + +/* + * Perform a simple self-test to see if the VM is working + */ +function md5_vm_test() +{ + return md5_hex("abc") == "900150983cd24fb0d6963f7d28e17f72"; +} + +/* + * Calculate the MD5 of an array of little-endian words, and a bit length + */ +function core_md5(x, len) +{ + /* append padding */ + x[len >> 5] |= 0x80 << ((len) % 32); + x[(((len + 64) >>> 9) << 4) + 14] = len; + + var a = 1732584193; + var b = -271733879; + var c = -1732584194; + var d = 271733878; + + for(var i = 0; i < x.length; i += 16) + { + var olda = a; + var oldb = b; + var oldc = c; + var oldd = d; + + a = md5_ff(a, b, c, d, x[i+ 0], 7 , -680876936); + d = md5_ff(d, a, b, c, x[i+ 1], 12, -389564586); + c = md5_ff(c, d, a, b, x[i+ 2], 17, 606105819); + b = md5_ff(b, c, d, a, x[i+ 3], 22, -1044525330); + a = md5_ff(a, b, c, d, x[i+ 4], 7 , -176418897); + d = md5_ff(d, a, b, c, x[i+ 5], 12, 1200080426); + c = md5_ff(c, d, a, b, x[i+ 6], 17, -1473231341); + b = md5_ff(b, c, d, a, x[i+ 7], 22, -45705983); + a = md5_ff(a, b, c, d, x[i+ 8], 7 , 1770035416); + d = md5_ff(d, a, b, c, x[i+ 9], 12, -1958414417); + c = md5_ff(c, d, a, b, x[i+10], 17, -42063); + b = md5_ff(b, c, d, a, x[i+11], 22, -1990404162); + a = md5_ff(a, b, c, d, x[i+12], 7 , 1804603682); + d = md5_ff(d, a, b, c, x[i+13], 12, -40341101); + c = md5_ff(c, d, a, b, x[i+14], 17, -1502002290); + b = md5_ff(b, c, d, a, x[i+15], 22, 1236535329); + + a = md5_gg(a, b, c, d, x[i+ 1], 5 , -165796510); + d = md5_gg(d, a, b, c, x[i+ 6], 9 , -1069501632); + c = md5_gg(c, d, a, b, x[i+11], 14, 643717713); + b = md5_gg(b, c, d, a, x[i+ 0], 20, -373897302); + a = md5_gg(a, b, c, d, x[i+ 5], 5 , -701558691); + d = md5_gg(d, a, b, c, x[i+10], 9 , 38016083); + c = md5_gg(c, d, a, b, x[i+15], 14, -660478335); + b = md5_gg(b, c, d, a, x[i+ 4], 20, -405537848); + a = md5_gg(a, b, c, d, x[i+ 9], 5 , 568446438); + d = md5_gg(d, a, b, c, x[i+14], 9 , -1019803690); + c = md5_gg(c, d, a, b, x[i+ 3], 14, -187363961); + b = md5_gg(b, c, d, a, x[i+ 8], 20, 1163531501); + a = md5_gg(a, b, c, d, x[i+13], 5 , -1444681467); + d = md5_gg(d, a, b, c, x[i+ 2], 9 , -51403784); + c = md5_gg(c, d, a, b, x[i+ 7], 14, 1735328473); + b = md5_gg(b, c, d, a, x[i+12], 20, -1926607734); + + a = md5_hh(a, b, c, d, x[i+ 5], 4 , -378558); + d = md5_hh(d, a, b, c, x[i+ 8], 11, -2022574463); + c = md5_hh(c, d, a, b, x[i+11], 16, 1839030562); + b = md5_hh(b, c, d, a, x[i+14], 23, -35309556); + a = md5_hh(a, b, c, d, x[i+ 1], 4 , -1530992060); + d = md5_hh(d, a, b, c, x[i+ 4], 11, 1272893353); + c = md5_hh(c, d, a, b, x[i+ 7], 16, -155497632); + b = md5_hh(b, c, d, a, x[i+10], 23, -1094730640); + a = md5_hh(a, b, c, d, x[i+13], 4 , 681279174); + d = md5_hh(d, a, b, c, x[i+ 0], 11, -358537222); + c = md5_hh(c, d, a, b, x[i+ 3], 16, -722521979); + b = md5_hh(b, c, d, a, x[i+ 6], 23, 76029189); + a = md5_hh(a, b, c, d, x[i+ 9], 4 , -640364487); + d = md5_hh(d, a, b, c, x[i+12], 11, -421815835); + c = md5_hh(c, d, a, b, x[i+15], 16, 530742520); + b = md5_hh(b, c, d, a, x[i+ 2], 23, -995338651); + + a = md5_ii(a, b, c, d, x[i+ 0], 6 , -198630844); + d = md5_ii(d, a, b, c, x[i+ 7], 10, 1126891415); + c = md5_ii(c, d, a, b, x[i+14], 15, -1416354905); + b = md5_ii(b, c, d, a, x[i+ 5], 21, -57434055); + a = md5_ii(a, b, c, d, x[i+12], 6 , 1700485571); + d = md5_ii(d, a, b, c, x[i+ 3], 10, -1894986606); + c = md5_ii(c, d, a, b, x[i+10], 15, -1051523); + b = md5_ii(b, c, d, a, x[i+ 1], 21, -2054922799); + a = md5_ii(a, b, c, d, x[i+ 8], 6 , 1873313359); + d = md5_ii(d, a, b, c, x[i+15], 10, -30611744); + c = md5_ii(c, d, a, b, x[i+ 6], 15, -1560198380); + b = md5_ii(b, c, d, a, x[i+13], 21, 1309151649); + a = md5_ii(a, b, c, d, x[i+ 4], 6 , -145523070); + d = md5_ii(d, a, b, c, x[i+11], 10, -1120210379); + c = md5_ii(c, d, a, b, x[i+ 2], 15, 718787259); + b = md5_ii(b, c, d, a, x[i+ 9], 21, -343485551); + + a = safe_add(a, olda); + b = safe_add(b, oldb); + c = safe_add(c, oldc); + d = safe_add(d, oldd); + } + return Array(a, b, c, d); + +} + +/* + * These functions implement the four basic operations the algorithm uses. + */ +function md5_cmn(q, a, b, x, s, t) +{ + return safe_add(bit_rol(safe_add(safe_add(a, q), safe_add(x, t)), s),b); +} +function md5_ff(a, b, c, d, x, s, t) +{ + return md5_cmn((b & c) | ((~b) & d), a, b, x, s, t); +} +function md5_gg(a, b, c, d, x, s, t) +{ + return md5_cmn((b & d) | (c & (~d)), a, b, x, s, t); +} +function md5_hh(a, b, c, d, x, s, t) +{ + return md5_cmn(b ^ c ^ d, a, b, x, s, t); +} +function md5_ii(a, b, c, d, x, s, t) +{ + return md5_cmn(c ^ (b | (~d)), a, b, x, s, t); +} + +/* + * Calculate the HMAC-MD5, of a key and some data + */ +function core_hmac_md5(key, data) +{ + var bkey = str2binl(key); + if(bkey.length > 16) bkey = core_md5(bkey, key.length * chrsz); + + var ipad = Array(16), opad = Array(16); + for(var i = 0; i < 16; i++) + { + ipad[i] = bkey[i] ^ 0x36363636; + opad[i] = bkey[i] ^ 0x5C5C5C5C; + } + + var hash = core_md5(ipad.concat(str2binl(data)), 512 + data.length * chrsz); + return core_md5(opad.concat(hash), 512 + 128); +} + +/* + * Add integers, wrapping at 2^32. This uses 16-bit operations internally + * to work around bugs in some JS interpreters. + */ +function safe_add(x, y) +{ + var lsw = (x & 0xFFFF) + (y & 0xFFFF); + var msw = (x >> 16) + (y >> 16) + (lsw >> 16); + return (msw << 16) | (lsw & 0xFFFF); +} + +/* + * Bitwise rotate a 32-bit number to the left. + */ +function bit_rol(num, cnt) +{ + return (num << cnt) | (num >>> (32 - cnt)); +} + +/* + * Convert a string to an array of little-endian words + * If chrsz is ASCII, characters >255 have their hi-byte silently ignored. + */ +function str2binl(str) +{ + var bin = Array(); + var mask = (1 << chrsz) - 1; + for(var i = 0; i < str.length * chrsz; i += chrsz) + bin[i>>5] |= (str.charCodeAt(i / chrsz) & mask) << (i%32); + return bin; +} + +/* + * Convert an array of little-endian words to a string + */ +function binl2str(bin) +{ + var str = ""; + var mask = (1 << chrsz) - 1; + for(var i = 0; i < bin.length * 32; i += chrsz) + str += String.fromCharCode((bin[i>>5] >>> (i % 32)) & mask); + return str; +} + +/* + * Convert an array of little-endian words to a hex string. + */ +function binl2hex(binarray) +{ + var hex_tab = hexcase ? "0123456789ABCDEF" : "0123456789abcdef"; + var str = ""; + for(var i = 0; i < binarray.length * 4; i++) + { + str += hex_tab.charAt((binarray[i>>2] >> ((i%4)*8+4)) & 0xF) + + hex_tab.charAt((binarray[i>>2] >> ((i%4)*8 )) & 0xF); + } + return str; +} + +/* + * Convert an array of little-endian words to a base-64 string + */ +function binl2b64(binarray) +{ + var tab = "ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/"; + var str = ""; + for(var i = 0; i < binarray.length * 4; i += 3) + { + var triplet = (((binarray[i >> 2] >> 8 * ( i %4)) & 0xFF) << 16) + | (((binarray[i+1 >> 2] >> 8 * ((i+1)%4)) & 0xFF) << 8 ) + | ((binarray[i+2 >> 2] >> 8 * ((i+2)%4)) & 0xFF); + for(var j = 0; j < 4; j++) + { + if(i * 8 + j * 6 > binarray.length * 32) str += b64pad; + else str += tab.charAt((triplet >> 6*(3-j)) & 0x3F); + } + } + return str; +} diff --git a/src/main/module.json5 b/src/main/module.json5 new file mode 100644 index 0000000..8b8a949 --- /dev/null +++ b/src/main/module.json5 @@ -0,0 +1,12 @@ +{ + "module": { + "name": "sdk_ywx", + "type": "har", + "deviceTypes": [ + "phone" + ], + "description": "签名sdk", + "requestPermissions": [ + ] + } +} diff --git a/src/main/resources/base/element/string.json b/src/main/resources/base/element/string.json new file mode 100644 index 0000000..902549d --- /dev/null +++ b/src/main/resources/base/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + }, + { + "name": "mo_ywx_module_cert_title", + "value": "医网信数字证书" + } + ] +} diff --git a/src/main/resources/base/media/mo_ywx_icon_title.png b/src/main/resources/base/media/mo_ywx_icon_title.png new file mode 100644 index 0000000000000000000000000000000000000000..2556e29fad96fe2032d96419ba4db07630c5d39a GIT binary patch literal 4635 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Ðdi=z$R6-}%mFqjZMS3$#l&i^cq*7MWyN^{A5vBU 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 literal 0 HcmV?d00001 diff --git a/src/main/resources/base/media/mo_ywx_module_icon_stamp.png b/src/main/resources/base/media/mo_ywx_module_icon_stamp.png new file mode 100644 index 0000000000000000000000000000000000000000..7682c83bcca8edc2e71b94ae67d9f74440bedb50 GIT binary patch literal 15792 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 G3-~`kJ`)ZA literal 0 HcmV?d00001 diff --git a/src/main/resources/base/profile/main_pages.json b/src/main/resources/base/profile/main_pages.json new file mode 100644 index 0000000..232c920 --- /dev/null +++ b/src/main/resources/base/profile/main_pages.json @@ -0,0 +1,6 @@ +{ + "src": [ + "pages/PinView", + "pages/CertDetails" + ] +} diff --git a/src/main/resources/en_US/element/string.json b/src/main/resources/en_US/element/string.json new file mode 100644 index 0000000..16906a0 --- /dev/null +++ b/src/main/resources/en_US/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + }, + { + "name": "mo_ywx_module_cert_title", + "value": "Digital certificate" + } + ] +} diff --git a/src/main/resources/zh_CN/element/string.json b/src/main/resources/zh_CN/element/string.json new file mode 100644 index 0000000..902549d --- /dev/null +++ b/src/main/resources/zh_CN/element/string.json @@ -0,0 +1,12 @@ +{ + "string": [ + { + "name": "page_show", + "value": "page from package" + }, + { + "name": "mo_ywx_module_cert_title", + "value": "医网信数字证书" + } + ] +} diff --git a/src/test/List.test.ets b/src/test/List.test.ets new file mode 100644 index 0000000..bb5b5c3 --- /dev/null +++ b/src/test/List.test.ets @@ -0,0 +1,5 @@ +import localUnitTest from './LocalUnit.test'; + +export default function testsuite() { + localUnitTest(); +} \ No newline at end of file diff --git a/src/test/LocalUnit.test.ets b/src/test/LocalUnit.test.ets new file mode 100644 index 0000000..ed22d4d --- /dev/null +++ b/src/test/LocalUnit.test.ets @@ -0,0 +1,33 @@ +import { describe, beforeAll, beforeEach, afterEach, afterAll, it, expect } from '@ohos/hypium'; + +export default function localUnitTest() { + describe('localUnitTest',() => { + // Defines a test suite. Two parameters are supported: test suite name and test suite function. + beforeAll(() => { + // Presets an action, which is performed only once before all test cases of the test suite start. + // This API supports only one parameter: preset action function. + }); + beforeEach(() => { + // Presets an action, which is performed before each unit test case starts. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: preset action function. + }); + afterEach(() => { + // Presets a clear action, which is performed after each unit test case ends. + // The number of execution times is the same as the number of test cases defined by **it**. + // This API supports only one parameter: clear action function. + }); + afterAll(() => { + // Presets a clear action, which is performed after all test cases of the test suite end. + // This API supports only one parameter: clear action function. + }); + it('assertContain', 0, () => { + // Defines a test case. This API supports three parameters: test case name, filter parameter, and test case function. + let a = 'abc'; + let b = 'b'; + // Defines a variety of assertion methods, which are used to declare expected boolean conditions. + expect(a).assertContain(b); + expect(a).assertEqual(a); + }); + }); +} \ No newline at end of file