auth-monitorias-uniandes 0.1.2-beta.58 → 0.1.2-beta.60
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/lib/encryption/encryption.module.d.ts +2 -0
- package/lib/encryption/encryption.module.js +18 -0
- package/lib/encryption/encryption.module.js.map +1 -0
- package/lib/encryption/encryption.module.metadata.json +1 -0
- package/lib/encryption/index.d.ts +3 -0
- package/lib/encryption/index.js +9 -0
- package/lib/encryption/index.js.map +1 -0
- package/lib/encryption/index.metadata.json +1 -0
- package/lib/encryption/interceptors/encryption.interceptor.d.ts +12 -0
- package/lib/encryption/interceptors/encryption.interceptor.js +109 -0
- package/lib/encryption/interceptors/encryption.interceptor.js.map +1 -0
- package/lib/encryption/interceptors/encryption.interceptor.metadata.json +1 -0
- package/lib/encryption/rsa-public-key.d.ts +2 -0
- package/lib/encryption/rsa-public-key.js +5 -0
- package/lib/encryption/rsa-public-key.js.map +1 -0
- package/lib/encryption/rsa-public-key.metadata.json +1 -0
- package/lib/encryption/services/encryption.service.d.ts +13 -0
- package/lib/encryption/services/encryption.service.js +211 -0
- package/lib/encryption/services/encryption.service.js.map +1 -0
- package/lib/encryption/services/encryption.service.metadata.json +1 -0
- package/lib/index.d.ts +1 -0
- package/lib/index.js +1 -0
- package/lib/index.js.map +1 -1
- package/lib/index.metadata.json +1 -1
- package/package.json +1 -1
|
@@ -0,0 +1,18 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
3
|
+
var core_1 = require("@angular/core");
|
|
4
|
+
var encryption_service_1 = require("./services/encryption.service");
|
|
5
|
+
var EncryptionModule = /** @class */ (function () {
|
|
6
|
+
function EncryptionModule() {
|
|
7
|
+
}
|
|
8
|
+
EncryptionModule.decorators = [
|
|
9
|
+
{ type: core_1.NgModule, args: [{
|
|
10
|
+
providers: [
|
|
11
|
+
encryption_service_1.EncryptionService
|
|
12
|
+
]
|
|
13
|
+
},] },
|
|
14
|
+
];
|
|
15
|
+
return EncryptionModule;
|
|
16
|
+
}());
|
|
17
|
+
exports.EncryptionModule = EncryptionModule;
|
|
18
|
+
//# sourceMappingURL=encryption.module.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.module.js","sourceRoot":"","sources":["../../build/encryption/encryption.module.ts"],"names":[],"mappings":";;AAAA,sCAAyC;AAEzC,oEAAkE;;;;;gBAEjE,eAAQ,SAAC;oBACR,SAAS,EAAE;wBACT,sCAAiB;qBAClB;iBACF;;2BARD;;AAUa,4CAAgB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"EncryptionModule":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"NgModule","line":4,"character":1},"arguments":[{"providers":[{"__symbolic":"reference","module":"./services/encryption.service","name":"EncryptionService","line":6,"character":4}]}]}]}}}]
|
|
@@ -0,0 +1,9 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
function __export(m) {
|
|
3
|
+
for (var p in m) if (!exports.hasOwnProperty(p)) exports[p] = m[p];
|
|
4
|
+
}
|
|
5
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
6
|
+
__export(require("./encryption.module"));
|
|
7
|
+
__export(require("./interceptors/encryption.interceptor"));
|
|
8
|
+
__export(require("./rsa-public-key"));
|
|
9
|
+
//# sourceMappingURL=index.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../../build/encryption/index.ts"],"names":[],"mappings":";;;;;AAAA,yCAAmC;AACnC,2DAAsD;AACtD,sCAAgC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{},"exports":[{"from":"./encryption.module"},{"from":"./interceptors/encryption.interceptor"},{"from":"./rsa-public-key"}]}]
|
|
@@ -0,0 +1,12 @@
|
|
|
1
|
+
import { HttpEvent, HttpHandler, HttpInterceptor, HttpRequest } from '@angular/common/http';
|
|
2
|
+
import { Observable } from 'rxjs';
|
|
3
|
+
import { EncryptionService } from '../services/encryption.service';
|
|
4
|
+
export declare class EncryptionInterceptor implements HttpInterceptor {
|
|
5
|
+
private rsaPublicKey;
|
|
6
|
+
private encryptionService;
|
|
7
|
+
private endpointsToEncrypt;
|
|
8
|
+
constructor(rsaPublicKey: string, encryptionService: EncryptionService);
|
|
9
|
+
intercept(request: HttpRequest<any>, next: HttpHandler): Observable<HttpEvent<any>>;
|
|
10
|
+
private encryptLastUrlSegment(request, urlSegments, queryString?);
|
|
11
|
+
private encryptBody(request);
|
|
12
|
+
}
|
|
@@ -0,0 +1,109 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (_) try {
|
|
17
|
+
if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [0, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
var core_1 = require("@angular/core");
|
|
39
|
+
var from_1 = require("rxjs/observable/from");
|
|
40
|
+
var operators_1 = require("rxjs/operators");
|
|
41
|
+
var encryption_service_1 = require("../services/encryption.service");
|
|
42
|
+
var rsa_public_key_1 = require("../rsa-public-key");
|
|
43
|
+
var EncryptionInterceptor = /** @class */ (function () {
|
|
44
|
+
function EncryptionInterceptor(rsaPublicKey, encryptionService) {
|
|
45
|
+
this.rsaPublicKey = rsaPublicKey;
|
|
46
|
+
this.encryptionService = encryptionService;
|
|
47
|
+
this.endpointsToEncrypt = ['getPerson', 'getStudent', 'getStudentByUsername'];
|
|
48
|
+
}
|
|
49
|
+
EncryptionInterceptor.prototype.intercept = function (request, next) {
|
|
50
|
+
var _this = this;
|
|
51
|
+
var _a = request.urlWithParams.split('?'), url = _a[0], queryString = _a[1];
|
|
52
|
+
var urlSegments = url.split('/').filter(Boolean);
|
|
53
|
+
var endpointSegment = urlSegments[urlSegments.length - 2];
|
|
54
|
+
var requestPromise = Promise.resolve(request);
|
|
55
|
+
if (request.method === 'GET' && urlSegments.includes('core') && this.endpointsToEncrypt.includes(endpointSegment)) {
|
|
56
|
+
requestPromise = requestPromise.then(function (req) { return _this.encryptLastUrlSegment(req, urlSegments, queryString); });
|
|
57
|
+
}
|
|
58
|
+
if (request.body && urlSegments.includes('core')) {
|
|
59
|
+
requestPromise = requestPromise.then(function (req) { return _this.encryptBody(req); });
|
|
60
|
+
}
|
|
61
|
+
return from_1.from(requestPromise).pipe(operators_1.switchMap(function (clonedReq) { return next.handle(clonedReq); }));
|
|
62
|
+
};
|
|
63
|
+
EncryptionInterceptor.prototype.encryptLastUrlSegment = function (request, urlSegments, queryString) {
|
|
64
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
65
|
+
var lastIndex, _a, _b, protocol, newUrl;
|
|
66
|
+
return __generator(this, function (_c) {
|
|
67
|
+
switch (_c.label) {
|
|
68
|
+
case 0:
|
|
69
|
+
lastIndex = (urlSegments.length - 1);
|
|
70
|
+
_a = urlSegments;
|
|
71
|
+
_b = lastIndex;
|
|
72
|
+
return [4 /*yield*/, this.encryptionService.encryptValue(urlSegments[lastIndex], this.rsaPublicKey)];
|
|
73
|
+
case 1:
|
|
74
|
+
_a[_b] = _c.sent();
|
|
75
|
+
protocol = request.url.startsWith('https') ? 'https://' : 'http://';
|
|
76
|
+
newUrl = protocol + urlSegments.slice(1).join('/');
|
|
77
|
+
if (queryString) {
|
|
78
|
+
newUrl += "?" + queryString;
|
|
79
|
+
}
|
|
80
|
+
return [2 /*return*/, request.clone({ url: newUrl })];
|
|
81
|
+
}
|
|
82
|
+
});
|
|
83
|
+
});
|
|
84
|
+
};
|
|
85
|
+
EncryptionInterceptor.prototype.encryptBody = function (request) {
|
|
86
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
87
|
+
var encrypted;
|
|
88
|
+
return __generator(this, function (_a) {
|
|
89
|
+
switch (_a.label) {
|
|
90
|
+
case 0: return [4 /*yield*/, this.encryptionService.encryptValue(request.body, this.rsaPublicKey)];
|
|
91
|
+
case 1:
|
|
92
|
+
encrypted = _a.sent();
|
|
93
|
+
return [2 /*return*/, request.clone({ body: { payload: encrypted } })];
|
|
94
|
+
}
|
|
95
|
+
});
|
|
96
|
+
});
|
|
97
|
+
};
|
|
98
|
+
EncryptionInterceptor.decorators = [
|
|
99
|
+
{ type: core_1.Injectable },
|
|
100
|
+
];
|
|
101
|
+
/** @nocollapse */
|
|
102
|
+
EncryptionInterceptor.ctorParameters = function () { return [
|
|
103
|
+
{ type: undefined, decorators: [{ type: core_1.Inject, args: [rsa_public_key_1.RSA_PUBLIC_KEY,] },] },
|
|
104
|
+
{ type: encryption_service_1.EncryptionService, },
|
|
105
|
+
]; };
|
|
106
|
+
return EncryptionInterceptor;
|
|
107
|
+
}());
|
|
108
|
+
exports.EncryptionInterceptor = EncryptionInterceptor;
|
|
109
|
+
//# sourceMappingURL=encryption.interceptor.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.interceptor.js","sourceRoot":"","sources":["../../../build/encryption/interceptors/encryption.interceptor.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAAmD;AAGnD,6CAA4C;AAC5C,4CAA2C;AAG3C,qEAAmE;AAEnE,oDAAmD;;IAO/C,+BAEY,cACA,iBAAqC;QADrC,iBAAY,GAAZ,YAAY;QACZ,sBAAiB,GAAjB,iBAAiB,CAAoB;kCALpB,CAAC,WAAW,EAAE,YAAY,EAAE,sBAAsB,CAAC;KAM3E;IAEL,yCAAS,GAAT,UAAU,OAAyB,EAAE,IAAiB;QAAtD,iBAoBC;QAlBG,2CAAQ,WAAG,EAAE,mBAAW,CAAsC;QAC9D,IAAM,WAAW,GAAY,GAAG,CAAC,KAAK,CAAC,GAAG,CAAC,CAAC,MAAM,CAAC,OAAO,CAAC,CAAC;QAC5D,IAAM,eAAe,GAAQ,WAAW,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;QAEjE,IAAI,cAAc,GAAW,OAAO,CAAC,OAAO,CAAC,OAAO,CAAC,CAAC;QAEtD,EAAE,CAAC,CAAC,OAAO,CAAC,MAAM,KAAK,KAAK,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,IAAI,IAAI,CAAC,kBAAkB,CAAC,QAAQ,CAAC,eAAe,CAAC,CAAC,CAAC,CAAC;YAChH,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,qBAAqB,CAAC,GAAG,EAAE,WAAW,EAAE,WAAW,CAAC,EAAzD,CAAyD,CAAC,CAAC;SAC1G;QAED,EAAE,CAAC,CAAC,OAAO,CAAC,IAAI,IAAI,WAAW,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC;YAC/C,cAAc,GAAG,cAAc,CAAC,IAAI,CAAC,UAAA,GAAG,IAAI,OAAA,KAAI,CAAC,WAAW,CAAC,GAAG,CAAC,EAArB,CAAqB,CAAC,CAAC;SACtE;QAED,MAAM,CAAC,WAAI,CAAC,cAAc,CAAC,CAAC,IAAI,CAC5B,qBAAS,CAAC,UAAA,SAAS,IAAI,OAAA,IAAI,CAAC,MAAM,CAAC,SAAS,CAAC,EAAtB,CAAsB,CAAC,CACjD,CAAC;KAEL;IAEa,qDAAqB,GAAnC,UAAoC,OAAyB,EAAE,WAAqB,EAAE,WAAoB;;;;;;wBAEhG,SAAS,GAAU,CAAC,WAAW,CAAC,MAAM,GAAG,CAAC,CAAC,CAAC;wBAClD,KAAA,WAAW,CAAA;wBAAC,KAAA,SAAS,CAAA;wBAAI,qBAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAC9D,WAAW,CAAC,SAAS,CAAC,EACtB,IAAI,CAAC,YAAY,CACpB,EAAA;;wBAHD,MAAsB,GAAG,SAGxB,CAAC;wBAEI,QAAQ,GAAG,OAAO,CAAC,GAAG,CAAC,UAAU,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,UAAU,CAAC,CAAC,CAAC,SAAS,CAAC;wBACtE,MAAM,GAAO,QAAQ,GAAG,WAAW,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,CAAC;wBAE3D,EAAE,CAAC,CAAC,WAAW,CAAC,CAAC,CAAC;4BACd,MAAM,IAAI,MAAK,WAAc,CAAC;yBACjC;wBAED,sBAAO,OAAO,CAAC,KAAK,CAAC,EAAE,GAAG,EAAE,MAAM,EAAE,CAAC,EAAC;;;;KAEzC;IAEa,2CAAW,GAAzB,UAA0B,OAAyB;;;;;4BAE7B,qBAAM,IAAI,CAAC,iBAAiB,CAAC,YAAY,CAAC,OAAO,CAAC,IAAI,EAAE,IAAI,CAAC,YAAY,CAAC,EAAA;;wBAAtF,SAAS,GAAG,SAA0E;wBAC5F,sBAAO,OAAO,CAAC,KAAK,CAAC,EAAE,IAAI,EAAE,EAAE,OAAO,EAAE,SAAS,EAAE,EAAE,CAAC,EAAC;;;;KAE1D;;gBAzDJ,iBAAU;;;;gDAMF,aAAM,SAAC,+BAAc;gBAVrB,sCAAiB;;gCAP1B;;AAYa,sDAAqB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"EncryptionInterceptor":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":11,"character":1}}],"members":{"__ctor__":[{"__symbolic":"constructor","parameterDecorators":[[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Inject","line":17,"character":9},"arguments":[{"__symbolic":"reference","module":"../rsa-public-key","name":"RSA_PUBLIC_KEY","line":17,"character":16}]}],null],"parameters":[{"__symbolic":"reference","name":"string"},{"__symbolic":"reference","module":"../services/encryption.service","name":"EncryptionService","line":19,"character":36}]}],"intercept":[{"__symbolic":"method"}],"encryptLastUrlSegment":[{"__symbolic":"method"}],"encryptBody":[{"__symbolic":"method"}]}}}}]
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"rsa-public-key.js","sourceRoot":"","sources":["../../build/encryption/rsa-public-key.ts"],"names":[],"mappings":";;AAAA,sCAA+C;AAElC,QAAA,cAAc,GAAG,IAAI,qBAAc,CAAS,gBAAgB,CAAC"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"RSA_PUBLIC_KEY":{"__symbolic":"new","expression":{"__symbolic":"reference","module":"@angular/core","name":"InjectionToken","line":2,"character":34},"arguments":["RSA_PUBLIC_KEY"]}}}]
|
|
@@ -0,0 +1,13 @@
|
|
|
1
|
+
export declare class EncryptionService {
|
|
2
|
+
private generateAesGcmKey();
|
|
3
|
+
private generateAesGcmIv();
|
|
4
|
+
private encryptValueWithAesGcm(aesKey, iv, value);
|
|
5
|
+
private exportAesKeyToRaw(aesKey);
|
|
6
|
+
private pemPublicKeyToArrayBuffer(pem);
|
|
7
|
+
private importRsaOaepPublicKey(pem);
|
|
8
|
+
private encryptAesKeyWithRsaOaep(aesKeyRaw, rsaPublicKey);
|
|
9
|
+
private encodeBase64Url(buffer);
|
|
10
|
+
private buildEncryptedToken(encryptedAesKey, iv, encryptedData);
|
|
11
|
+
private safeExecute<T>(step, fn);
|
|
12
|
+
encryptValue(value: string | Record<string, any>, rsaPublicKeyPem: string): Promise<string>;
|
|
13
|
+
}
|
|
@@ -0,0 +1,211 @@
|
|
|
1
|
+
"use strict";
|
|
2
|
+
var __awaiter = (this && this.__awaiter) || function (thisArg, _arguments, P, generator) {
|
|
3
|
+
return new (P || (P = Promise))(function (resolve, reject) {
|
|
4
|
+
function fulfilled(value) { try { step(generator.next(value)); } catch (e) { reject(e); } }
|
|
5
|
+
function rejected(value) { try { step(generator["throw"](value)); } catch (e) { reject(e); } }
|
|
6
|
+
function step(result) { result.done ? resolve(result.value) : new P(function (resolve) { resolve(result.value); }).then(fulfilled, rejected); }
|
|
7
|
+
step((generator = generator.apply(thisArg, _arguments || [])).next());
|
|
8
|
+
});
|
|
9
|
+
};
|
|
10
|
+
var __generator = (this && this.__generator) || function (thisArg, body) {
|
|
11
|
+
var _ = { label: 0, sent: function() { if (t[0] & 1) throw t[1]; return t[1]; }, trys: [], ops: [] }, f, y, t, g;
|
|
12
|
+
return g = { next: verb(0), "throw": verb(1), "return": verb(2) }, typeof Symbol === "function" && (g[Symbol.iterator] = function() { return this; }), g;
|
|
13
|
+
function verb(n) { return function (v) { return step([n, v]); }; }
|
|
14
|
+
function step(op) {
|
|
15
|
+
if (f) throw new TypeError("Generator is already executing.");
|
|
16
|
+
while (_) try {
|
|
17
|
+
if (f = 1, y && (t = y[op[0] & 2 ? "return" : op[0] ? "throw" : "next"]) && !(t = t.call(y, op[1])).done) return t;
|
|
18
|
+
if (y = 0, t) op = [0, t.value];
|
|
19
|
+
switch (op[0]) {
|
|
20
|
+
case 0: case 1: t = op; break;
|
|
21
|
+
case 4: _.label++; return { value: op[1], done: false };
|
|
22
|
+
case 5: _.label++; y = op[1]; op = [0]; continue;
|
|
23
|
+
case 7: op = _.ops.pop(); _.trys.pop(); continue;
|
|
24
|
+
default:
|
|
25
|
+
if (!(t = _.trys, t = t.length > 0 && t[t.length - 1]) && (op[0] === 6 || op[0] === 2)) { _ = 0; continue; }
|
|
26
|
+
if (op[0] === 3 && (!t || (op[1] > t[0] && op[1] < t[3]))) { _.label = op[1]; break; }
|
|
27
|
+
if (op[0] === 6 && _.label < t[1]) { _.label = t[1]; t = op; break; }
|
|
28
|
+
if (t && _.label < t[2]) { _.label = t[2]; _.ops.push(op); break; }
|
|
29
|
+
if (t[2]) _.ops.pop();
|
|
30
|
+
_.trys.pop(); continue;
|
|
31
|
+
}
|
|
32
|
+
op = body.call(thisArg, _);
|
|
33
|
+
} catch (e) { op = [6, e]; y = 0; } finally { f = t = 0; }
|
|
34
|
+
if (op[0] & 5) throw op[1]; return { value: op[0] ? op[1] : void 0, done: true };
|
|
35
|
+
}
|
|
36
|
+
};
|
|
37
|
+
Object.defineProperty(exports, "__esModule", { value: true });
|
|
38
|
+
var core_1 = require("@angular/core");
|
|
39
|
+
var EncryptionService = /** @class */ (function () {
|
|
40
|
+
function EncryptionService() {
|
|
41
|
+
}
|
|
42
|
+
// Genera una clave simétrica AES-GCM de 256 bits
|
|
43
|
+
// Genera una clave simétrica AES-GCM de 256 bits
|
|
44
|
+
EncryptionService.prototype.generateAesGcmKey =
|
|
45
|
+
// Genera una clave simétrica AES-GCM de 256 bits
|
|
46
|
+
function () {
|
|
47
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
48
|
+
return __generator(this, function (_a) {
|
|
49
|
+
return [2 /*return*/, crypto.subtle.generateKey({ name: 'AES-GCM', length: 256 }, true, ['encrypt', 'decrypt'])];
|
|
50
|
+
});
|
|
51
|
+
});
|
|
52
|
+
};
|
|
53
|
+
// Genera un vector de inicialización (IV) aleatorio de 12 bytes para AES-GCM
|
|
54
|
+
// Genera un vector de inicialización (IV) aleatorio de 12 bytes para AES-GCM
|
|
55
|
+
EncryptionService.prototype.generateAesGcmIv =
|
|
56
|
+
// Genera un vector de inicialización (IV) aleatorio de 12 bytes para AES-GCM
|
|
57
|
+
function () {
|
|
58
|
+
return crypto.getRandomValues(new Uint8Array(12));
|
|
59
|
+
};
|
|
60
|
+
// Cifra el valor usando AES-GCM con la clave y IV proporcionados
|
|
61
|
+
// Cifra el valor usando AES-GCM con la clave y IV proporcionados
|
|
62
|
+
EncryptionService.prototype.encryptValueWithAesGcm =
|
|
63
|
+
// Cifra el valor usando AES-GCM con la clave y IV proporcionados
|
|
64
|
+
function (aesKey, iv, value) {
|
|
65
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
66
|
+
var subtle, encoder, valueAsString;
|
|
67
|
+
return __generator(this, function (_a) {
|
|
68
|
+
subtle = crypto.subtle;
|
|
69
|
+
encoder = new TextEncoder();
|
|
70
|
+
valueAsString = typeof value === 'string' ? value : JSON.stringify(value);
|
|
71
|
+
return [2 /*return*/, subtle.encrypt({
|
|
72
|
+
name: 'AES-GCM',
|
|
73
|
+
iv: iv
|
|
74
|
+
}, aesKey, encoder.encode(valueAsString))];
|
|
75
|
+
});
|
|
76
|
+
});
|
|
77
|
+
};
|
|
78
|
+
// Exporta una clave AES-GCM a formato binario (raw)
|
|
79
|
+
// Exporta una clave AES-GCM a formato binario (raw)
|
|
80
|
+
EncryptionService.prototype.exportAesKeyToRaw =
|
|
81
|
+
// Exporta una clave AES-GCM a formato binario (raw)
|
|
82
|
+
function (aesKey) {
|
|
83
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
84
|
+
var subtle;
|
|
85
|
+
return __generator(this, function (_a) {
|
|
86
|
+
subtle = crypto.subtle;
|
|
87
|
+
return [2 /*return*/, subtle.exportKey('raw', aesKey)];
|
|
88
|
+
});
|
|
89
|
+
});
|
|
90
|
+
};
|
|
91
|
+
// Convierte una clave pública RSA en formato PEM a ArrayBuffer
|
|
92
|
+
// Convierte una clave pública RSA en formato PEM a ArrayBuffer
|
|
93
|
+
EncryptionService.prototype.pemPublicKeyToArrayBuffer =
|
|
94
|
+
// Convierte una clave pública RSA en formato PEM a ArrayBuffer
|
|
95
|
+
function (pem) {
|
|
96
|
+
var cleanPem = pem.replace(/\s+/g, '');
|
|
97
|
+
var binary = atob(cleanPem);
|
|
98
|
+
var buffer = new Uint8Array(binary.length);
|
|
99
|
+
for (var i = 0; i < binary.length; i++) {
|
|
100
|
+
buffer[i] = binary.charCodeAt(i);
|
|
101
|
+
}
|
|
102
|
+
return buffer.buffer;
|
|
103
|
+
};
|
|
104
|
+
// Importa una clave pública RSA para cifrado usando RSA-OAEP
|
|
105
|
+
// Importa una clave pública RSA para cifrado usando RSA-OAEP
|
|
106
|
+
EncryptionService.prototype.importRsaOaepPublicKey =
|
|
107
|
+
// Importa una clave pública RSA para cifrado usando RSA-OAEP
|
|
108
|
+
function (pem) {
|
|
109
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
110
|
+
var subtle;
|
|
111
|
+
return __generator(this, function (_a) {
|
|
112
|
+
subtle = crypto.subtle;
|
|
113
|
+
return [2 /*return*/, subtle.importKey('spki', this.pemPublicKeyToArrayBuffer(pem), { name: 'RSA-OAEP', hash: { name: 'SHA-1' } }, true, ['encrypt'])];
|
|
114
|
+
});
|
|
115
|
+
});
|
|
116
|
+
};
|
|
117
|
+
// Cifra una clave AES usando una clave pública RSA-OAEP
|
|
118
|
+
// Cifra una clave AES usando una clave pública RSA-OAEP
|
|
119
|
+
EncryptionService.prototype.encryptAesKeyWithRsaOaep =
|
|
120
|
+
// Cifra una clave AES usando una clave pública RSA-OAEP
|
|
121
|
+
function (aesKeyRaw, rsaPublicKey) {
|
|
122
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
123
|
+
var subtle;
|
|
124
|
+
return __generator(this, function (_a) {
|
|
125
|
+
subtle = crypto.subtle;
|
|
126
|
+
return [2 /*return*/, subtle.encrypt({ name: 'RSA-OAEP' }, rsaPublicKey, aesKeyRaw)];
|
|
127
|
+
});
|
|
128
|
+
});
|
|
129
|
+
};
|
|
130
|
+
// Codifica bytes en formato Base64URL seguro para transporte
|
|
131
|
+
// Codifica bytes en formato Base64URL seguro para transporte
|
|
132
|
+
EncryptionService.prototype.encodeBase64Url =
|
|
133
|
+
// Codifica bytes en formato Base64URL seguro para transporte
|
|
134
|
+
function (buffer) {
|
|
135
|
+
var bytes = buffer instanceof ArrayBuffer ? new Uint8Array(buffer) : buffer;
|
|
136
|
+
var binary = '';
|
|
137
|
+
for (var i = 0; i < bytes.length; i++) {
|
|
138
|
+
binary += String.fromCharCode(bytes[i]);
|
|
139
|
+
}
|
|
140
|
+
var base64 = btoa(binary);
|
|
141
|
+
return base64.replace(/\+/g, '-').replace(/\//g, '_').replace(/=+$/, '');
|
|
142
|
+
};
|
|
143
|
+
// Construye el token final con formato encryptedKey.iv.encryptedData (k.iv.d)
|
|
144
|
+
// Construye el token final con formato encryptedKey.iv.encryptedData (k.iv.d)
|
|
145
|
+
EncryptionService.prototype.buildEncryptedToken =
|
|
146
|
+
// Construye el token final con formato encryptedKey.iv.encryptedData (k.iv.d)
|
|
147
|
+
function (encryptedAesKey, iv, encryptedData) {
|
|
148
|
+
return (this.encodeBase64Url(encryptedAesKey) +
|
|
149
|
+
'.' +
|
|
150
|
+
this.encodeBase64Url(iv) +
|
|
151
|
+
'.' +
|
|
152
|
+
this.encodeBase64Url(encryptedData));
|
|
153
|
+
};
|
|
154
|
+
// Ejecuta una función y registra errores en consola
|
|
155
|
+
// Ejecuta una función y registra errores en consola
|
|
156
|
+
EncryptionService.prototype.safeExecute =
|
|
157
|
+
// Ejecuta una función y registra errores en consola
|
|
158
|
+
function (step, fn) {
|
|
159
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
160
|
+
var error_1;
|
|
161
|
+
return __generator(this, function (_a) {
|
|
162
|
+
switch (_a.label) {
|
|
163
|
+
case 0:
|
|
164
|
+
_a.trys.push([0, 2, , 3]);
|
|
165
|
+
return [4 /*yield*/, fn()];
|
|
166
|
+
case 1: return [2 /*return*/, _a.sent()];
|
|
167
|
+
case 2:
|
|
168
|
+
error_1 = _a.sent();
|
|
169
|
+
console.error("[Encryption] " + step + " failed", error_1);
|
|
170
|
+
throw error_1;
|
|
171
|
+
case 3: return [2 /*return*/];
|
|
172
|
+
}
|
|
173
|
+
});
|
|
174
|
+
});
|
|
175
|
+
};
|
|
176
|
+
EncryptionService.prototype.encryptValue = function (value, rsaPublicKeyPem) {
|
|
177
|
+
return __awaiter(this, void 0, void 0, function () {
|
|
178
|
+
var _this = this;
|
|
179
|
+
var aesKey, iv, encryptedData, aesKeyRaw, rsaPublicKey, encryptedAesKey;
|
|
180
|
+
return __generator(this, function (_a) {
|
|
181
|
+
switch (_a.label) {
|
|
182
|
+
case 0: return [4 /*yield*/, this.safeExecute('AES key generation', function () { return _this.generateAesGcmKey(); })];
|
|
183
|
+
case 1:
|
|
184
|
+
aesKey = _a.sent();
|
|
185
|
+
return [4 /*yield*/, this.safeExecute('AES IV generation', function () { return _this.generateAesGcmIv(); })];
|
|
186
|
+
case 2:
|
|
187
|
+
iv = _a.sent();
|
|
188
|
+
return [4 /*yield*/, this.safeExecute('AES encryption', function () { return _this.encryptValueWithAesGcm(aesKey, iv, value); })];
|
|
189
|
+
case 3:
|
|
190
|
+
encryptedData = _a.sent();
|
|
191
|
+
return [4 /*yield*/, this.safeExecute('AES key export', function () { return _this.exportAesKeyToRaw(aesKey); })];
|
|
192
|
+
case 4:
|
|
193
|
+
aesKeyRaw = _a.sent();
|
|
194
|
+
return [4 /*yield*/, this.safeExecute('RSA public key import', function () { return _this.importRsaOaepPublicKey(rsaPublicKeyPem); })];
|
|
195
|
+
case 5:
|
|
196
|
+
rsaPublicKey = _a.sent();
|
|
197
|
+
return [4 /*yield*/, this.safeExecute('AES key RSA encryption', function () { return _this.encryptAesKeyWithRsaOaep(aesKeyRaw, rsaPublicKey); })];
|
|
198
|
+
case 6:
|
|
199
|
+
encryptedAesKey = _a.sent();
|
|
200
|
+
return [2 /*return*/, this.buildEncryptedToken(encryptedAesKey, iv, encryptedData)];
|
|
201
|
+
}
|
|
202
|
+
});
|
|
203
|
+
});
|
|
204
|
+
};
|
|
205
|
+
EncryptionService.decorators = [
|
|
206
|
+
{ type: core_1.Injectable },
|
|
207
|
+
];
|
|
208
|
+
return EncryptionService;
|
|
209
|
+
}());
|
|
210
|
+
exports.EncryptionService = EncryptionService;
|
|
211
|
+
//# sourceMappingURL=encryption.service.js.map
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
{"version":3,"file":"encryption.service.js","sourceRoot":"","sources":["../../../build/encryption/services/encryption.service.ts"],"names":[],"mappings":";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA,sCAA2C;;;;IAOvC,iDAAiD;;IACnC,6CAAiB;;IAA/B;;;gBACI,sBAAO,MAAM,CAAC,MAAM,CAAC,WAAW,CAC5B,EAAE,IAAI,EAAE,SAAS,EAAE,MAAM,EAAE,GAAG,EAAE,EAChC,IAAI,EACJ,CAAC,SAAS,EAAE,SAAS,CAAC,CACzB,EAAC;;;KACL;IAED,6EAA6E;;IACrE,4CAAgB;;IAAxB;QACI,MAAM,CAAC,MAAM,CAAC,eAAe,CAAC,IAAI,UAAU,CAAC,EAAE,CAAC,CAAe,CAAC;KACnE;IAED,iEAAiE;;IACnD,kDAAsB;;IAApC,UAAqC,MAAiB,EAAE,EAAc,EAAE,KAAmC;;;;gBACjG,MAAM,GAAG,MAAM,CAAC,MAAa,CAAC;gBAC9B,OAAO,GAAG,IAAI,WAAW,EAAE,CAAC;gBAC5B,aAAa,GAAG,OAAO,KAAK,KAAK,QAAQ,CAAC,CAAC,CAAC,KAAK,CAAC,CAAC,CAAC,IAAI,CAAC,SAAS,CAAC,KAAK,CAAC,CAAC;gBAChF,sBAAO,MAAM,CAAC,OAAO,CACjB;wBACI,IAAI,EAAE,SAAS;wBACf,EAAE,EAAE,EAAE;qBACT,EACD,MAAM,EACN,OAAO,CAAC,MAAM,CAAC,aAAa,CAAC,CAChC,EAAC;;;KACL;IAED,oDAAoD;;IACtC,6CAAiB;;IAA/B,UAAgC,MAAiB;;;;gBACvC,MAAM,GAAG,MAAM,CAAC,MAAa,CAAC;gBACpC,sBAAO,MAAM,CAAC,SAAS,CAAC,KAAK,EAAE,MAAM,CAAC,EAAC;;;KAC1C;IAED,+DAA+D;;IACvD,qDAAyB;;IAAjC,UAAkC,GAAW;QACzC,IAAM,QAAQ,GAAG,GAAG,CAAC,OAAO,CAAC,MAAM,EAAE,EAAE,CAAC,CAAC;QAEzC,IAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,CAAC;QAC9B,IAAM,MAAM,GAAG,IAAI,UAAU,CAAC,MAAM,CAAC,MAAM,CAAC,CAAC;QAE7C,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,MAAM,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACrC,MAAM,CAAC,CAAC,CAAC,GAAG,MAAM,CAAC,UAAU,CAAC,CAAC,CAAC,CAAC;SACpC;QAED,MAAM,CAAC,MAAM,CAAC,MAAqB,CAAC;KAEvC;IAED,6DAA6D;;IAC/C,kDAAsB;;IAApC,UAAqC,GAAW;;;;gBACtC,MAAM,GAAG,MAAM,CAAC,MAAa,CAAC;gBACpC,sBAAO,MAAM,CAAC,SAAS,CACnB,MAAM,EACN,IAAI,CAAC,yBAAyB,CAAC,GAAG,CAAC,EACnC,EAAE,IAAI,EAAE,UAAU,EAAE,IAAI,EAAE,EAAE,IAAI,EAAE,OAAO,EAAE,EAAE,EAC7C,IAAI,EACJ,CAAC,SAAS,CAAC,CACd,EAAC;;;KACL;IAED,wDAAwD;;IAC1C,oDAAwB;;IAAtC,UAAuC,SAAsB,EAAE,YAAuB;;;;gBAC5E,MAAM,GAAG,MAAM,CAAC,MAAa,CAAC;gBACpC,sBAAO,MAAM,CAAC,OAAO,CACjB,EAAE,IAAI,EAAE,UAAU,EAAE,EACpB,YAAY,EACZ,SAAS,CACZ,EAAC;;;KACL;IAED,6DAA6D;;IACrD,2CAAe;;IAAvB,UAAwB,MAAgC;QACpD,IAAM,KAAK,GAAG,MAAM,YAAY,WAAW,CAAC,CAAC,CAAC,IAAI,UAAU,CAAC,MAAM,CAAC,CAAC,CAAC,CAAC,MAAM,CAAC;QAC9E,IAAI,MAAM,GAAG,EAAE,CAAC;QAEhB,GAAG,CAAC,CAAC,IAAI,CAAC,GAAG,CAAC,EAAE,CAAC,GAAG,KAAK,CAAC,MAAM,EAAE,CAAC,EAAE,EAAE,CAAC;YACpC,MAAM,IAAI,MAAM,CAAC,YAAY,CAAC,KAAK,CAAC,CAAC,CAAC,CAAC,CAAC;SAC3C;QAED,IAAM,MAAM,GAAG,IAAI,CAAC,MAAM,CAAC,CAAC;QAC5B,MAAM,CAAC,MAAM,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,GAAG,CAAC,CAAC,OAAO,CAAC,KAAK,EAAE,EAAE,CAAC,CAAC;KAC5E;IAED,8EAA8E;;IACtE,+CAAmB;;IAA3B,UAA4B,eAA4B,EAAE,EAAc,EAAE,aAA0B;QAChG,MAAM,CAAC,CACH,IAAI,CAAC,eAAe,CAAC,eAAe,CAAC;YACrC,GAAG;YACH,IAAI,CAAC,eAAe,CAAC,EAAE,CAAC;YACxB,GAAG;YACH,IAAI,CAAC,eAAe,CAAC,aAAa,CAAC,CACtC,CAAC;KACL;IAED,oDAAoD;;IACtC,uCAAW;;IAAzB,UAA6B,IAAY,EAAE,EAAwB;;;;;;;wBAEpD,qBAAM,EAAE,EAAE,EAAA;4BAAjB,sBAAO,SAAU,EAAC;;;wBAElB,OAAO,CAAC,KAAK,CAAC,kBAAiB,IAAI,YAAU,EAAE,OAAK,CAAC,CAAC;wBACtD,MAAM,OAAK,CAAC;;;;;KAEnB;IAEY,wCAAY,GAAzB,UAA0B,KAAmC,EAAE,eAAuB;;;;;;4BAC1D,qBAAM,IAAI,CAAC,WAAW,CAAC,oBAAoB,EAAE,cAAM,OAAA,KAAI,CAAC,iBAAiB,EAAE,EAAxB,CAAwB,CAAC,EAAA;;wBAA9F,MAAM,GAAY,SAA4E;wBAC5E,qBAAM,IAAI,CAAC,WAAW,CAAC,mBAAmB,EAAE,cAAM,OAAA,KAAI,CAAC,gBAAgB,EAAE,EAAvB,CAAuB,CAAC,EAAA;;wBAA5F,EAAE,GAAgB,SAA0E;wBAC1E,qBAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,cAAM,OAAA,KAAI,CAAC,sBAAsB,CAAC,MAAM,EAAE,EAAE,EAAE,KAAK,CAAC,EAA9C,CAA8C,CAAC,EAAA;;wBAAhH,aAAa,GAAK,SAA8F;wBAC9F,qBAAM,IAAI,CAAC,WAAW,CAAC,gBAAgB,EAAE,cAAM,OAAA,KAAI,CAAC,iBAAiB,CAAC,MAAM,CAAC,EAA9B,CAA8B,CAAC,EAAA;;wBAAhG,SAAS,GAAS,SAA8E;wBAC9E,qBAAM,IAAI,CAAC,WAAW,CAAC,uBAAuB,EAAE,cAAM,OAAA,KAAI,CAAC,sBAAsB,CAAC,eAAe,CAAC,EAA5C,CAA4C,CAAC,EAAA;;wBAArH,YAAY,GAAM,SAAmG;wBACnG,qBAAM,IAAI,CAAC,WAAW,CAAC,wBAAwB,EAAE,cAAM,OAAA,KAAI,CAAC,wBAAwB,CAAC,SAAS,EAAE,YAAY,CAAC,EAAtD,CAAsD,CAAC,EAAA;;wBAAhI,eAAe,GAAG,SAA8G;wBACtI,sBAAO,IAAI,CAAC,mBAAmB,CAAC,eAAe,EAAE,EAAE,EAAE,aAAa,CAAC,EAAC;;;;KACvE;;gBArHJ,iBAAU;;4BAJX;;AAKa,8CAAiB"}
|
|
@@ -0,0 +1 @@
|
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{"EncryptionService":{"__symbolic":"class","decorators":[{"__symbolic":"call","expression":{"__symbolic":"reference","module":"@angular/core","name":"Injectable","line":4,"character":1}}],"members":{"generateAesGcmKey":[{"__symbolic":"method"}],"generateAesGcmIv":[{"__symbolic":"method"}],"encryptValueWithAesGcm":[{"__symbolic":"method"}],"exportAesKeyToRaw":[{"__symbolic":"method"}],"pemPublicKeyToArrayBuffer":[{"__symbolic":"method"}],"importRsaOaepPublicKey":[{"__symbolic":"method"}],"encryptAesKeyWithRsaOaep":[{"__symbolic":"method"}],"encodeBase64Url":[{"__symbolic":"method"}],"buildEncryptedToken":[{"__symbolic":"method"}],"safeExecute":[{"__symbolic":"method"}],"encryptValue":[{"__symbolic":"method"}]}}}}]
|
package/lib/index.d.ts
CHANGED
package/lib/index.js
CHANGED
package/lib/index.js.map
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"index.js","sourceRoot":"","sources":["../build/index.ts"],"names":[],"mappings":";;;;;AAAA,uCAAiC;AACjC,iDAA2C"}
|
|
1
|
+
{"version":3,"file":"index.js","sourceRoot":"","sources":["../build/index.ts"],"names":[],"mappings":";;;;;AAAA,uCAAiC;AACjC,iDAA2C;AAC3C,kCAA4B"}
|
package/lib/index.metadata.json
CHANGED
|
@@ -1 +1 @@
|
|
|
1
|
-
[{"__symbolic":"module","version":4,"metadata":{},"exports":[{"from":"./auth-monitorias"},{"from":"./session-models-monitorias"}]}]
|
|
1
|
+
[{"__symbolic":"module","version":4,"metadata":{},"exports":[{"from":"./auth-monitorias"},{"from":"./session-models-monitorias"},{"from":"./encryption"}]}]
|