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.
@@ -0,0 +1,2 @@
1
+ export declare class EncryptionModule {
2
+ }
@@ -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,3 @@
1
+ export * from './encryption.module';
2
+ export * from './interceptors/encryption.interceptor';
3
+ export * from './rsa-public-key';
@@ -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":"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"}
@@ -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,2 @@
1
+ import { InjectionToken } from '@angular/core';
2
+ export declare const RSA_PUBLIC_KEY: InjectionToken<string>;
@@ -0,0 +1,5 @@
1
+ "use strict";
2
+ Object.defineProperty(exports, "__esModule", { value: true });
3
+ var core_1 = require("@angular/core");
4
+ exports.RSA_PUBLIC_KEY = new core_1.InjectionToken('RSA_PUBLIC_KEY');
5
+ //# sourceMappingURL=rsa-public-key.js.map
@@ -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":"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"}
@@ -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
@@ -1,2 +1,3 @@
1
1
  export * from "./auth-monitorias";
2
2
  export * from "./session-models-monitorias";
3
+ export * from "./encryption";
package/lib/index.js CHANGED
@@ -5,4 +5,5 @@ function __export(m) {
5
5
  Object.defineProperty(exports, "__esModule", { value: true });
6
6
  __export(require("./auth-monitorias"));
7
7
  __export(require("./session-models-monitorias"));
8
+ __export(require("./encryption"));
8
9
  //# sourceMappingURL=index.js.map
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"}
@@ -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"}]}]
package/package.json CHANGED
@@ -1,6 +1,6 @@
1
1
  {
2
2
  "name": "auth-monitorias-uniandes",
3
- "version": "0.1.2-beta.58",
3
+ "version": "0.1.2-beta.60",
4
4
  "license": "MIT",
5
5
  "authors": [
6
6
  "Jhonatan A, Edgar S"