http-request-manager 15.0.9 → 15.0.10
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/esm2022/lib/services/utils/encryption/asymmetrical-encryption.service.mjs +1 -1
- package/esm2022/lib/services/utils/encryption/symmetrical-encryption.service.mjs +27 -163
- package/fesm2022/http-request-manager.mjs +26 -162
- package/fesm2022/http-request-manager.mjs.map +1 -1
- package/http-request-manager-15.0.10.tgz +0 -0
- package/lib/services/utils/encryption/symmetrical-encryption.service.d.ts +1 -12
- package/package.json +4 -2
- package/http-request-manager-15.0.9.tgz +0 -0
|
@@ -183,4 +183,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
183
183
|
providedIn: 'root'
|
|
184
184
|
}]
|
|
185
185
|
}], ctorParameters: function () { return []; } });
|
|
186
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bW1ldHJpY2FsLWVuY3J5cHRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvc2VydmljZXMvdXRpbHMvZW5jcnlwdGlvbi9hc3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQ2hFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBS2pELE1BQU0sT0FBTyw2QkFBNkI7SUFFeEMsZ0JBQWUsQ0FBQztJQUVoQixlQUFlLENBQUMsYUFBYSxHQUFHLElBQUk7UUFFbEMsbUNBQW1DO1FBQ25DLGlCQUFpQjtRQUVsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEM7WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixhQUFhO1lBQ2IsY0FBYyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1NBQzFCLEVBQ0QsSUFBSSxFQUFFLG1CQUFtQjtRQUN6QixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FDdkIsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFvQixFQUFFLElBQVk7UUFFNUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxP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QUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFFbEIsa0NBQWtDO1lBRWxDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztpQkFDekIsSUFBSSxDQUNILFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxLQUFLLENBQUE7WUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxZQUFZLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUE7UUFFSixDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFBQSxDQUFDOytHQWhSUyw2QkFBNkI7bUhBQTdCLDZCQUE2QixjQUY1QixNQUFNOzs0RkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBmcm9tIH0gZnJvbSAncnhqcyc7XG5pbXBvcnQgeyBtYXAsIGNhdGNoRXJyb3IgfSBmcm9tICdyeGpzL29wZXJhdG9ycyc7XG5cbkBJbmplY3RhYmxlKHtcbiAgcHJvdmlkZWRJbjogJ3Jvb3QnXG59KVxuZXhwb3J0IGNsYXNzIEFzeW1tZXRyaWNhbEVuY3J5cHRpb25TZXJ2aWNlIHtcblxuICBjb25zdHJ1Y3RvcigpIHt9XG5cbiAgZ2VuZXJhdGVLZXlQYWlyKG1vZHVsdXNMZW5ndGggPSAyMDQ4KTogT2JzZXJ2YWJsZTxDcnlwdG9LZXlQYWlyPiB7XG5cbiAgICAvLyBtb2R1bHVzTGVuZ3RoIC0gMTAyNCwgMjA0OCwgNDA5NlxuICAgIC8vIGhhc2ggLSBTSEEtMjU2XG5cbiAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuZ2VuZXJhdGVLZXkoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiUlNBLU9BRVBcIixcbiAgICAgICAgbW9kdWx1c0xlbmd0aCxcbiAgICAgICAgcHVibGljRXhwb25lbnQ6IG5ldyBVaW50OEFycmF5KFsxLCAwLCAxXSksIC8vIDY1NTM3XG4gICAgICAgIGhhc2g6IHsgbmFtZTogXCJTSEEtMjU2XCIgfVxuICAgICAgfSxcbiAgICAgIHRydWUsIC8vIEV4dHJhY3RhYmxlIGtleXNcbiAgICAgIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdXG4gICAgKSlcblxuICB9XG5cbiAgZW5jcnlwdERhdGEocHVibGljS2V5OiBDcnlwdG9LZXksIGRhdGE6IHN0cmluZykge1xuXG4gICAgY29uc3QgZW5jb2RlZERhdGEgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGF0YSlcblxuICAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuZW5jcnlwdChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJSU0EtT0FFUFwiXG4gICAgICB9LFxuICAgICAgcHVibGljS2V5LFxuICAgICAgZW5jb2RlZERhdGFcbiAgICApKS5waXBlKFxuICAgICAgbWFwKGVuYyA9PiB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoZW5jKSlcbiAgICApXG5cbiAgfVxuXG4gIGRlY3J5cHREYXRhKHByaXZhdGVLZXk6IENyeXB0b0tleSwgZW5jcnlwdGVkRGF0YTogc3RyaW5nKSB7XG5cbiAgICBjb25zdCBlbmNTdHIgPSB0aGlzLmJhc2U2NFRvQXJyYXlCdWZmZXIoZW5jcnlwdGVkRGF0YSlcblxuICAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJSU0EtT0FFUFwiXG4gICAgICB9LFxuICAgICAgcHJpdmF0ZUtleSxcbiAgICAgIGVuY1N0clxuICAgICkudGhlbihkZWNyeXB0ZWREYXRhID0+IHtcbiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGVjcnlwdGVkRGF0YSlcbiAgICB9KSlcblxuICB9XG5cbiAgcGVtVG9BcnJheUJ1ZmZlcihwZW06IHN0cmluZyk6IEFycmF5QnVmZmVyIHtcblxuICAgIGNvbnN0IGI2NCA9IHBlbS5yZXBsYWNlKC8oLS0tLS1CRUdJTiAoUlNBICk/KFBSSVZBVEV8UFVCTElDKSBLRVktLS0tLXwtLS0tLUVORCAoUlNBICk/KFBSSVZBVEV8UFVCTElDKSBLRVktLS0tLXxcXG4pL2csICcnKVxuICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYjY0KVxuICAgIGNvbnN0IGxlbiA9IGJpbmFyeVN0cmluZy5sZW5ndGhcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIobGVuKVxuICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2aWV3W2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSlcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyXG5cbiAgfVxuXG4gIGJhc2U2NFRvQXJyYXlCdWZmZXIoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG5cbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKGJhc2U2NCk7XG4gICAgY29uc3QgbGVuID0gYmluYXJ5U3RyaW5nLmxlbmd0aDtcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIobGVuKTtcbiAgICBjb25zdCB2aWV3ID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgICAgdmlld1tpXSA9IGJpbmFyeVN0cmluZy5jaGFyQ29kZUF0KGkpO1xuICAgIH1cblxuICAgIHJldHVybiBidWZmZXI7XG4gIH1cblxuICBhcnJheUJ1ZmZlclRvQmFzZTY0KGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xuXG4gICAgbGV0IGJpbmFyeSA9ICcnO1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYnVmZmVyKTtcbiAgICBjb25zdCBsZW4gPSBieXRlcy5ieXRlTGVuZ3RoO1xuXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xuICAgICAgYmluYXJ5ICs9IFN0cmluZy5mcm9tQ2hhckNvZGUoYnl0ZXNbaV0pO1xuICAgIH1cblxuICAgIHJldHVybiB3aW5kb3cuYnRvYShiaW5hcnkpXG5cbiAgfVxuXG4gIGJhc2U2NFRvUEVNKGJhc2U2NEtleTogc3RyaW5nLCBwdWJsaWNLZXkgPSB0cnVlKSB7XG5cbiAgICBjb25zdCBrZXlUeXBlID0gKHB1YmxpY0tleSkgPyAnUFVCTElDJyA6ICdQUklWQVRFJ1xuXG4gICAgY29uc3QgaGVhZGVyID0gYC0tLS0tQkVHSU4gJHtrZXlUeXBlfSBLRVktLS0tLVxcbmBcbiAgICBjb25zdCBmb290ZXIgPSBgXFxuLS0tLS1FTkQgJHtrZXlUeXBlfSBLRVktLS0tLWBcblxuICAgIGNvbnN0IGtleUJvZHkgPSBiYXNlNjRLZXkubWF0Y2goLy57MSw2NH0vZyk/LmpvaW4oXCJcXG5cIikgfHwgXCJcIlxuXG4gICAgcmV0dXJuIGhlYWRlciArIGtleUJvZHkgKyBmb290ZXJcblxuICB9XG5cbiAgcGVtVG9DcnlwdG9LZXkoXG4gICAgcGVtOiBzdHJpbmcsXG4gICAgYWxnb3JpdGhtOiBSc2FIYXNoZWRLZXlHZW5QYXJhbXMsXG4gICAgZXh0cmFjdGFibGU6IGJvb2xlYW4sXG4gICAga2V5VXNhZ2VzOiBLZXlVc2FnZVtdLFxuICAgIGZvcm1hdDogYW55ID0gXCJwa2NzOFwiIC8vXCJyYXdcIiB8IFwicGtjczhcIiB8IFwic3BraVwiXG4gICAgKSB7XG5cbiAgICBjb25zdCBidWZmZXIgPSB0aGlzLnBlbVRvQXJyYXlCdWZmZXIocGVtKTtcblxuICAgIGNvbnNvbGUubG9nKCdidWZmZXIgZm91bmQgJywgYnVmZmVyKTtcblxuICAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgZm9ybWF0LFxuICAgICAgYnVmZmVyLFxuICAgICAgYWxnb3JpdGhtLFxuICAgICAgZXh0cmFjdGFibGUsXG4gICAgICBrZXlVc2FnZXNcbiAgICApKVxuXG4gIH1cblxuICAvLyBURVNUSU5HXG5cbiAgdGVzdEdlbmVyYXRlS2V5cygpOiBPYnNlcnZhYmxlPHN0cmluZz4ge1xuICAgIGNvbnN0IHRlc3RTZXF1ZW5jZTogQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4gPSBuZXcgQmVoYXZpb3JTdWJqZWN0PHN0cmluZz4oXCJcIik7XG4gICAgY29uc3QgdGVzdFNlcXVlbmNlJDogT2JzZXJ2YWJsZTxzdHJpbmc+ID0gdGVzdFNlcXVlbmNlLmFzT2JzZXJ2YWJsZSgpO1xuICAgIHRlc3RTZXF1ZW5jZS5uZXh0KFwiVGVzdCBHZW5lcmF0aW5nIEtleXNcIik7XG5cbiAgICAvLyBHRU5FUkFURSBLRVlTXG4gICAgdGhpcy5nZW5lcmF0ZUtleVBhaXIoKS5zdWJzY3JpYmUoKGRhdGEpID0+IHtcblxuICAgICAgY29uc29sZS5sb2coXCJHRU4tR0VORVJBVEVEIEtFWVM6IFwiLCBkYXRhKVxuXG4gICAgICBjcnlwdG8uc3VidGxlLmV4cG9ydEtleSgnc3BraScsIGRhdGEucHVibGljS2V5KVxuICAgICAgLnRoZW4oa2V5ID0+IHtcbiAgICAgICAgY29uc3QgcHVibGljS2V5QmFzZTY0ID0gdGhpcy5hcnJheUJ1ZmZlclRvQmFzZTY0KGtleSk7XG4gICAgICAgIGNvbnNvbGUubG9nKFwiR0VOLUVYUE9SVCBQVUJMSUMgS0VZOiBcIiwgdGhpcy5iYXNlNjRUb1BFTShwdWJsaWNLZXlCYXNlNjQsIHRydWUpKTtcbiAgICAgIH0pXG5cbiAgICAgIGNyeXB0by5zdWJ0bGUuZXhwb3J0S2V5KCdwa2NzOCcsIGRhdGEucHJpdmF0ZUtleSlcbiAgICAgIC50aGVuKGtleSA9PiB7XG4gICAgICAgIGNvbnN0IHByaXZhdGVLZXlCYXNlNjQgPSB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoa2V5KTtcbiAgICAgICAgY29uc29sZS5sb2coXCJHRU4tRVhQT1JUIFBSSVZBVEUgS0VZOiBcIiwgdGhpcy5iYXNlNjRUb1BFTShwcml2YXRlS2V5QmFzZTY0LCBmYWxzZSkpO1xuICAgICAgfSk7XG5cbiAgICAgIC8vIFRFU1QgV0lUSCBHRU5FUkFURUQgS0VZU1xuICAgICAgdGhpcy5lbmNyeXB0RGF0YShkYXRhLnB1YmxpY0tleSwgXCJTYW1wbGUgRGF0YSBoZXJlIC0gTWlrZSBCb25pZmFjaW9cIilcbiAgICAgICAgICAuc3Vic2NyaWJlKChlbmMpID0+IHtcblxuICAgICAgICAgICAgY29uc29sZS5sb2coXCJHRU4tRU5DUllQVD09PjogXCIsIGVuYylcblxuICAgICAgICAgICAgdGhpcy5kZWNyeXB0RGF0YShkYXRhLnByaXZhdGVLZXksIGVuYykuc3Vic2NyaWJlKChkZWMpID0+IHtcbiAgICAgICAgICAgICAgdGVzdFNlcXVlbmNlLm5leHQoJ1Rlc3QgUGFzc2VkJyk7XG4gICAgICAgICAgICAgIHRlc3RTZXF1ZW5jZS5jb21wbGV0ZSgpO1xuICAgICAgICAgICAgfSlcblxuICAgICAgICAgIH0pXG5cbiAgICB9KVxuICAgIHJldHVybiB0ZXN0U2VxdWVuY2UkO1xuXG4gIH1cblxuICB0ZXN0RGVjcnlwdGlvbldpdGhLZXlzKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgdGVzdFNlcXVlbmNlOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcIlwiKTtcbiAgICBjb25zdCB0ZXN0U2VxdWVuY2UkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0ZXN0U2VxdWVuY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGVzdFNlcXVlbmNlLm5leHQoXCJUZXN0IEdlbmVyYXRpbmcgS2V5c1wiKTtcblxuICAgIGNvbnN0IHByaXZhdGVLZXkgPSBgLS0tLS1CRUdJTiBQUklWQVRFIEtFWS0tLS0tXG4gICAgTUlJRXZ3SUJBREFOQmdrcWhraUc5dzBCQVFFRkFBU0NCS2t3Z2dTbEFnRUFBb0lCQVFES1ZCa0NXTmI5ZUhWRlxuICAgIHR3QUE1bWRBeXZYRml4M1dhdmRyc29ZUmt2dENsOG9nREJRZjhmNk4wYlJrREYxemNWSFJyTkFFeW96WER0dURcbiAgICBrRmdTaWl2QkZSRUk3ZmlTM3NPdmR1cTZGYUdYelgwSVk2b2FWTXU4b09QZ0R2QzB5dm9vaFIrMFF4cTJkNmxQXG4gICAgU1B5SGVLUWF4UDRLeHpDSkp6QjFYQWNiZDJlRnpVVUR2MjVtTmx3ZFZrbVc4Rkkvc0F4bkpMZ1BUVzc4ZHpmWFxuICAgIERkZmsrbnhkSXF4VktTTEFUbkwwa01ON2FHSngyNFVvemlvQUlwenZ2dkY1Lys3SFRkMWdpNk5lQ3FyQVlyM2dcbiAgICBpUDM2NEFFMjZDRndGdkhuYWZPOXVOUWhsUSt1aU5uT29JblhCeWZGR1ZQK1JpZFNwZkx6YXhEanM2UkR3cG9sXG4gICAgaDA5OGJ0T05BZ01CQUFFQ2dnRUFBVmhITTJPRDVJa1V0dW93d2NLTmFDVEtHbXJDbFJFM2dNdXpKZUJzU0pFeVxuICAgIHVBUmVVRklMWnlsY25oZWdEeXRTdGkydkRBOVQ3eHF0TzZDVTBwM1Y4THBVODlKTU9QUmIvZGVpckk0VVhTcHhcbiAgICB4Yk55amlyT082Ym5yTmxPV2ZLZXhkUVFzaWtZUHpGMmlNMVNjcHIxdTlaRENIWk9sMVpZU3JrdmU1TXk0Y29QXG4gICAgM0d4NnRUQnFMMGpRQmZjcGY0RVM4QkgzSlNhd1IvTWdxekRTNzQrYkkyVkgra3Z1UEFDMUw0ZkJnYVYzVlV2MFxuICAgIG5GemltNUEzczVWYVhQZ0piRUlnaFA5QmtZR0ZrZVQ5bWEzbmxpRVpXYzk2QXpzbW93Rm4xYXlDdnJOVlBvOVJcbiAgICBFQ0QyTm50dEJpQ0padDNIOTNzUjkrT1RlQThCbHMrYVpHbEtkNW1MQVFLQmdRRHBmOG5JWVVtL1ptbHM3L2xRXG4gICAgUUJVU0dIRVlyYmpOc0VlalFzUGdORHRnMkVWU3hkVWt2VG43V2IrSEV4VGswOVo1Yk52aGFPMjUzMi9GSDl5OFxuICAgIGFoU1hhZmlNWHBmUjJvbHdYZE9COXlYWGw0RjVDMExHbm16R2ltNE9TZVd6QVgwSkNMNDcwS2FTMFFOM0Vtb0dcbiAgICA5RjBZQ2ZNblpYTlR3ZVNTeDR4dmxPNmdnUUtCZ1FEZDAxdUlvbG03ejFESVdDd05FUkFYUDJHRHdjdnh5ellLXG4gICAgWXFKZktEZUh0MnQ2eUl6Wk1Nb3RuUER5K09sY2RHc3BJSUhrQjVhK1NaTjVOdDdEVUtnL01ueU9aM0tiVnE0MVxuICAgIGs3ZFI0S2EzTFJuR2tlc3k3bFNyN2VmMXJmcXV5Ujc1T1hKUWNQV3ZrRmNMdTBUTWlRaHZwdGF0WjhWTitGNG5cbiAgICBmRFFFTFJvdERRS0JnUUNnTitBVVQ3VlQwUWpjQ0JuUlYvZGRVRW9pUGVuRnNZU21ZTVNZemg1RVNJSGcxd0IyXG4gICAgMGlTNzlJdzRPZjZuT1RnOFgxYk01N3ZmUTVLazkwVDJQKy9iS1lxemZxQzhEVEVyV2lZc1VwS3p5VEM5QnQ0TlxuICAgIC9WejBLcjV6clg4Z2dnL3lwLzRvZXZZaFhhdjhBeldmaWdOcTRFRHBNbktjOFRsUEFmKzUvTDUwZ1FLQmdRQzJcbiAgICBtTFBoUGhyMWdVc3pEM2w3YkE4OXc3dUdsTEZIb1FvajlGdEtUeldlcnZwM1FMeklUK1F0TmVJVmI1WFF1RGc1XG4gICAgeTN1QWRFcSs2cHZOak1CRU1KRytLOVhoOXYrZEpQWVVQanNKMkE0RC9Na1o3cVdYOEIyY3hTSksxdUxpbThXMlxuICAgIFMzWnhCdnNHZ0o5V2xkbWxNQ3ZVbEpaa2VXWXRyNFA1cHNDK3EwMi94UUtCZ1FDRElJL2pjVjIrbFJNMmlOVGVcbiAgICB2QmlqWlNhTk1FV09LL1krL0hGSzhHWUtYbkIreE5XaHJtOHJLZ1dHenBESkFVUE1oOVR0K2xlVzlMS0VCdXpGXG4gICAgWTFiR2JsbUdtMXpzUFdwSXgwNUZkdHY5ZU9KbUZuWGJHeklzWXloYWRablBjUU9XaHF4dHBWeFN1dWwwSmM3UVxuICAgIFhOcTRxUGFQWGhiUUFzaGd0eUJ0NzVETWt3PT1cbiAgICAtLS0tLUVORCBQUklWQVRFIEtFWS0tLS0tYFxuXG4gICAgICAgIGNvbnN0IHB1YktleSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuICAgIE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeWxRWkFsalcvWGgxUmJjQUFPWm5cbiAgICBRTXIxeFlzZDFtcjNhN0tHRVpMN1FwZktJQXdVSC9IK2pkRzBaQXhkYzNGUjBhelFCTXFNMXc3Ymc1QllFb29yXG4gICAgd1JVUkNPMzRrdDdEcjNicXVoV2hsODE5Q0dPcUdsVEx2S0RqNEE3d3RNcjZLSVVmdEVNYXRuZXBUMGo4aDNpa1xuICAgIEdzVCtDc2N3aVNjd2RWd0hHM2RuaGMxRkE3OXVaalpjSFZaSmx2QlNQN0FNWnlTNEQwMXUvSGMzMXczWDVQcDhcbiAgICBYU0tzVlNraXdFNXk5SkREZTJoaWNkdUZLTTRxQUNLYzc3N3hlZi91eDAzZFlJdWpYZ3Fxd0dLOTRJajkrdUFCXG4gICAgTnVnaGNCYng1Mm56dmJqVUlaVVByb2paenFDSjF3Y254UmxUL2tZblVxWHk4MnNRNDdPa1E4S2FKWWRQZkc3VFxuICAgIGpRSURBUUFCXG4gICAgLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYFxuXG4gICAgY29uc3QgYWxnb3JpdGhtOiBSc2FIYXNoZWRLZXlHZW5QYXJhbXMgPSB7XG4gICAgICBuYW1lOiBcIlJTQS1PQUVQXCIsXG4gICAgICBtb2R1bHVzTGVuZ3RoOiAyMDQ4LFxuICAgICAgcHVibGljRXhwb25lbnQ6IG5ldyBVaW50OEFycmF5KFsxLCAwLCAxXSksXG4gICAgICBoYXNoOiBcIlNIQS0yNTZcIlxuICAgIH07XG5cbiAgICAvLyBFTkNSWVBUXG4gICAgdGhpcy5wZW1Ub0NyeXB0b0tleShcbiAgICAgIHB1YktleSxcbiAgICAgIGFsZ29yaXRobSxcbiAgICAgIHRydWUsXG4gICAgICBbXCJlbmNyeXB0XCJdLFxuICAgICAgXCJzcGtpXCJcbiAgICApLnN1YnNjcmliZSgoa2V5UHVibGljKSA9PiB7XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiUFVCTElDIEtFWTogXCIsIGtleVB1YmxpYylcblxuICAgICAgdGhpcy5lbmNyeXB0RGF0YShrZXlQdWJsaWMsIFwiU2FtcGxlIERhdGEgaGVyZSAtIE1pa2UgQm9uaWZhY2lvXCIpXG4gICAgICAuc3Vic2NyaWJlKChzdHIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJFTkNSWVBURUQgU1RSSU5HOiBcIiwgc3RyKTtcbiAgICAgICAgdGVzdFNlcXVlbmNlLm5leHQoJ2VuY3J5cHRlZCBzdHJpbmcgc3VjY2VzcycpO1xuICAgICAgfSlcblxuICAgIH0pXG5cbiAgICBjb25zdCBlbmMgPSBcInI3VU91RUdCWjZqYlZUT0lCdXY5akZPRXRSaWVkbVMyN2hmVzQwazdYS0NUc1E1VmhXdXAwcXUyQkEyQU5aYUdLaWkvdWVoSi9SU1BpeWZHYko2bGVKcmF0MG1BMWhQcUgvWG9kYUJ6TE1EaWd2ZFlNMU5TWEZaTURhNDBPcExVSVhiUGxBdnliamNHdTdCYWwrTE1BOGh0SHJGdS9PbU0vZkhJNjZ4T3p6cHVYU1l4ME9rV2p0WTgxclVRMUZGa3Zya3gyakdGUFowcCtOdy92M1E0Y0puZXQ2VjYzdkN1ZUZsRDc0OVZNY1ZYbzdwdno0QUlQcEIrSU95M2tieGFZVFBha0xWaW9KRVJVNkdGTVhXa0VDdVJ2b2hoUzlDRVRjT1JadFJWUmt2aGNIazNseGdJaGZxb2pVS1lnRDZLNWRERUxEUHNXSVMraVRHMVhJUUlsZz09XCI7XG5cbiAgICAvLyBERUNSWVBUSU9OXG4gICAgdGhpcy5wZW1Ub0NyeXB0b0tleShcbiAgICAgIHByaXZhdGVLZXksXG4gICAgICBhbGdvcml0aG0sXG4gICAgICBmYWxzZSxcbiAgICAgIFtcImRlY3J5cHRcIl0sXG4gICAgICBcInBrY3M4XCJcbiAgICApLnN1YnNjcmliZSgoa2V5KSA9PiB7XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiREVDUllQVCA9PT1cIiwga2V5KVxuXG4gICAgICB0aGlzLmRlY3J5cHREYXRhKGtleSwgZW5jKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SOiBcIiwgZXJyKTtcbiAgICAgICAgICByZXR1cm4gRU1QVFlcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKChzdHIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJERUNSWVBURUQgU1RSSU5HOiBcIiwgc3RyKTtcbiAgICAgICAgdGVzdFNlcXVlbmNlLm5leHQoJ2RlY3J5cHRlZCBzdHJpbmcgc3VjY2VzcycpO1xuICAgICAgfSlcblxuICAgIH0pXG5cbiAgICByZXR1cm4gdGVzdFNlcXVlbmNlJDtcbiAgfTtcbn1cbiJdfQ==
|
|
186
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiYXN5bW1ldHJpY2FsLWVuY3J5cHRpb24uc2VydmljZS5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3Byb2plY3RzL2h0dHAtcmVxdWVzdC1tYW5hZ2VyL3NyYy9saWIvc2VydmljZXMvdXRpbHMvZW5jcnlwdGlvbi9hc3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFFM0MsT0FBTyxFQUFFLGVBQWUsRUFBRSxLQUFLLEVBQWMsSUFBSSxFQUFNLE1BQU0sTUFBTSxDQUFDO0FBQ3BFLE9BQU8sRUFBRSxHQUFHLEVBQUUsVUFBVSxFQUFFLE1BQU0sZ0JBQWdCLENBQUM7O0FBS2pELE1BQU0sT0FBTyw2QkFBNkI7SUFFeEMsZ0JBQWUsQ0FBQztJQUVoQixlQUFlLENBQUMsYUFBYSxHQUFHLElBQUk7UUFFbEMsbUNBQW1DO1FBQ25DLGlCQUFpQjtRQUVsQixPQUFPLElBQUksQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFdBQVcsQ0FDbEM7WUFDRSxJQUFJLEVBQUUsVUFBVTtZQUNoQixhQUFhO1lBQ2IsY0FBYyxFQUFFLElBQUksVUFBVSxDQUFDLENBQUMsQ0FBQyxFQUFFLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQztZQUN6QyxJQUFJLEVBQUUsRUFBRSxJQUFJLEVBQUUsU0FBUyxFQUFFO1NBQzFCLEVBQ0QsSUFBSSxFQUFFLG1CQUFtQjtRQUN6QixDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FDdkIsQ0FBQyxDQUFBO0lBRUosQ0FBQztJQUVELFdBQVcsQ0FBQyxTQUFvQixFQUFFLElBQVk7UUFFNUMsTUFBTSxXQUFXLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQyxNQUFNLENBQUMsSUFBSSxDQUFDLENBQUE7UUFFbEQsT0FBTyxJQUFJLENBQUMsTUFBTSxDQUFDLE1BQU0sQ0FBQyxP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QUFDLENBQUMsR0FBRyxFQUFFLEVBQUU7WUFFbEIsa0NBQWtDO1lBRWxDLElBQUksQ0FBQyxXQUFXLENBQUMsR0FBRyxFQUFFLEdBQUcsQ0FBQztpQkFDekIsSUFBSSxDQUNILFVBQVUsQ0FBQyxHQUFHLENBQUMsRUFBRTtnQkFDZixPQUFPLENBQUMsR0FBRyxDQUFDLFNBQVMsRUFBRSxHQUFHLENBQUMsQ0FBQztnQkFDNUIsT0FBTyxLQUFLLENBQUE7WUFDZCxDQUFDLENBQUMsQ0FDSCxDQUFDLFNBQVMsQ0FBQyxDQUFDLEdBQUcsRUFBRSxFQUFFO2dCQUNsQixPQUFPLENBQUMsR0FBRyxDQUFDLG9CQUFvQixFQUFFLEdBQUcsQ0FBQyxDQUFDO2dCQUN2QyxZQUFZLENBQUMsSUFBSSxDQUFDLDBCQUEwQixDQUFDLENBQUM7WUFDaEQsQ0FBQyxDQUFDLENBQUE7UUFFSixDQUFDLENBQUMsQ0FBQTtRQUVGLE9BQU8sYUFBYSxDQUFDO0lBQ3ZCLENBQUM7SUFBQSxDQUFDOytHQWhSUyw2QkFBNkI7bUhBQTdCLDZCQUE2QixjQUY1QixNQUFNOzs0RkFFUCw2QkFBNkI7a0JBSHpDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuXG5pbXBvcnQgeyBCZWhhdmlvclN1YmplY3QsIEVNUFRZLCBPYnNlcnZhYmxlLCBmcm9tLCBvZiB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgbWFwLCBjYXRjaEVycm9yIH0gZnJvbSAncnhqcy9vcGVyYXRvcnMnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBBc3ltbWV0cmljYWxFbmNyeXB0aW9uU2VydmljZSB7XG5cbiAgY29uc3RydWN0b3IoKSB7fVxuXG4gIGdlbmVyYXRlS2V5UGFpcihtb2R1bHVzTGVuZ3RoID0gMjA0OCk6IE9ic2VydmFibGU8Q3J5cHRvS2V5UGFpcj4ge1xuICBcbiAgICAvLyBtb2R1bHVzTGVuZ3RoIC0gMTAyNCwgMjA0OCwgNDA5NlxuICAgIC8vIGhhc2ggLSBTSEEtMjU2XG5cbiAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuZ2VuZXJhdGVLZXkoXG4gICAgICB7XG4gICAgICAgIG5hbWU6IFwiUlNBLU9BRVBcIixcbiAgICAgICAgbW9kdWx1c0xlbmd0aCxcbiAgICAgICAgcHVibGljRXhwb25lbnQ6IG5ldyBVaW50OEFycmF5KFsxLCAwLCAxXSksIC8vIDY1NTM3XG4gICAgICAgIGhhc2g6IHsgbmFtZTogXCJTSEEtMjU2XCIgfVxuICAgICAgfSxcbiAgICAgIHRydWUsIC8vIEV4dHJhY3RhYmxlIGtleXNcbiAgICAgIFtcImVuY3J5cHRcIiwgXCJkZWNyeXB0XCJdXG4gICAgKSlcblxuICB9XG5cbiAgZW5jcnlwdERhdGEocHVibGljS2V5OiBDcnlwdG9LZXksIGRhdGE6IHN0cmluZykge1xuXG4gICAgY29uc3QgZW5jb2RlZERhdGEgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoZGF0YSlcblxuICAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuZW5jcnlwdChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJSU0EtT0FFUFwiXG4gICAgICB9LFxuICAgICAgcHVibGljS2V5LFxuICAgICAgZW5jb2RlZERhdGFcbiAgICApKS5waXBlKFxuICAgICAgbWFwKGVuYyA9PiB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoZW5jKSlcbiAgICApXG5cbiAgfVxuXG4gIGRlY3J5cHREYXRhKHByaXZhdGVLZXk6IENyeXB0b0tleSwgZW5jcnlwdGVkRGF0YTogc3RyaW5nKSB7XG5cbiAgICBjb25zdCBlbmNTdHIgPSB0aGlzLmJhc2U2NFRvQXJyYXlCdWZmZXIoZW5jcnlwdGVkRGF0YSlcblxuICAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgIHtcbiAgICAgICAgbmFtZTogXCJSU0EtT0FFUFwiXG4gICAgICB9LFxuICAgICAgcHJpdmF0ZUtleSxcbiAgICAgIGVuY1N0clxuICAgICkudGhlbihkZWNyeXB0ZWREYXRhID0+IHtcbiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGVjcnlwdGVkRGF0YSlcbiAgICB9KSlcblxuICB9XG5cbiAgcGVtVG9BcnJheUJ1ZmZlcihwZW06IHN0cmluZyk6IEFycmF5QnVmZmVyIHtcblxuICAgIGNvbnN0IGI2NCA9IHBlbS5yZXBsYWNlKC8oLS0tLS1CRUdJTiAoUlNBICk/KFBSSVZBVEV8UFVCTElDKSBLRVktLS0tLXwtLS0tLUVORCAoUlNBICk/KFBSSVZBVEV8UFVCTElDKSBLRVktLS0tLXxcXG4pL2csICcnKVxuICAgIGNvbnN0IGJpbmFyeVN0cmluZyA9IGF0b2IoYjY0KVxuICAgIGNvbnN0IGxlbiA9IGJpbmFyeVN0cmluZy5sZW5ndGhcbiAgICBjb25zdCBidWZmZXIgPSBuZXcgQXJyYXlCdWZmZXIobGVuKVxuICAgIGNvbnN0IHZpZXcgPSBuZXcgVWludDhBcnJheShidWZmZXIpXG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICB2aWV3W2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSlcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyXG5cbiAgfVxuXG4gIGJhc2U2NFRvQXJyYXlCdWZmZXIoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gICAgXG4gICAgY29uc3QgYmluYXJ5U3RyaW5nID0gYXRvYihiYXNlNjQpO1xuICAgIGNvbnN0IGxlbiA9IGJpbmFyeVN0cmluZy5sZW5ndGg7XG4gICAgY29uc3QgYnVmZmVyID0gbmV3IEFycmF5QnVmZmVyKGxlbik7XG4gICAgY29uc3QgdmlldyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XG4gICAgICAgIHZpZXdbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKTtcbiAgICB9XG5cbiAgICByZXR1cm4gYnVmZmVyO1xuICB9XG5cbiAgYXJyYXlCdWZmZXJUb0Jhc2U2NChidWZmZXI6IEFycmF5QnVmZmVyKTogc3RyaW5nIHtcblxuICAgIGxldCBiaW5hcnkgPSAnJztcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgY29uc3QgbGVuID0gYnl0ZXMuYnl0ZUxlbmd0aDtcblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKTtcbiAgICB9XG5cbiAgICByZXR1cm4gd2luZG93LmJ0b2EoYmluYXJ5KVxuXG4gIH1cblxuICBiYXNlNjRUb1BFTShiYXNlNjRLZXk6IHN0cmluZywgcHVibGljS2V5ID0gdHJ1ZSkge1xuXG4gICAgY29uc3Qga2V5VHlwZSA9IChwdWJsaWNLZXkpID8gJ1BVQkxJQycgOiAnUFJJVkFURSdcblxuICAgIGNvbnN0IGhlYWRlciA9IGAtLS0tLUJFR0lOICR7a2V5VHlwZX0gS0VZLS0tLS1cXG5gXG4gICAgY29uc3QgZm9vdGVyID0gYFxcbi0tLS0tRU5EICR7a2V5VHlwZX0gS0VZLS0tLS1gXG5cbiAgICBjb25zdCBrZXlCb2R5ID0gYmFzZTY0S2V5Lm1hdGNoKC8uezEsNjR9L2cpPy5qb2luKFwiXFxuXCIpIHx8IFwiXCJcblxuICAgIHJldHVybiBoZWFkZXIgKyBrZXlCb2R5ICsgZm9vdGVyXG5cbiAgfVxuXG4gIHBlbVRvQ3J5cHRvS2V5KFxuICAgIHBlbTogc3RyaW5nLCBcbiAgICBhbGdvcml0aG06IFJzYUhhc2hlZEtleUdlblBhcmFtcywgXG4gICAgZXh0cmFjdGFibGU6IGJvb2xlYW4sIFxuICAgIGtleVVzYWdlczogS2V5VXNhZ2VbXSxcbiAgICBmb3JtYXQ6IGFueSA9IFwicGtjczhcIiAvL1wicmF3XCIgfCBcInBrY3M4XCIgfCBcInNwa2lcIlxuICAgICkge1xuICAgIFxuICAgIGNvbnN0IGJ1ZmZlciA9IHRoaXMucGVtVG9BcnJheUJ1ZmZlcihwZW0pO1xuXG4gICAgY29uc29sZS5sb2coJ2J1ZmZlciBmb3VuZCAnLCBidWZmZXIpO1xuICAgIFxuICAgIHJldHVybiBmcm9tKGNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgZm9ybWF0LFxuICAgICAgYnVmZmVyLFxuICAgICAgYWxnb3JpdGhtLFxuICAgICAgZXh0cmFjdGFibGUsXG4gICAgICBrZXlVc2FnZXNcbiAgICApKVxuXG4gIH1cbiAgXG4gIC8vIFRFU1RJTkdcblxuICB0ZXN0R2VuZXJhdGVLZXlzKCk6IE9ic2VydmFibGU8c3RyaW5nPiB7XG4gICAgY29uc3QgdGVzdFNlcXVlbmNlOiBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPiA9IG5ldyBCZWhhdmlvclN1YmplY3Q8c3RyaW5nPihcIlwiKTtcbiAgICBjb25zdCB0ZXN0U2VxdWVuY2UkOiBPYnNlcnZhYmxlPHN0cmluZz4gPSB0ZXN0U2VxdWVuY2UuYXNPYnNlcnZhYmxlKCk7XG4gICAgdGVzdFNlcXVlbmNlLm5leHQoXCJUZXN0IEdlbmVyYXRpbmcgS2V5c1wiKTtcblxuICAgIC8vIEdFTkVSQVRFIEtFWVNcbiAgICB0aGlzLmdlbmVyYXRlS2V5UGFpcigpLnN1YnNjcmliZSgoZGF0YSkgPT4ge1xuXG4gICAgICBjb25zb2xlLmxvZyhcIkdFTi1HRU5FUkFURUQgS0VZUzogXCIsIGRhdGEpXG5cbiAgICAgIGNyeXB0by5zdWJ0bGUuZXhwb3J0S2V5KCdzcGtpJywgZGF0YS5wdWJsaWNLZXkpXG4gICAgICAudGhlbihrZXkgPT4ge1xuICAgICAgICBjb25zdCBwdWJsaWNLZXlCYXNlNjQgPSB0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoa2V5KTtcbiAgICAgICAgY29uc29sZS5sb2coXCJHRU4tRVhQT1JUIFBVQkxJQyBLRVk6IFwiLCB0aGlzLmJhc2U2NFRvUEVNKHB1YmxpY0tleUJhc2U2NCwgdHJ1ZSkpO1xuICAgICAgfSlcblxuICAgICAgY3J5cHRvLnN1YnRsZS5leHBvcnRLZXkoJ3BrY3M4JywgZGF0YS5wcml2YXRlS2V5KVxuICAgICAgLnRoZW4oa2V5ID0+IHtcbiAgICAgICAgY29uc3QgcHJpdmF0ZUtleUJhc2U2NCA9IHRoaXMuYXJyYXlCdWZmZXJUb0Jhc2U2NChrZXkpO1xuICAgICAgICBjb25zb2xlLmxvZyhcIkdFTi1FWFBPUlQgUFJJVkFURSBLRVk6IFwiLCB0aGlzLmJhc2U2NFRvUEVNKHByaXZhdGVLZXlCYXNlNjQsIGZhbHNlKSk7XG4gICAgICB9KTtcblxuICAgICAgLy8gVEVTVCBXSVRIIEdFTkVSQVRFRCBLRVlTXG4gICAgICB0aGlzLmVuY3J5cHREYXRhKGRhdGEucHVibGljS2V5LCBcIlNhbXBsZSBEYXRhIGhlcmUgLSBNaWtlIEJvbmlmYWNpb1wiKVxuICAgICAgICAgIC5zdWJzY3JpYmUoKGVuYykgPT4ge1xuXG4gICAgICAgICAgICBjb25zb2xlLmxvZyhcIkdFTi1FTkNSWVBUPT0+OiBcIiwgZW5jKVxuXG4gICAgICAgICAgICB0aGlzLmRlY3J5cHREYXRhKGRhdGEucHJpdmF0ZUtleSwgZW5jKS5zdWJzY3JpYmUoKGRlYykgPT4ge1xuICAgICAgICAgICAgICB0ZXN0U2VxdWVuY2UubmV4dCgnVGVzdCBQYXNzZWQnKTtcbiAgICAgICAgICAgICAgdGVzdFNlcXVlbmNlLmNvbXBsZXRlKCk7XG4gICAgICAgICAgICB9KVxuXG4gICAgICAgICAgfSlcblxuICAgIH0pXG4gICAgcmV0dXJuIHRlc3RTZXF1ZW5jZSQ7XG5cbiAgfVxuXG4gIHRlc3REZWNyeXB0aW9uV2l0aEtleXMoKTogT2JzZXJ2YWJsZTxzdHJpbmc+IHtcbiAgICBjb25zdCB0ZXN0U2VxdWVuY2U6IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+ID0gbmV3IEJlaGF2aW9yU3ViamVjdDxzdHJpbmc+KFwiXCIpO1xuICAgIGNvbnN0IHRlc3RTZXF1ZW5jZSQ6IE9ic2VydmFibGU8c3RyaW5nPiA9IHRlc3RTZXF1ZW5jZS5hc09ic2VydmFibGUoKTtcbiAgICB0ZXN0U2VxdWVuY2UubmV4dChcIlRlc3QgR2VuZXJhdGluZyBLZXlzXCIpO1xuXG4gICAgY29uc3QgcHJpdmF0ZUtleSA9IGAtLS0tLUJFR0lOIFBSSVZBVEUgS0VZLS0tLS1cbiAgICBNSUlFdndJQkFEQU5CZ2txaGtpRzl3MEJBUUVGQUFTQ0JLa3dnZ1NsQWdFQUFvSUJBUURLVkJrQ1dOYjllSFZGXG4gICAgdHdBQTVtZEF5dlhGaXgzV2F2ZHJzb1lSa3Z0Q2w4b2dEQlFmOGY2TjBiUmtERjF6Y1ZIUnJOQUV5b3pYRHR1RFxuICAgIGtGZ1NpaXZCRlJFSTdmaVMzc092ZHVxNkZhR1h6WDBJWTZvYVZNdThvT1BnRHZDMHl2b29oUiswUXhxMmQ2bFBcbiAgICBTUHlIZUtRYXhQNEt4ekNKSnpCMVhBY2JkMmVGelVVRHYyNW1ObHdkVmttVzhGSS9zQXhuSkxnUFRXNzhkemZYXG4gICAgRGRmaytueGRJcXhWS1NMQVRuTDBrTU43YUdKeDI0VW96aW9BSXB6dnZ2RjUvKzdIVGQxZ2k2TmVDcXJBWXIzZ1xuICAgIGlQMzY0QUUyNkNGd0Z2SG5hZk85dU5RaGxRK3VpTm5Pb0luWEJ5ZkZHVlArUmlkU3BmTHpheERqczZSRHdwb2xcbiAgICBoMDk4YnRPTkFnTUJBQUVDZ2dFQUFWaEhNMk9ENUlrVXR1b3d3Y0tOYUNUS0dtckNsUkUzZ011ekplQnNTSkV5XG4gICAgdUFSZVVGSUxaeWxjbmhlZ0R5dFN0aTJ2REE5VDd4cXRPNkNVMHAzVjhMcFU4OUpNT1BSYi9kZWlySTRVWFNweFxuICAgIHhiTnlqaXJPTzZibnJObE9XZktleGRRUXNpa1lQekYyaU0xU2NwcjF1OVpEQ0haT2wxWllTcmt2ZTVNeTRjb1BcbiAgICAzR3g2dFRCcUwwalFCZmNwZjRFUzhCSDNKU2F3Ui9NZ3F6RFM3NCtiSTJWSCtrdnVQQUMxTDRmQmdhVjNWVXYwXG4gICAgbkZ6aW01QTNzNVZhWFBnSmJFSWdoUDlCa1lHRmtlVDltYTNubGlFWldjOTZBenNtb3dGbjFheUN2ck5WUG85UlxuICAgIEVDRDJObnR0QmlDSlp0M0g5M3NSOStPVGVBOEJscythWkdsS2Q1bUxBUUtCZ1FEcGY4bklZVW0vWm1sczcvbFFcbiAgICBRQlVTR0hFWXJiak5zRWVqUXNQZ05EdGcyRVZTeGRVa3ZUbjdXYitIRXhUazA5WjViTnZoYU8yNTMyL0ZIOXk4XG4gICAgYWhTWGFmaU1YcGZSMm9sd1hkT0I5eVhYbDRGNUMwTEdubXpHaW00T1NlV3pBWDBKQ0w0NzBLYVMwUU4zRW1vR1xuICAgIDlGMFlDZk1uWlhOVHdlU1N4NHh2bE82Z2dRS0JnUURkMDF1SW9sbTd6MURJV0N3TkVSQVhQMkdEd2N2eHl6WUtcbiAgICBZcUpmS0RlSHQydDZ5SXpaTU1vdG5QRHkrT2xjZEdzcElJSGtCNWErU1pONU50N0RVS2cvTW55T1ozS2JWcTQxXG4gICAgazdkUjRLYTNMUm5Ha2VzeTdsU3I3ZWYxcmZxdXlSNzVPWEpRY1BXdmtGY0x1MFRNaVFodnB0YXRaOFZOK0Y0blxuICAgIGZEUUVMUm90RFFLQmdRQ2dOK0FVVDdWVDBRamNDQm5SVi9kZFVFb2lQZW5Gc1lTbVlNU1l6aDVFU0lIZzF3QjJcbiAgICAwaVM3OUl3NE9mNm5PVGc4WDFiTTU3dmZRNUtrOTBUMlArL2JLWXF6ZnFDOERURXJXaVlzVXBLenlUQzlCdDROXG4gICAgL1Z6MEtyNXpyWDhnZ2cveXAvNG9ldlloWGF2OEF6V2ZpZ05xNEVEcE1uS2M4VGxQQWYrNS9MNTBnUUtCZ1FDMlxuICAgIG1MUGhQaHIxZ1VzekQzbDdiQTg5dzd1R2xMRkhvUW9qOUZ0S1R6V2VydnAzUUx6SVQrUXROZUlWYjVYUXVEZzVcbiAgICB5M3VBZEVxKzZwdk5qTUJFTUpHK0s5WGg5ditkSlBZVVBqc0oyQTREL01rWjdxV1g4QjJjeFNKSzF1TGltOFcyXG4gICAgUzNaeEJ2c0dnSjlXbGRtbE1DdlVsSlprZVdZdHI0UDVwc0MrcTAyL3hRS0JnUUNESUkvamNWMitsUk0yaU5UZVxuICAgIHZCaWpaU2FOTUVXT0svWSsvSEZLOEdZS1huQit4Tldocm04cktnV0d6cERKQVVQTWg5VHQrbGVXOUxLRUJ1ekZcbiAgICBZMWJHYmxtR20xenNQV3BJeDA1RmR0djllT0ptRm5YYkd6SXNZeWhhZFpuUGNRT1docXh0cFZ4U3V1bDBKYzdRXG4gICAgWE5xNHFQYVBYaGJRQXNoZ3R5QnQ3NURNa3c9PVxuICAgIC0tLS0tRU5EIFBSSVZBVEUgS0VZLS0tLS1gXG4gICAgXG4gICAgICAgIGNvbnN0IHB1YktleSA9IGAtLS0tLUJFR0lOIFBVQkxJQyBLRVktLS0tLVxuICAgIE1JSUJJakFOQmdrcWhraUc5dzBCQVFFRkFBT0NBUThBTUlJQkNnS0NBUUVBeWxRWkFsalcvWGgxUmJjQUFPWm5cbiAgICBRTXIxeFlzZDFtcjNhN0tHRVpMN1FwZktJQXdVSC9IK2pkRzBaQXhkYzNGUjBhelFCTXFNMXc3Ymc1QllFb29yXG4gICAgd1JVUkNPMzRrdDdEcjNicXVoV2hsODE5Q0dPcUdsVEx2S0RqNEE3d3RNcjZLSVVmdEVNYXRuZXBUMGo4aDNpa1xuICAgIEdzVCtDc2N3aVNjd2RWd0hHM2RuaGMxRkE3OXVaalpjSFZaSmx2QlNQN0FNWnlTNEQwMXUvSGMzMXczWDVQcDhcbiAgICBYU0tzVlNraXdFNXk5SkREZTJoaWNkdUZLTTRxQUNLYzc3N3hlZi91eDAzZFlJdWpYZ3Fxd0dLOTRJajkrdUFCXG4gICAgTnVnaGNCYng1Mm56dmJqVUlaVVByb2paenFDSjF3Y254UmxUL2tZblVxWHk4MnNRNDdPa1E4S2FKWWRQZkc3VFxuICAgIGpRSURBUUFCXG4gICAgLS0tLS1FTkQgUFVCTElDIEtFWS0tLS0tYFxuXG4gICAgY29uc3QgYWxnb3JpdGhtOiBSc2FIYXNoZWRLZXlHZW5QYXJhbXMgPSB7XG4gICAgICBuYW1lOiBcIlJTQS1PQUVQXCIsXG4gICAgICBtb2R1bHVzTGVuZ3RoOiAyMDQ4LFxuICAgICAgcHVibGljRXhwb25lbnQ6IG5ldyBVaW50OEFycmF5KFsxLCAwLCAxXSksXG4gICAgICBoYXNoOiBcIlNIQS0yNTZcIlxuICAgIH07XG5cbiAgICAvLyBFTkNSWVBUXG4gICAgdGhpcy5wZW1Ub0NyeXB0b0tleShcbiAgICAgIHB1YktleSxcbiAgICAgIGFsZ29yaXRobSxcbiAgICAgIHRydWUsXG4gICAgICBbXCJlbmNyeXB0XCJdLFxuICAgICAgXCJzcGtpXCJcbiAgICApLnN1YnNjcmliZSgoa2V5UHVibGljKSA9PiB7XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiUFVCTElDIEtFWTogXCIsIGtleVB1YmxpYylcblxuICAgICAgdGhpcy5lbmNyeXB0RGF0YShrZXlQdWJsaWMsIFwiU2FtcGxlIERhdGEgaGVyZSAtIE1pa2UgQm9uaWZhY2lvXCIpXG4gICAgICAuc3Vic2NyaWJlKChzdHIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJFTkNSWVBURUQgU1RSSU5HOiBcIiwgc3RyKTtcbiAgICAgICAgdGVzdFNlcXVlbmNlLm5leHQoJ2VuY3J5cHRlZCBzdHJpbmcgc3VjY2VzcycpO1xuICAgICAgfSlcblxuICAgIH0pXG5cbiAgICBjb25zdCBlbmMgPSBcInI3VU91RUdCWjZqYlZUT0lCdXY5akZPRXRSaWVkbVMyN2hmVzQwazdYS0NUc1E1VmhXdXAwcXUyQkEyQU5aYUdLaWkvdWVoSi9SU1BpeWZHYko2bGVKcmF0MG1BMWhQcUgvWG9kYUJ6TE1EaWd2ZFlNMU5TWEZaTURhNDBPcExVSVhiUGxBdnliamNHdTdCYWwrTE1BOGh0SHJGdS9PbU0vZkhJNjZ4T3p6cHVYU1l4ME9rV2p0WTgxclVRMUZGa3Zya3gyakdGUFowcCtOdy92M1E0Y0puZXQ2VjYzdkN1ZUZsRDc0OVZNY1ZYbzdwdno0QUlQcEIrSU95M2tieGFZVFBha0xWaW9KRVJVNkdGTVhXa0VDdVJ2b2hoUzlDRVRjT1JadFJWUmt2aGNIazNseGdJaGZxb2pVS1lnRDZLNWRERUxEUHNXSVMraVRHMVhJUUlsZz09XCI7XG5cbiAgICAvLyBERUNSWVBUSU9OXG4gICAgdGhpcy5wZW1Ub0NyeXB0b0tleShcbiAgICAgIHByaXZhdGVLZXksXG4gICAgICBhbGdvcml0aG0sXG4gICAgICBmYWxzZSxcbiAgICAgIFtcImRlY3J5cHRcIl0sXG4gICAgICBcInBrY3M4XCJcbiAgICApLnN1YnNjcmliZSgoa2V5KSA9PiB7XG5cbiAgICAgIC8vIGNvbnNvbGUubG9nKFwiREVDUllQVCA9PT1cIiwga2V5KVxuXG4gICAgICB0aGlzLmRlY3J5cHREYXRhKGtleSwgZW5jKVxuICAgICAgLnBpcGUoXG4gICAgICAgIGNhdGNoRXJyb3IoZXJyID0+IHtcbiAgICAgICAgICBjb25zb2xlLmxvZyhcIkVSUk9SOiBcIiwgZXJyKTtcbiAgICAgICAgICByZXR1cm4gRU1QVFlcbiAgICAgICAgfSlcbiAgICAgICkuc3Vic2NyaWJlKChzdHIpID0+IHtcbiAgICAgICAgY29uc29sZS5sb2coXCJERUNSWVBURUQgU1RSSU5HOiBcIiwgc3RyKTtcbiAgICAgICAgdGVzdFNlcXVlbmNlLm5leHQoJ2RlY3J5cHRlZCBzdHJpbmcgc3VjY2VzcycpO1xuICAgICAgfSlcblxuICAgIH0pXG5cbiAgICByZXR1cm4gdGVzdFNlcXVlbmNlJDtcbiAgfTtcbn1cbiJdfQ==
|
|
@@ -1,4 +1,5 @@
|
|
|
1
1
|
import { Injectable, inject } from '@angular/core';
|
|
2
|
+
import * as CryptoJS from 'crypto-js';
|
|
2
3
|
import { RandomSignature } from './random';
|
|
3
4
|
import { AppService } from '../app.service';
|
|
4
5
|
import * as i0 from "@angular/core";
|
|
@@ -13,193 +14,56 @@ export class SymmetricalEncryptionService {
|
|
|
13
14
|
generateCipherKey() {
|
|
14
15
|
return (RandomSignature().toString() + RandomSignature().toString()).substring(0, 8);
|
|
15
16
|
}
|
|
16
|
-
// Synchronous encrypt method to maintain compatibility
|
|
17
17
|
encrypt(str, key = this.appID) {
|
|
18
18
|
if (!str || key === '')
|
|
19
19
|
return '';
|
|
20
|
+
let _key = CryptoJS.enc.Utf8.parse(key);
|
|
21
|
+
let _iv = CryptoJS.enc.Utf8.parse(key);
|
|
20
22
|
try {
|
|
21
|
-
|
|
22
|
-
|
|
23
|
-
|
|
24
|
-
|
|
25
|
-
|
|
26
|
-
|
|
27
|
-
|
|
28
|
-
// Convert encrypted data to base64 string
|
|
29
|
-
return this.arrayBufferToBase64(encrypted);
|
|
23
|
+
const encrypted = CryptoJS.AES.encrypt(JSON.stringify(str), _key, {
|
|
24
|
+
keySize: 16,
|
|
25
|
+
iv: _iv,
|
|
26
|
+
mode: CryptoJS.mode.ECB,
|
|
27
|
+
padding: CryptoJS.pad.Pkcs7
|
|
28
|
+
});
|
|
29
|
+
return encrypted.toString();
|
|
30
30
|
}
|
|
31
31
|
catch (error) {
|
|
32
32
|
console.log(error);
|
|
33
|
-
return '';
|
|
34
33
|
}
|
|
34
|
+
return;
|
|
35
35
|
}
|
|
36
|
-
// Synchronous decrypt method to maintain compatibility
|
|
37
36
|
decrypt(str, key = this.appID) {
|
|
38
37
|
if (!str || key === '')
|
|
39
|
-
return
|
|
38
|
+
return;
|
|
39
|
+
let _key = CryptoJS.enc.Utf8.parse(key);
|
|
40
|
+
let _iv = CryptoJS.enc.Utf8.parse(key);
|
|
40
41
|
try {
|
|
41
|
-
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
// Convert decrypted data to string
|
|
48
|
-
return new TextDecoder().decode(decryptedBuffer);
|
|
42
|
+
return CryptoJS.AES.decrypt(str, _key, {
|
|
43
|
+
keySize: 16,
|
|
44
|
+
iv: _iv,
|
|
45
|
+
mode: CryptoJS.mode.ECB,
|
|
46
|
+
padding: CryptoJS.pad.Pkcs7
|
|
47
|
+
}).toString(CryptoJS.enc.Utf8);
|
|
49
48
|
}
|
|
50
49
|
catch (error) {
|
|
51
50
|
console.log(error);
|
|
52
|
-
return undefined;
|
|
53
51
|
}
|
|
52
|
+
return;
|
|
54
53
|
}
|
|
55
54
|
createSignature(url, len = 16) {
|
|
56
|
-
const
|
|
57
|
-
return
|
|
55
|
+
const sig = CryptoJS.SHA256(url).toString(CryptoJS.enc.Hex);
|
|
56
|
+
return sig.substring(0, len).toUpperCase();
|
|
58
57
|
}
|
|
59
58
|
normalizeURL(url) {
|
|
60
59
|
const normalizedURL = url.replace(/(https?:\/\/)?(www\.)?/, '').replace(/\/+$/, '');
|
|
61
60
|
return normalizedURL;
|
|
62
61
|
}
|
|
63
62
|
generateSignature(url) {
|
|
64
|
-
return this.generateSignatureSync(url);
|
|
65
|
-
}
|
|
66
|
-
// Helper methods
|
|
67
|
-
generateSignatureSync(url) {
|
|
68
63
|
const normalizedURL = this.normalizeURL(url);
|
|
69
|
-
|
|
70
|
-
const
|
|
71
|
-
|
|
72
|
-
// Create a hash using the SubtleCrypto interface if available, otherwise fallback
|
|
73
|
-
let hashArray;
|
|
74
|
-
try {
|
|
75
|
-
// Create a synchronous hash
|
|
76
|
-
hashArray = this.sha256Sync(data);
|
|
77
|
-
}
|
|
78
|
-
catch (error) {
|
|
79
|
-
console.error('Sync hashing failed, using fallback', error);
|
|
80
|
-
// Simple fallback hash (less secure)
|
|
81
|
-
hashArray = this.simpleHash(data);
|
|
82
|
-
}
|
|
83
|
-
return Array.from(hashArray)
|
|
84
|
-
.map(b => b.toString(16).padStart(2, '0'))
|
|
85
|
-
.join('');
|
|
86
|
-
}
|
|
87
|
-
// Synchronous SHA-256 implementation
|
|
88
|
-
sha256Sync(data) {
|
|
89
|
-
// This is a simplified version for compatibility
|
|
90
|
-
// It's not as secure as the Web Crypto API but maintains the synchronous API
|
|
91
|
-
const result = new Uint8Array(32); // 256 bits = 32 bytes
|
|
92
|
-
// Simple hash function (for demonstration - not cryptographically strong)
|
|
93
|
-
let h = 0x12345678;
|
|
94
|
-
for (let i = 0; i < data.length; i++) {
|
|
95
|
-
h = ((h << 5) - h) + data[i];
|
|
96
|
-
h |= 0; // Convert to 32bit integer
|
|
97
|
-
}
|
|
98
|
-
// Fill the result with derived values
|
|
99
|
-
for (let i = 0; i < 32; i++) {
|
|
100
|
-
result[i] = ((h >> (i % 4 * 8)) & 0xFF);
|
|
101
|
-
h = Math.imul(h, 2654435761); // Prime number multiplication
|
|
102
|
-
}
|
|
103
|
-
return result;
|
|
104
|
-
}
|
|
105
|
-
// Simple hash function
|
|
106
|
-
simpleHash(data) {
|
|
107
|
-
const result = new Uint8Array(32);
|
|
108
|
-
let h1 = 0x2fd4e1c6;
|
|
109
|
-
let h2 = 0x7b23c6d8;
|
|
110
|
-
for (let i = 0; i < data.length; i++) {
|
|
111
|
-
h1 = ((h1 << 5) - h1 + data[i]) | 0;
|
|
112
|
-
h2 = ((h2 << 5) - h2 + (h1 ^ data[i])) | 0;
|
|
113
|
-
}
|
|
114
|
-
for (let i = 0; i < 16; i++) {
|
|
115
|
-
result[i] = (h1 >> (i * 2)) & 0xFF;
|
|
116
|
-
result[i + 16] = (h2 >> (i * 2)) & 0xFF;
|
|
117
|
-
}
|
|
118
|
-
return result;
|
|
119
|
-
}
|
|
120
|
-
// Synchronous AES encryption (simplified)
|
|
121
|
-
aesEncryptSync(data, key) {
|
|
122
|
-
// This is a simplified implementation for compatibility
|
|
123
|
-
// It's not as secure as the Web Crypto API
|
|
124
|
-
const result = new Uint8Array(data.length);
|
|
125
|
-
// XOR-based cipher (not actual AES, just for compatibility)
|
|
126
|
-
for (let i = 0; i < data.length; i++) {
|
|
127
|
-
result[i] = data[i] ^ key[i % key.length];
|
|
128
|
-
}
|
|
129
|
-
return result;
|
|
130
|
-
}
|
|
131
|
-
// Synchronous AES decryption (simplified)
|
|
132
|
-
aesDecryptSync(data, key) {
|
|
133
|
-
// For a simple XOR cipher, encryption and decryption are the same operation
|
|
134
|
-
return this.aesEncryptSync(data, key);
|
|
135
|
-
}
|
|
136
|
-
arrayBufferToBase64(buffer) {
|
|
137
|
-
const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
|
|
138
|
-
let binary = '';
|
|
139
|
-
for (let i = 0; i < bytes.byteLength; i++) {
|
|
140
|
-
binary += String.fromCharCode(bytes[i]);
|
|
141
|
-
}
|
|
142
|
-
return btoa(binary);
|
|
143
|
-
}
|
|
144
|
-
base64ToArrayBuffer(base64) {
|
|
145
|
-
const binaryString = atob(base64);
|
|
146
|
-
const bytes = new Uint8Array(binaryString.length);
|
|
147
|
-
for (let i = 0; i < binaryString.length; i++) {
|
|
148
|
-
bytes[i] = binaryString.charCodeAt(i);
|
|
149
|
-
}
|
|
150
|
-
return bytes.buffer;
|
|
151
|
-
}
|
|
152
|
-
// Async versions of the methods for future use
|
|
153
|
-
async encryptAsync(str, key = this.appID) {
|
|
154
|
-
if (!str || key === '')
|
|
155
|
-
return '';
|
|
156
|
-
try {
|
|
157
|
-
const encoder = new TextEncoder();
|
|
158
|
-
const data = encoder.encode(JSON.stringify(str));
|
|
159
|
-
const keyMaterial = await this.getKeyMaterial(key);
|
|
160
|
-
const derivedKey = await this.deriveKey(keyMaterial, encoder.encode(key));
|
|
161
|
-
const iv = encoder.encode(key.padEnd(16, key).substring(0, 16));
|
|
162
|
-
const encryptedBuffer = await window.crypto.subtle.encrypt({
|
|
163
|
-
name: 'AES-CBC',
|
|
164
|
-
iv
|
|
165
|
-
}, derivedKey, data);
|
|
166
|
-
return this.arrayBufferToBase64(encryptedBuffer);
|
|
167
|
-
}
|
|
168
|
-
catch (error) {
|
|
169
|
-
console.log(error);
|
|
170
|
-
return '';
|
|
171
|
-
}
|
|
172
|
-
}
|
|
173
|
-
async decryptAsync(str, key = this.appID) {
|
|
174
|
-
if (!str || key === '')
|
|
175
|
-
return undefined;
|
|
176
|
-
try {
|
|
177
|
-
const encryptedData = this.base64ToArrayBuffer(str);
|
|
178
|
-
const keyMaterial = await this.getKeyMaterial(key);
|
|
179
|
-
const derivedKey = await this.deriveKey(keyMaterial, new TextEncoder().encode(key));
|
|
180
|
-
const iv = new TextEncoder().encode(key.padEnd(16, key).substring(0, 16));
|
|
181
|
-
const decryptedBuffer = await window.crypto.subtle.decrypt({
|
|
182
|
-
name: 'AES-CBC',
|
|
183
|
-
iv
|
|
184
|
-
}, derivedKey, encryptedData);
|
|
185
|
-
return new TextDecoder().decode(decryptedBuffer);
|
|
186
|
-
}
|
|
187
|
-
catch (error) {
|
|
188
|
-
console.log(error);
|
|
189
|
-
return undefined;
|
|
190
|
-
}
|
|
191
|
-
}
|
|
192
|
-
async getKeyMaterial(key) {
|
|
193
|
-
const encoder = new TextEncoder();
|
|
194
|
-
return window.crypto.subtle.importKey('raw', encoder.encode(key), { name: 'PBKDF2' }, false, ['deriveBits', 'deriveKey']);
|
|
195
|
-
}
|
|
196
|
-
async deriveKey(keyMaterial, salt) {
|
|
197
|
-
return window.crypto.subtle.deriveKey({
|
|
198
|
-
name: 'PBKDF2',
|
|
199
|
-
salt,
|
|
200
|
-
iterations: 100000,
|
|
201
|
-
hash: 'SHA-256'
|
|
202
|
-
}, keyMaterial, { name: 'AES-CBC', length: 256 }, false, ['encrypt', 'decrypt']);
|
|
64
|
+
const hash = CryptoJS.SHA256(normalizedURL);
|
|
65
|
+
const signature = hash.toString(CryptoJS.enc.Hex);
|
|
66
|
+
return signature;
|
|
203
67
|
}
|
|
204
68
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SymmetricalEncryptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
205
69
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SymmetricalEncryptionService, providedIn: 'root' }); }
|
|
@@ -210,4 +74,4 @@ i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "16.2.12", ngImpo
|
|
|
210
74
|
providedIn: 'root'
|
|
211
75
|
}]
|
|
212
76
|
}], ctorParameters: function () { return []; } });
|
|
213
|
-
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy91dGlscy9lbmNyeXB0aW9uL3N5bW1ldHJpY2FsLWVuY3J5cHRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUVuRCxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLNUMsTUFBTSxPQUFPLDRCQUE0QjtJQU12QztRQUZRLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUM7UUFHdEMscURBQXFEO1FBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFDO1FBQ2xFLElBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFDO0lBQ25FLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFDO0lBQ3ZGLENBQUM7SUFFRCx1REFBdUQ7SUFDdkQsT0FBTyxDQUFDLEdBQVEsRUFBRSxHQUFHLEdBQUcsSUFBSSxDQUFDLEtBQUs7UUFDaEMsSUFBRyxDQUFDLEdBQUcsSUFBSSxHQUFHLEtBQUssRUFB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RixPQUFPLElBQUksV0FBVyxFQUFFLENBQUMsTUFBTSxDQUFDLGVBQWUsQ0FBQyxDQUFDO1NBQ2xEO1FBQUMsT0FBTSxLQUFVLEVBQUU7WUFDbEIsT0FBTyxDQUFDLEdBQUcsQ0FBQyxLQUFLLENBQUMsQ0FBQztZQUNuQixPQUFPLFNBQVMsQ0FBQztTQUNsQjtJQUNILENBQUM7SUFFTyxLQUFLLENBQUMsY0FBYyxDQUFDLEdBQVc7UUFDdEMsTUFBTSxPQUFPLEdBQUcsSUFBSSxXQUFXLEVBQUUsQ0FBQztRQUNsQyxPQUFPLE1BQU0sQ0FBQyxNQUFNLENBQUMsTUFBTSxDQUFDLFNBQVMsQ0FDbkMsS0FBSyxFQUNMLE9BQU8sQ0FBQyxNQUFNLENBQUMsR0FBRyxDQUFDLEVBQ25CLEVBQUUsSUFBSSxFQUFFLFFBQVEsRUFBRSxFQUNsQixLQUFLLEVBQ0wsQ0FBQyxZQUFZLEVBQUUsV0FBVyxDQUFDLENBQzVCLENBQUM7SUFDSixDQUFDO0lBRU8sS0FBSyxDQUFDLFNBQVMsQ0FBQyxXQUFzQixFQUFFLElBQWdCO1FBQzlELE9BQU8sTUFBTSxDQUFDLE1BQU0sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUNuQztZQUNFLElBQUksRUFBRSxRQUFRO1lBQ2QsSUFBSTtZQUNKLFVBQVUsRUFBRSxNQUFNO1lBQ2xCLElBQUksRUFBRSxTQUFTO1NBQ2hCLEVBQ0QsV0FBVyxFQUNYLEVBQUUsSUFBSSxFQUFFLFNBQVMsRUFBRSxNQUFNLEVBQUUsR0FBRyxFQUFFLEVBQ2hDLEtBQUssRUFDTCxDQUFDLFNBQVMsRUFBRSxTQUFTLENBQUMsQ0FDdkIsQ0FBQztJQUNKLENBQUM7K0dBbFFVLDRCQUE0QjttSEFBNUIsNEJBQTRCLGNBRjNCLE1BQU07OzRGQUVQLDRCQUE0QjtrQkFIeEMsVUFBVTttQkFBQztvQkFDVixVQUFVLEVBQUUsTUFBTTtpQkFDbkIiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBJbmplY3RhYmxlLCBpbmplY3QgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcblxuaW1wb3J0IHsgUmFuZG9tU2lnbmF0dXJlIH0gZnJvbSAnLi9yYW5kb20nO1xuaW1wb3J0IHsgQXBwU2VydmljZSB9IGZyb20gJy4uL2FwcC5zZXJ2aWNlJztcblxuQEluamVjdGFibGUoe1xuICBwcm92aWRlZEluOiAncm9vdCdcbn0pXG5leHBvcnQgY2xhc3MgU3ltbWV0cmljYWxFbmNyeXB0aW9uU2VydmljZSB7XG5cbiAgYXBwSUQ6IHN0cmluZzsgLy8gQVBQIFNFUlZJQ0UgVE8gTUFOQUdFUiBFTkNSWVBUSU9OIEtFWVxuXG4gIHByaXZhdGUgYXBwU2VydmljZSA9IGluamVjdChBcHBTZXJ2aWNlKTtcblxuICBjb25zdHJ1Y3RvcigpIHtcbiAgICAvLyBUT0RPOiBUaGUgQVBQIElEIGlzIG5vdCBhIHN0cmluZywgaXQgaXMgYSBmdW5jdGlvblxuICAgIHRoaXMuYXBwSUQgPSAodGhpcy5hcHBTZXJ2aWNlLmFwcElEKSA/IHRoaXMuYXBwU2VydmljZS5hcHBJRCA6ICcnO1xuICAgIGlmKHRoaXMuYXBwSUQgPT09ICcnKSBjb25zb2xlLndhcm4oJ05vIEFwcCBLZXkgaGFzIGJlZW4gZGVmaW5lJyk7XG4gIH1cblxuICBnZW5lcmF0ZUNpcGhlcktleSgpIHtcbiAgICByZXR1cm4gKFJhbmRvbVNpZ25hdHVyZSgpLnRvU3RyaW5nKCkgKyBSYW5kb21TaWduYXR1cmUoKS50b1N0cmluZygpKS5zdWJzdHJpbmcoMCwgOCk7XG4gIH1cblxuICAvLyBTeW5jaHJvbm91cyBlbmNyeXB0IG1ldGhvZCB0byBtYWludGFpbiBjb21wYXRpYmlsaXR5XG4gIGVuY3J5cHQoc3RyOiBhbnksIGtleSA9IHRoaXMuYXBwSUQpOiBzdHJpbmcge1xuICAgIGlmKCFzdHIgfHwga2V5ID09PSAnJykgcmV0dXJuICcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIC8vIENvbnZlcnQgdGhlIHN0cmluZyB0byBlbmNyeXB0IHRvIGEgVWludDhBcnJheVxuICAgICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpO1xuICAgICAgY29uc3QgZGF0YSA9IGVuY29kZXIuZW5jb2RlKEpTT04uc3RyaW5naWZ5KHN0cikpO1xuXG4gICAgICAvLyBDcmVhdGUgYSBzaW1wbGUga2V5IGZyb20gdGhlIHByb3ZpZGVkIHN0cmluZ1xuICAgICAgY29uc3Qga2V5Qnl0ZXMgPSBlbmNvZGVyLmVuY29kZShrZXkucGFkRW5kKDE2LCBrZXkpLnN1YnN0cmluZygwLCAxNikpO1xuXG4gICAgICAvLyBTeW5jaHJvbm91cyBBRVMgZW5jcnlwdGlvbiB1c2luZyB0aGUgU3VidGxlQ3J5cHRvIHBvbHlmaWxsIGFwcHJvYWNoXG4gICAgICBjb25zdCBlbmNyeXB0ZWQgPSB0aGlzLmFlc0VuY3J5cHRTeW5jKGRhdGEsIGtleUJ5dGVzKTtcblxuICAgICAgLy8gQ29udmVydCBlbmNyeXB0ZWQgZGF0YSB0byBiYXNlNjQgc3RyaW5nXG4gICAgICByZXR1cm4gdGhpcy5hcnJheUJ1ZmZlclRvQmFzZTY0KGVuY3J5cHRlZCk7XG4gICAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICByZXR1cm4gJyc7XG4gICAgfVxuICB9XG5cbiAgLy8gU3luY2hyb25vdXMgZGVjcnlwdCBtZXRob2QgdG8gbWFpbnRhaW4gY29tcGF0aWJpbGl0eVxuICBkZWNyeXB0KHN0cjogc3RyaW5nLCBrZXkgPSB0aGlzLmFwcElEKTogc3RyaW5nIHwgdW5kZWZpbmVkIHtcbiAgICBpZighc3RyIHx8IGtleSA9PT0gJycpIHJldHVybiB1bmRlZmluZWQ7XG5cbiAgICB0cnkge1xuICAgICAgLy8gQ29udmVydCB0aGUgYmFzZTY0IHN0cmluZyB0byBBcnJheUJ1ZmZlclxuICAgICAgY29uc3QgZW5jcnlwdGVkRGF0YSA9IHRoaXMuYmFzZTY0VG9BcnJheUJ1ZmZlcihzdHIpO1xuXG4gICAgICAvLyBDcmVhdGUgYSBzaW1wbGUga2V5IGZyb20gdGhlIHByb3ZpZGVkIHN0cmluZ1xuICAgICAgY29uc3Qga2V5Qnl0ZXMgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoa2V5LnBhZEVuZCgxNiwga2V5KS5zdWJzdHJpbmcoMCwgMTYpKTtcblxuICAgICAgLy8gU3luY2hyb25vdXMgQUVTIGRlY3J5cHRpb25cbiAgICAgIGNvbnN0IGRlY3J5cHRlZEJ1ZmZlciA9IHRoaXMuYWVzRGVjcnlwdFN5bmMobmV3IFVpbnQ4QXJyYXkoZW5jcnlwdGVkRGF0YSksIGtleUJ5dGVzKTtcblxuICAgICAgLy8gQ29udmVydCBkZWNyeXB0ZWQgZGF0YSB0byBzdHJpbmdcbiAgICAgIHJldHVybiBuZXcgVGV4dERlY29kZXIoKS5kZWNvZGUoZGVjcnlwdGVkQnVmZmVyKTtcbiAgICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKTtcbiAgICAgIHJldHVybiB1bmRlZmluZWQ7XG4gICAgfVxuICB9XG5cbiAgY3JlYXRlU2lnbmF0dXJlKHVybDogc3RyaW5nLCBsZW4gPSAxNik6IHN0cmluZyB7XG4gICAgY29uc3Qgc2lnbmF0dXJlID0gdGhpcy5nZW5lcmF0ZVNpZ25hdHVyZVN5bmModXJsKTtcbiAgICByZXR1cm4gc2lnbmF0dXJlLnN1YnN0cmluZygwLCBsZW4pLnRvVXBwZXJDYXNlKCk7XG4gIH1cblxuICBub3JtYWxpemVVUkwodXJsOiBzdHJpbmcpOiBzdHJpbmcge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRVUkwgPSB1cmwucmVwbGFjZSgvKGh0dHBzPzpcXC9cXC8pPyh3d3dcXC4pPy8sICcnKS5yZXBsYWNlKC9cXC8rJC8sICcnKTtcbiAgICByZXR1cm4gbm9ybWFsaXplZFVSTDtcbiAgfVxuXG4gIGdlbmVyYXRlU2lnbmF0dXJlKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICByZXR1cm4gdGhpcy5nZW5lcmF0ZVNpZ25hdHVyZVN5bmModXJsKTtcbiAgfVxuXG4gIC8vIEhlbHBlciBtZXRob2RzXG4gIHByaXZhdGUgZ2VuZXJhdGVTaWduYXR1cmVTeW5jKHVybDogc3RyaW5nKTogc3RyaW5nIHtcbiAgICBjb25zdCBub3JtYWxpemVkVVJMID0gdGhpcy5ub3JtYWxpemVVUkwodXJsKTtcblxuICAgIC8vIFVzaW5nIGEgc3luY2hyb25vdXMgU0hBLTI1NiBpbXBsZW1lbnRhdGlvblxuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICBjb25zdCBkYXRhID0gZW5jb2Rlci5lbmNvZGUobm9ybWFsaXplZFVSTCk7XG5cbiAgICAvLyBDcmVhdGUgYSBoYXNoIHVzaW5nIHRoZSBTdWJ0bGVDcnlwdG8gaW50ZXJmYWNlIGlmIGF2YWlsYWJsZSwgb3RoZXJ3aXNlIGZhbGxiYWNrXG4gICAgbGV0IGhhc2hBcnJheTtcbiAgICB0cnkge1xuICAgICAgLy8gQ3JlYXRlIGEgc3luY2hyb25vdXMgaGFzaFxuICAgICAgaGFzaEFycmF5ID0gdGhpcy5zaGEyNTZTeW5jKGRhdGEpO1xuICAgIH0gY2F0Y2ggKGVycm9yKSB7XG4gICAgICBjb25zb2xlLmVycm9yKCdTeW5jIGhhc2hpbmcgZmFpbGVkLCB1c2luZyBmYWxsYmFjaycsIGVycm9yKTtcbiAgICAgIC8vIFNpbXBsZSBmYWxsYmFjayBoYXNoIChsZXNzIHNlY3VyZSlcbiAgICAgIGhhc2hBcnJheSA9IHRoaXMuc2ltcGxlSGFzaChkYXRhKTtcbiAgICB9XG5cbiAgICByZXR1cm4gQXJyYXkuZnJvbShoYXNoQXJyYXkpXG4gICAgICAubWFwKGIgPT4gYi50b1N0cmluZygxNikucGFkU3RhcnQoMiwgJzAnKSlcbiAgICAgIC5qb2luKCcnKTtcbiAgfVxuXG4gIC8vIFN5bmNocm9ub3VzIFNIQS0yNTYgaW1wbGVtZW50YXRpb25cbiAgcHJpdmF0ZSBzaGEyNTZTeW5jKGRhdGE6IFVpbnQ4QXJyYXkpOiBVaW50OEFycmF5IHtcbiAgICAvLyBUaGlzIGlzIGEgc2ltcGxpZmllZCB2ZXJzaW9uIGZvciBjb21wYXRpYmlsaXR5XG4gICAgLy8gSXQncyBub3QgYXMgc2VjdXJlIGFzIHRoZSBXZWIgQ3J5cHRvIEFQSSBidXQgbWFpbnRhaW5zIHRoZSBzeW5jaHJvbm91cyBBUElcbiAgICBjb25zdCByZXN1bHQgPSBuZXcgVWludDhBcnJheSgzMik7IC8vIDI1NiBiaXRzID0gMzIgYnl0ZXNcblxuICAgIC8vIFNpbXBsZSBoYXNoIGZ1bmN0aW9uIChmb3IgZGVtb25zdHJhdGlvbiAtIG5vdCBjcnlwdG9ncmFwaGljYWxseSBzdHJvbmcpXG4gICAgbGV0IGggPSAweDEyMzQ1Njc4O1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgZGF0YS5sZW5ndGg7IGkrKykge1xuICAgICAgaCA9ICgoaCA8PCA1KSAtIGgpICsgZGF0YVtpXTtcbiAgICAgIGggfD0gMDsgLy8gQ29udmVydCB0byAzMmJpdCBpbnRlZ2VyXG4gICAgfVxuXG4gICAgLy8gRmlsbCB0aGUgcmVzdWx0IHdpdGggZGVyaXZlZCB2YWx1ZXNcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IDMyOyBpKyspIHtcbiAgICAgIHJlc3VsdFtpXSA9ICgoaCA+PiAoaSAlIDQgKiA4KSkgJiAweEZGKTtcbiAgICAgIGggPSBNYXRoLmltdWwoaCwgMjY1NDQzNTc2MSk7IC8vIFByaW1lIG51bWJlciBtdWx0aXBsaWNhdGlvblxuICAgIH1cblxuICAgIHJldHVybiByZXN1bHQ7XG4gIH1cblxuICAvLyBTaW1wbGUgaGFzaCBmdW5jdGlvblxuICBwcml2YXRlIHNpbXBsZUhhc2goZGF0YTogVWludDhBcnJheSk6IFVpbnQ4QXJyYXkge1xuICAgIGNvbnN0IHJlc3VsdCA9IG5ldyBVaW50OEFycmF5KDMyKTtcbiAgICBsZXQgaDEgPSAweDJmZDRlMWM2O1xuICAgIGxldCBoMiA9IDB4N2IyM2M2ZDg7XG5cbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGRhdGEubGVuZ3RoOyBpKyspIHtcbiAgICAgIGgxID0gKChoMSA8PCA1KSAtIGgxICsgZGF0YVtpXSkgfCAwO1xuICAgICAgaDIgPSAoKGgyIDw8IDUpIC0gaDIgKyAoaDEgXiBkYXRhW2ldKSkgfCAwO1xuICAgIH1cblxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgMTY7IGkrKykge1xuICAgICAgcmVzdWx0W2ldID0gKGgxID4+IChpICogMikpICYgMHhGRjtcbiAgICAgIHJlc3VsdFtpICsgMTZdID0gKGgyID4+IChpICogMikpICYgMHhGRjtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gU3luY2hyb25vdXMgQUVTIGVuY3J5cHRpb24gKHNpbXBsaWZpZWQpXG4gIHByaXZhdGUgYWVzRW5jcnlwdFN5bmMoZGF0YTogVWludDhBcnJheSwga2V5OiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gICAgLy8gVGhpcyBpcyBhIHNpbXBsaWZpZWQgaW1wbGVtZW50YXRpb24gZm9yIGNvbXBhdGliaWxpdHlcbiAgICAvLyBJdCdzIG5vdCBhcyBzZWN1cmUgYXMgdGhlIFdlYiBDcnlwdG8gQVBJXG4gICAgY29uc3QgcmVzdWx0ID0gbmV3IFVpbnQ4QXJyYXkoZGF0YS5sZW5ndGgpO1xuXG4gICAgLy8gWE9SLWJhc2VkIGNpcGhlciAobm90IGFjdHVhbCBBRVMsIGp1c3QgZm9yIGNvbXBhdGliaWxpdHkpXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBkYXRhLmxlbmd0aDsgaSsrKSB7XG4gICAgICByZXN1bHRbaV0gPSBkYXRhW2ldIF4ga2V5W2kgJSBrZXkubGVuZ3RoXTtcbiAgICB9XG5cbiAgICByZXR1cm4gcmVzdWx0O1xuICB9XG5cbiAgLy8gU3luY2hyb25vdXMgQUVTIGRlY3J5cHRpb24gKHNpbXBsaWZpZWQpXG4gIHByaXZhdGUgYWVzRGVjcnlwdFN5bmMoZGF0YTogVWludDhBcnJheSwga2V5OiBVaW50OEFycmF5KTogVWludDhBcnJheSB7XG4gICAgLy8gRm9yIGEgc2ltcGxlIFhPUiBjaXBoZXIsIGVuY3J5cHRpb24gYW5kIGRlY3J5cHRpb24gYXJlIHRoZSBzYW1lIG9wZXJhdGlvblxuICAgIHJldHVybiB0aGlzLmFlc0VuY3J5cHRTeW5jKGRhdGEsIGtleSk7XG4gIH1cblxuICBwcml2YXRlIGFycmF5QnVmZmVyVG9CYXNlNjQoYnVmZmVyOiBBcnJheUJ1ZmZlciB8IFVpbnQ4QXJyYXkpOiBzdHJpbmcge1xuICAgIGNvbnN0IGJ5dGVzID0gYnVmZmVyIGluc3RhbmNlb2YgVWludDhBcnJheSA/IGJ1ZmZlciA6IG5ldyBVaW50OEFycmF5KGJ1ZmZlcik7XG4gICAgbGV0IGJpbmFyeSA9ICcnO1xuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgYnl0ZXMuYnl0ZUxlbmd0aDsgaSsrKSB7XG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShieXRlc1tpXSk7XG4gICAgfVxuICAgIHJldHVybiBidG9hKGJpbmFyeSk7XG4gIH1cblxuICBwcml2YXRlIGJhc2U2NFRvQXJyYXlCdWZmZXIoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XG4gICAgY29uc3QgYmluYXJ5U3RyaW5nID0gYXRvYihiYXNlNjQpO1xuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkoYmluYXJ5U3RyaW5nLmxlbmd0aCk7XG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBiaW5hcnlTdHJpbmcubGVuZ3RoOyBpKyspIHtcbiAgICAgIGJ5dGVzW2ldID0gYmluYXJ5U3RyaW5nLmNoYXJDb2RlQXQoaSk7XG4gICAgfVxuICAgIHJldHVybiBieXRlcy5idWZmZXI7XG4gIH1cblxuICAvLyBBc3luYyB2ZXJzaW9ucyBvZiB0aGUgbWV0aG9kcyBmb3IgZnV0dXJlIHVzZVxuICBhc3luYyBlbmNyeXB0QXN5bmMoc3RyOiBhbnksIGtleSA9IHRoaXMuYXBwSUQpOiBQcm9taXNlPHN0cmluZz4ge1xuICAgIGlmKCFzdHIgfHwga2V5ID09PSAnJykgcmV0dXJuICcnO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICAgIGNvbnN0IGRhdGEgPSBlbmNvZGVyLmVuY29kZShKU09OLnN0cmluZ2lmeShzdHIpKTtcblxuICAgICAgY29uc3Qga2V5TWF0ZXJpYWwgPSBhd2FpdCB0aGlzLmdldEtleU1hdGVyaWFsKGtleSk7XG4gICAgICBjb25zdCBkZXJpdmVkS2V5ID0gYXdhaXQgdGhpcy5kZXJpdmVLZXkoa2V5TWF0ZXJpYWwsIGVuY29kZXIuZW5jb2RlKGtleSkpO1xuXG4gICAgICBjb25zdCBpdiA9IGVuY29kZXIuZW5jb2RlKGtleS5wYWRFbmQoMTYsIGtleSkuc3Vic3RyaW5nKDAsIDE2KSk7XG5cbiAgICAgIGNvbnN0IGVuY3J5cHRlZEJ1ZmZlciA9IGF3YWl0IHdpbmRvdy5jcnlwdG8uc3VidGxlLmVuY3J5cHQoXG4gICAgICAgIHtcbiAgICAgICAgICBuYW1lOiAnQUVTLUNCQycsXG4gICAgICAgICAgaXZcbiAgICAgICAgfSxcbiAgICAgICAgZGVyaXZlZEtleSxcbiAgICAgICAgZGF0YVxuICAgICAgKTtcblxuICAgICAgcmV0dXJuIHRoaXMuYXJyYXlCdWZmZXJUb0Jhc2U2NChlbmNyeXB0ZWRCdWZmZXIpO1xuICAgIH0gY2F0Y2goZXJyb3I6IGFueSkge1xuICAgICAgY29uc29sZS5sb2coZXJyb3IpO1xuICAgICAgcmV0dXJuICcnO1xuICAgIH1cbiAgfVxuXG4gIGFzeW5jIGRlY3J5cHRBc3luYyhzdHI6IHN0cmluZywga2V5ID0gdGhpcy5hcHBJRCk6IFByb21pc2U8c3RyaW5nIHwgdW5kZWZpbmVkPiB7XG4gICAgaWYoIXN0ciB8fCBrZXkgPT09ICcnKSByZXR1cm4gdW5kZWZpbmVkO1xuXG4gICAgdHJ5IHtcbiAgICAgIGNvbnN0IGVuY3J5cHRlZERhdGEgPSB0aGlzLmJhc2U2NFRvQXJyYXlCdWZmZXIoc3RyKTtcblxuICAgICAgY29uc3Qga2V5TWF0ZXJpYWwgPSBhd2FpdCB0aGlzLmdldEtleU1hdGVyaWFsKGtleSk7XG4gICAgICBjb25zdCBkZXJpdmVkS2V5ID0gYXdhaXQgdGhpcy5kZXJpdmVLZXkoa2V5TWF0ZXJpYWwsIG5ldyBUZXh0RW5jb2RlcigpLmVuY29kZShrZXkpKTtcblxuICAgICAgY29uc3QgaXYgPSBuZXcgVGV4dEVuY29kZXIoKS5lbmNvZGUoa2V5LnBhZEVuZCgxNiwga2V5KS5zdWJzdHJpbmcoMCwgMTYpKTtcblxuICAgICAgY29uc3QgZGVjcnlwdGVkQnVmZmVyID0gYXdhaXQgd2luZG93LmNyeXB0by5zdWJ0bGUuZGVjcnlwdChcbiAgICAgICAge1xuICAgICAgICAgIG5hbWU6ICdBRVMtQ0JDJyxcbiAgICAgICAgICBpdlxuICAgICAgICB9LFxuICAgICAgICBkZXJpdmVkS2V5LFxuICAgICAgICBlbmNyeXB0ZWREYXRhXG4gICAgICApO1xuXG4gICAgICByZXR1cm4gbmV3IFRleHREZWNvZGVyKCkuZGVjb2RlKGRlY3J5cHRlZEJ1ZmZlcik7XG4gICAgfSBjYXRjaChlcnJvcjogYW55KSB7XG4gICAgICBjb25zb2xlLmxvZyhlcnJvcik7XG4gICAgICByZXR1cm4gdW5kZWZpbmVkO1xuICAgIH1cbiAgfVxuXG4gIHByaXZhdGUgYXN5bmMgZ2V0S2V5TWF0ZXJpYWwoa2V5OiBzdHJpbmcpOiBQcm9taXNlPENyeXB0b0tleT4ge1xuICAgIGNvbnN0IGVuY29kZXIgPSBuZXcgVGV4dEVuY29kZXIoKTtcbiAgICByZXR1cm4gd2luZG93LmNyeXB0by5zdWJ0bGUuaW1wb3J0S2V5KFxuICAgICAgJ3JhdycsXG4gICAgICBlbmNvZGVyLmVuY29kZShrZXkpLFxuICAgICAgeyBuYW1lOiAnUEJLREYyJyB9LFxuICAgICAgZmFsc2UsXG4gICAgICBbJ2Rlcml2ZUJpdHMnLCAnZGVyaXZlS2V5J11cbiAgICApO1xuICB9XG5cbiAgcHJpdmF0ZSBhc3luYyBkZXJpdmVLZXkoa2V5TWF0ZXJpYWw6IENyeXB0b0tleSwgc2FsdDogVWludDhBcnJheSk6IFByb21pc2U8Q3J5cHRvS2V5PiB7XG4gICAgcmV0dXJuIHdpbmRvdy5jcnlwdG8uc3VidGxlLmRlcml2ZUtleShcbiAgICAgIHtcbiAgICAgICAgbmFtZTogJ1BCS0RGMicsXG4gICAgICAgIHNhbHQsXG4gICAgICAgIGl0ZXJhdGlvbnM6IDEwMDAwMCxcbiAgICAgICAgaGFzaDogJ1NIQS0yNTYnXG4gICAgICB9LFxuICAgICAga2V5TWF0ZXJpYWwsXG4gICAgICB7IG5hbWU6ICdBRVMtQ0JDJywgbGVuZ3RoOiAyNTYgfSxcbiAgICAgIGZhbHNlLFxuICAgICAgWydlbmNyeXB0JywgJ2RlY3J5cHQnXVxuICAgICk7XG4gIH1cbn1cbiJdfQ==
|
|
77
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoic3ltbWV0cmljYWwtZW5jcnlwdGlvbi5zZXJ2aWNlLmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcHJvamVjdHMvaHR0cC1yZXF1ZXN0LW1hbmFnZXIvc3JjL2xpYi9zZXJ2aWNlcy91dGlscy9lbmNyeXB0aW9uL3N5bW1ldHJpY2FsLWVuY3J5cHRpb24uc2VydmljZS50cyJdLCJuYW1lcyI6W10sIm1hcHBpbmdzIjoiQUFBQSxPQUFPLEVBQUUsVUFBVSxFQUFFLE1BQU0sRUFBRSxNQUFNLGVBQWUsQ0FBQztBQUNuRCxPQUFPLEtBQUssUUFBUSxNQUFNLFdBQVcsQ0FBQztBQUV0QyxPQUFPLEVBQUUsZUFBZSxFQUFFLE1BQU0sVUFBVSxDQUFDO0FBQzNDLE9BQU8sRUFBRSxVQUFVLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQzs7QUFLNUMsTUFBTSxPQUFPLDRCQUE0QjtJQU12QztRQUZRLGVBQVUsR0FBRyxNQUFNLENBQUMsVUFBVSxDQUFDLENBQUE7UUFHckMscURBQXFEO1FBQ3JELElBQUksQ0FBQyxLQUFLLEdBQUcsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsQ0FBQyxJQUFJLENBQUMsVUFBVSxDQUFDLEtBQUssQ0FBQyxDQUFDLENBQUMsRUFBRSxDQUFBO1FBQ2pFLElBQUcsSUFBSSxDQUFDLEtBQUssS0FBSyxFQUFFO1lBQUUsT0FBTyxDQUFDLElBQUksQ0FBQyw0QkFBNEIsQ0FBQyxDQUFBO0lBQ2xFLENBQUM7SUFFRCxpQkFBaUI7UUFDZixPQUFPLENBQUMsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLEdBQUcsZUFBZSxFQUFFLENBQUMsUUFBUSxFQUFFLENBQUMsQ0FBQyxTQUFTLENBQUMsQ0FBQyxFQUFFLENBQUMsQ0FBQyxDQUFBO0lBQ3RGLENBQUM7SUFFRCxPQUFPLENBQUMsR0FBUSxFQUFFLEdBQUcsR0FBRyxJQUFJLENBQUMsS0FBSztRQUVoQyxJQUFHLENBQUMs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QWpGVSw0QkFBNEI7bUhBQTVCLDRCQUE0QixjQUYzQixNQUFNOzs0RkFFUCw0QkFBNEI7a0JBSHhDLFVBQVU7bUJBQUM7b0JBQ1YsVUFBVSxFQUFFLE1BQU07aUJBQ25CIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0YWJsZSwgaW5qZWN0IH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgKiBhcyBDcnlwdG9KUyBmcm9tICdjcnlwdG8tanMnO1xuXG5pbXBvcnQgeyBSYW5kb21TaWduYXR1cmUgfSBmcm9tICcuL3JhbmRvbSc7XG5pbXBvcnQgeyBBcHBTZXJ2aWNlIH0gZnJvbSAnLi4vYXBwLnNlcnZpY2UnO1xuXG5ASW5qZWN0YWJsZSh7XG4gIHByb3ZpZGVkSW46ICdyb290J1xufSlcbmV4cG9ydCBjbGFzcyBTeW1tZXRyaWNhbEVuY3J5cHRpb25TZXJ2aWNlIHtcblxuICBhcHBJRDogc3RyaW5nOyAvLyBBUFAgU0VSVklDRSBUTyBNQU5BR0VSIEVOQ1JZUFRJT04gS0VZXG5cbiAgcHJpdmF0ZSBhcHBTZXJ2aWNlID0gaW5qZWN0KEFwcFNlcnZpY2UpXG5cbiAgY29uc3RydWN0b3IoKSB7XG4gICAgLy8gVE9ETzogVGhlIEFQUCBJRCBpcyBub3QgYSBzdHJpbmcsIGl0IGlzIGEgZnVuY3Rpb25cbiAgICB0aGlzLmFwcElEID0gKHRoaXMuYXBwU2VydmljZS5hcHBJRCkgPyB0aGlzLmFwcFNlcnZpY2UuYXBwSUQgOiAnJ1xuICAgIGlmKHRoaXMuYXBwSUQgPT09ICcnKSBjb25zb2xlLndhcm4oJ05vIEFwcCBLZXkgaGFzIGJlZW4gZGVmaW5lJylcbiAgfVxuXG4gIGdlbmVyYXRlQ2lwaGVyS2V5KCkge1xuICAgIHJldHVybiAoUmFuZG9tU2lnbmF0dXJlKCkudG9TdHJpbmcoKSArIFJhbmRvbVNpZ25hdHVyZSgpLnRvU3RyaW5nKCkpLnN1YnN0cmluZygwLCA4KVxuICB9XG5cbiAgZW5jcnlwdChzdHI6IGFueSwga2V5ID0gdGhpcy5hcHBJRCkge1xuXG4gICAgaWYoIXN0ciB8fCBrZXkgPT09ICcnKSByZXR1cm4gJydcblxuICAgIGxldCBfa2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KVxuICAgIGxldCBfaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXkpXG5cbiAgICB0cnkge1xuXG4gICAgY29uc3QgZW5jcnlwdGVkID0gQ3J5cHRvSlMuQUVTLmVuY3J5cHQoXG4gICAgICBKU09OLnN0cmluZ2lmeShzdHIpLCBfa2V5LCB7XG4gICAgICAgIGtleVNpemU6IDE2LFxuICAgICAgICBpdjogX2l2LFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkVDQixcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XG4gICAgICB9KTtcblxuICAgICAgcmV0dXJuIGVuY3J5cHRlZC50b1N0cmluZygpXG5cbiAgICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgZGVjcnlwdChzdHI6IHN0cmluZywga2V5ID0gdGhpcy5hcHBJRCkge1xuXG4gICAgaWYoIXN0ciB8fCBrZXkgPT09ICcnKSByZXR1cm5cblxuICAgIGxldCBfa2V5ID0gQ3J5cHRvSlMuZW5jLlV0ZjgucGFyc2Uoa2V5KVxuICAgIGxldCBfaXYgPSBDcnlwdG9KUy5lbmMuVXRmOC5wYXJzZShrZXkpXG5cbiAgICB0cnkge1xuXG4gICAgcmV0dXJuIENyeXB0b0pTLkFFUy5kZWNyeXB0KFxuICAgICAgc3RyLCBfa2V5LCB7XG4gICAgICAgIGtleVNpemU6IDE2LFxuICAgICAgICBpdjogX2l2LFxuICAgICAgICBtb2RlOiBDcnlwdG9KUy5tb2RlLkVDQixcbiAgICAgICAgcGFkZGluZzogQ3J5cHRvSlMucGFkLlBrY3M3XG4gICAgICB9KS50b1N0cmluZyhDcnlwdG9KUy5lbmMuVXRmOCk7XG5cbiAgICB9IGNhdGNoKGVycm9yOiBhbnkpIHtcbiAgICAgIGNvbnNvbGUubG9nKGVycm9yKVxuICAgIH1cblxuICAgIHJldHVyblxuICB9XG5cbiAgY3JlYXRlU2lnbmF0dXJlKHVybDogc3RyaW5nLCBsZW4gPSAxNikge1xuICAgIGNvbnN0IHNpZyA9IENyeXB0b0pTLlNIQTI1Nih1cmwpLnRvU3RyaW5nKENyeXB0b0pTLmVuYy5IZXgpXG4gICAgcmV0dXJuIHNpZy5zdWJzdHJpbmcoMCwgbGVuKS50b1VwcGVyQ2FzZSgpXG4gIH1cblxuICBub3JtYWxpemVVUkwodXJsOiBzdHJpbmcpIHtcbiAgICBjb25zdCBub3JtYWxpemVkVVJMID0gdXJsLnJlcGxhY2UoLyhodHRwcz86XFwvXFwvKT8od3d3XFwuKT8vLCAnJykucmVwbGFjZSgvXFwvKyQvLCAnJyk7XG4gICAgcmV0dXJuIG5vcm1hbGl6ZWRVUkw7XG4gIH1cblxuICBnZW5lcmF0ZVNpZ25hdHVyZSh1cmw6IHN0cmluZykge1xuICAgIGNvbnN0IG5vcm1hbGl6ZWRVUkwgPSB0aGlzLm5vcm1hbGl6ZVVSTCh1cmwpXG4gICAgY29uc3QgaGFzaCA9IENyeXB0b0pTLlNIQTI1Nihub3JtYWxpemVkVVJMKVxuICAgIGNvbnN0IHNpZ25hdHVyZSA9IGhhc2gudG9TdHJpbmcoQ3J5cHRvSlMuZW5jLkhleClcbiAgICByZXR1cm4gc2lnbmF0dXJlO1xuICB9XG5cbn1cbiJdfQ==
|
|
@@ -3,6 +3,7 @@ import { inject, Injectable, APP_ID, Inject, InjectionToken, Injector, Optional,
|
|
|
3
3
|
import { ComponentStore } from '@ngrx/component-store';
|
|
4
4
|
import { map, catchError, filter, finalize, takeWhile, retry, startWith, tap, mergeMap, takeUntil, withLatestFrom, switchMap, concatMap, scan, distinctUntilChanged } from 'rxjs/operators';
|
|
5
5
|
import { HttpClient, HttpHeaders, HttpEventType, HttpErrorResponse, HTTP_INTERCEPTORS } from '@angular/common/http';
|
|
6
|
+
import * as CryptoJS from 'crypto-js';
|
|
6
7
|
import { from, BehaviorSubject, EMPTY, throwError, defer, interval, timer, Subject, of, Subscription, catchError as catchError$1 } from 'rxjs';
|
|
7
8
|
import { ToastMessageDisplayService, ToastDisplay, ToastColors, ToastMessageDisplayModule } from 'toast-message-display';
|
|
8
9
|
import * as i1 from '@ngx-translate/core';
|
|
@@ -333,193 +334,56 @@ class SymmetricalEncryptionService {
|
|
|
333
334
|
generateCipherKey() {
|
|
334
335
|
return (RandomSignature().toString() + RandomSignature().toString()).substring(0, 8);
|
|
335
336
|
}
|
|
336
|
-
// Synchronous encrypt method to maintain compatibility
|
|
337
337
|
encrypt(str, key = this.appID) {
|
|
338
338
|
if (!str || key === '')
|
|
339
339
|
return '';
|
|
340
|
+
let _key = CryptoJS.enc.Utf8.parse(key);
|
|
341
|
+
let _iv = CryptoJS.enc.Utf8.parse(key);
|
|
340
342
|
try {
|
|
341
|
-
|
|
342
|
-
|
|
343
|
-
|
|
344
|
-
|
|
345
|
-
|
|
346
|
-
|
|
347
|
-
|
|
348
|
-
// Convert encrypted data to base64 string
|
|
349
|
-
return this.arrayBufferToBase64(encrypted);
|
|
343
|
+
const encrypted = CryptoJS.AES.encrypt(JSON.stringify(str), _key, {
|
|
344
|
+
keySize: 16,
|
|
345
|
+
iv: _iv,
|
|
346
|
+
mode: CryptoJS.mode.ECB,
|
|
347
|
+
padding: CryptoJS.pad.Pkcs7
|
|
348
|
+
});
|
|
349
|
+
return encrypted.toString();
|
|
350
350
|
}
|
|
351
351
|
catch (error) {
|
|
352
352
|
console.log(error);
|
|
353
|
-
return '';
|
|
354
353
|
}
|
|
354
|
+
return;
|
|
355
355
|
}
|
|
356
|
-
// Synchronous decrypt method to maintain compatibility
|
|
357
356
|
decrypt(str, key = this.appID) {
|
|
358
357
|
if (!str || key === '')
|
|
359
|
-
return
|
|
358
|
+
return;
|
|
359
|
+
let _key = CryptoJS.enc.Utf8.parse(key);
|
|
360
|
+
let _iv = CryptoJS.enc.Utf8.parse(key);
|
|
360
361
|
try {
|
|
361
|
-
|
|
362
|
-
|
|
363
|
-
|
|
364
|
-
|
|
365
|
-
|
|
366
|
-
|
|
367
|
-
// Convert decrypted data to string
|
|
368
|
-
return new TextDecoder().decode(decryptedBuffer);
|
|
362
|
+
return CryptoJS.AES.decrypt(str, _key, {
|
|
363
|
+
keySize: 16,
|
|
364
|
+
iv: _iv,
|
|
365
|
+
mode: CryptoJS.mode.ECB,
|
|
366
|
+
padding: CryptoJS.pad.Pkcs7
|
|
367
|
+
}).toString(CryptoJS.enc.Utf8);
|
|
369
368
|
}
|
|
370
369
|
catch (error) {
|
|
371
370
|
console.log(error);
|
|
372
|
-
return undefined;
|
|
373
371
|
}
|
|
372
|
+
return;
|
|
374
373
|
}
|
|
375
374
|
createSignature(url, len = 16) {
|
|
376
|
-
const
|
|
377
|
-
return
|
|
375
|
+
const sig = CryptoJS.SHA256(url).toString(CryptoJS.enc.Hex);
|
|
376
|
+
return sig.substring(0, len).toUpperCase();
|
|
378
377
|
}
|
|
379
378
|
normalizeURL(url) {
|
|
380
379
|
const normalizedURL = url.replace(/(https?:\/\/)?(www\.)?/, '').replace(/\/+$/, '');
|
|
381
380
|
return normalizedURL;
|
|
382
381
|
}
|
|
383
382
|
generateSignature(url) {
|
|
384
|
-
return this.generateSignatureSync(url);
|
|
385
|
-
}
|
|
386
|
-
// Helper methods
|
|
387
|
-
generateSignatureSync(url) {
|
|
388
383
|
const normalizedURL = this.normalizeURL(url);
|
|
389
|
-
|
|
390
|
-
const
|
|
391
|
-
|
|
392
|
-
// Create a hash using the SubtleCrypto interface if available, otherwise fallback
|
|
393
|
-
let hashArray;
|
|
394
|
-
try {
|
|
395
|
-
// Create a synchronous hash
|
|
396
|
-
hashArray = this.sha256Sync(data);
|
|
397
|
-
}
|
|
398
|
-
catch (error) {
|
|
399
|
-
console.error('Sync hashing failed, using fallback', error);
|
|
400
|
-
// Simple fallback hash (less secure)
|
|
401
|
-
hashArray = this.simpleHash(data);
|
|
402
|
-
}
|
|
403
|
-
return Array.from(hashArray)
|
|
404
|
-
.map(b => b.toString(16).padStart(2, '0'))
|
|
405
|
-
.join('');
|
|
406
|
-
}
|
|
407
|
-
// Synchronous SHA-256 implementation
|
|
408
|
-
sha256Sync(data) {
|
|
409
|
-
// This is a simplified version for compatibility
|
|
410
|
-
// It's not as secure as the Web Crypto API but maintains the synchronous API
|
|
411
|
-
const result = new Uint8Array(32); // 256 bits = 32 bytes
|
|
412
|
-
// Simple hash function (for demonstration - not cryptographically strong)
|
|
413
|
-
let h = 0x12345678;
|
|
414
|
-
for (let i = 0; i < data.length; i++) {
|
|
415
|
-
h = ((h << 5) - h) + data[i];
|
|
416
|
-
h |= 0; // Convert to 32bit integer
|
|
417
|
-
}
|
|
418
|
-
// Fill the result with derived values
|
|
419
|
-
for (let i = 0; i < 32; i++) {
|
|
420
|
-
result[i] = ((h >> (i % 4 * 8)) & 0xFF);
|
|
421
|
-
h = Math.imul(h, 2654435761); // Prime number multiplication
|
|
422
|
-
}
|
|
423
|
-
return result;
|
|
424
|
-
}
|
|
425
|
-
// Simple hash function
|
|
426
|
-
simpleHash(data) {
|
|
427
|
-
const result = new Uint8Array(32);
|
|
428
|
-
let h1 = 0x2fd4e1c6;
|
|
429
|
-
let h2 = 0x7b23c6d8;
|
|
430
|
-
for (let i = 0; i < data.length; i++) {
|
|
431
|
-
h1 = ((h1 << 5) - h1 + data[i]) | 0;
|
|
432
|
-
h2 = ((h2 << 5) - h2 + (h1 ^ data[i])) | 0;
|
|
433
|
-
}
|
|
434
|
-
for (let i = 0; i < 16; i++) {
|
|
435
|
-
result[i] = (h1 >> (i * 2)) & 0xFF;
|
|
436
|
-
result[i + 16] = (h2 >> (i * 2)) & 0xFF;
|
|
437
|
-
}
|
|
438
|
-
return result;
|
|
439
|
-
}
|
|
440
|
-
// Synchronous AES encryption (simplified)
|
|
441
|
-
aesEncryptSync(data, key) {
|
|
442
|
-
// This is a simplified implementation for compatibility
|
|
443
|
-
// It's not as secure as the Web Crypto API
|
|
444
|
-
const result = new Uint8Array(data.length);
|
|
445
|
-
// XOR-based cipher (not actual AES, just for compatibility)
|
|
446
|
-
for (let i = 0; i < data.length; i++) {
|
|
447
|
-
result[i] = data[i] ^ key[i % key.length];
|
|
448
|
-
}
|
|
449
|
-
return result;
|
|
450
|
-
}
|
|
451
|
-
// Synchronous AES decryption (simplified)
|
|
452
|
-
aesDecryptSync(data, key) {
|
|
453
|
-
// For a simple XOR cipher, encryption and decryption are the same operation
|
|
454
|
-
return this.aesEncryptSync(data, key);
|
|
455
|
-
}
|
|
456
|
-
arrayBufferToBase64(buffer) {
|
|
457
|
-
const bytes = buffer instanceof Uint8Array ? buffer : new Uint8Array(buffer);
|
|
458
|
-
let binary = '';
|
|
459
|
-
for (let i = 0; i < bytes.byteLength; i++) {
|
|
460
|
-
binary += String.fromCharCode(bytes[i]);
|
|
461
|
-
}
|
|
462
|
-
return btoa(binary);
|
|
463
|
-
}
|
|
464
|
-
base64ToArrayBuffer(base64) {
|
|
465
|
-
const binaryString = atob(base64);
|
|
466
|
-
const bytes = new Uint8Array(binaryString.length);
|
|
467
|
-
for (let i = 0; i < binaryString.length; i++) {
|
|
468
|
-
bytes[i] = binaryString.charCodeAt(i);
|
|
469
|
-
}
|
|
470
|
-
return bytes.buffer;
|
|
471
|
-
}
|
|
472
|
-
// Async versions of the methods for future use
|
|
473
|
-
async encryptAsync(str, key = this.appID) {
|
|
474
|
-
if (!str || key === '')
|
|
475
|
-
return '';
|
|
476
|
-
try {
|
|
477
|
-
const encoder = new TextEncoder();
|
|
478
|
-
const data = encoder.encode(JSON.stringify(str));
|
|
479
|
-
const keyMaterial = await this.getKeyMaterial(key);
|
|
480
|
-
const derivedKey = await this.deriveKey(keyMaterial, encoder.encode(key));
|
|
481
|
-
const iv = encoder.encode(key.padEnd(16, key).substring(0, 16));
|
|
482
|
-
const encryptedBuffer = await window.crypto.subtle.encrypt({
|
|
483
|
-
name: 'AES-CBC',
|
|
484
|
-
iv
|
|
485
|
-
}, derivedKey, data);
|
|
486
|
-
return this.arrayBufferToBase64(encryptedBuffer);
|
|
487
|
-
}
|
|
488
|
-
catch (error) {
|
|
489
|
-
console.log(error);
|
|
490
|
-
return '';
|
|
491
|
-
}
|
|
492
|
-
}
|
|
493
|
-
async decryptAsync(str, key = this.appID) {
|
|
494
|
-
if (!str || key === '')
|
|
495
|
-
return undefined;
|
|
496
|
-
try {
|
|
497
|
-
const encryptedData = this.base64ToArrayBuffer(str);
|
|
498
|
-
const keyMaterial = await this.getKeyMaterial(key);
|
|
499
|
-
const derivedKey = await this.deriveKey(keyMaterial, new TextEncoder().encode(key));
|
|
500
|
-
const iv = new TextEncoder().encode(key.padEnd(16, key).substring(0, 16));
|
|
501
|
-
const decryptedBuffer = await window.crypto.subtle.decrypt({
|
|
502
|
-
name: 'AES-CBC',
|
|
503
|
-
iv
|
|
504
|
-
}, derivedKey, encryptedData);
|
|
505
|
-
return new TextDecoder().decode(decryptedBuffer);
|
|
506
|
-
}
|
|
507
|
-
catch (error) {
|
|
508
|
-
console.log(error);
|
|
509
|
-
return undefined;
|
|
510
|
-
}
|
|
511
|
-
}
|
|
512
|
-
async getKeyMaterial(key) {
|
|
513
|
-
const encoder = new TextEncoder();
|
|
514
|
-
return window.crypto.subtle.importKey('raw', encoder.encode(key), { name: 'PBKDF2' }, false, ['deriveBits', 'deriveKey']);
|
|
515
|
-
}
|
|
516
|
-
async deriveKey(keyMaterial, salt) {
|
|
517
|
-
return window.crypto.subtle.deriveKey({
|
|
518
|
-
name: 'PBKDF2',
|
|
519
|
-
salt,
|
|
520
|
-
iterations: 100000,
|
|
521
|
-
hash: 'SHA-256'
|
|
522
|
-
}, keyMaterial, { name: 'AES-CBC', length: 256 }, false, ['encrypt', 'decrypt']);
|
|
384
|
+
const hash = CryptoJS.SHA256(normalizedURL);
|
|
385
|
+
const signature = hash.toString(CryptoJS.enc.Hex);
|
|
386
|
+
return signature;
|
|
523
387
|
}
|
|
524
388
|
static { this.ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SymmetricalEncryptionService, deps: [], target: i0.ɵɵFactoryTarget.Injectable }); }
|
|
525
389
|
static { this.ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "16.2.12", ngImport: i0, type: SymmetricalEncryptionService, providedIn: 'root' }); }
|