UNPKG

@experteam-mx/ngx-services

Version:

Angular common services for Experteam apps

93 lines 12.6 kB
import { Inject, Injectable } from '@angular/core'; import * as i0 from "@angular/core"; export class CryptoService { environments; constructor(environments) { this.environments = environments; } async encryptAES(plaintext) { const cryptoKey = await this.loadKey(); // Convert the plaintext in Uint8Array const encoder = new TextEncoder(); const encoded = encoder.encode(plaintext); // Generate a random Initialization Vector (IV) const iv = crypto.getRandomValues(new Uint8Array(12)); // Encrypt the plaintext const ciphertext = await crypto.subtle.encrypt({ name: 'AES-GCM', iv, }, cryptoKey, encoded); return `${this.uint8ArrayToBase64(iv)}:${this.arrayBufferToBase64(ciphertext)}`; } async decryptAES(payload) { // Extract the Initialization Vector (IV), and the cypher text const [base64IV, base64Ciphertext] = payload.split(':'); if (!base64IV || !base64Ciphertext) { throw new Error('The payload must contain the IV and the cipher text.'); } const cryptoKey = await this.loadKey(); const iv = this.base64ToUint8Array(base64IV); const cipherText = this.base64ToArrayBuffer(base64Ciphertext); // Decrypt the cypher text const decrypted = await crypto.subtle.decrypt({ name: 'AES-GCM', iv, }, cryptoKey, cipherText); // Decode the decrypted text const decoder = new TextDecoder(); return decoder.decode(decrypted); } async loadKey() { // Decode the base64 key to Uint8Array const rawKey = this.base64ToUint8Array(this.environments.secretKey); // Import the key to API Crypto return await crypto.subtle.importKey('raw', rawKey, { name: 'AES-GCM' }, true, ['encrypt', 'decrypt']); } uint8ArrayToBase64(data) { let binary = ''; const len = data.byteLength; for (let i = 0; i < len; i++) { binary += String.fromCharCode(data[i]); } return btoa(binary); } base64ToUint8Array(base64) { const binaryString = atob(base64); const len = binaryString.length; const bytes = new Uint8Array(len); for (let i = 0; i < len; i++) { bytes[i] = binaryString.charCodeAt(i); } return bytes; } arrayBufferToBase64(buffer) { let binary = ''; const bytes = new Uint8Array(buffer); const len = bytes.byteLength; for (let i = 0; i < len; i++) { binary += String.fromCharCode(bytes[i]); } return btoa(binary); } base64ToArrayBuffer(base64) { const binaryString = atob(base64); const len = binaryString.length; const bytes = new Uint8Array(len); for (let i = 0; i < len; i++) { bytes[i] = binaryString.charCodeAt(i); } return bytes.buffer; } static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CryptoService, deps: [{ token: 'env' }], target: i0.ɵɵFactoryTarget.Injectable }); static ɵprov = i0.ɵɵngDeclareInjectable({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CryptoService, providedIn: 'root' }); } i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: CryptoService, decorators: [{ type: Injectable, args: [{ providedIn: 'root' }] }], ctorParameters: () => [{ type: undefined, decorators: [{ type: Inject, args: ['env'] }] }] }); //# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY3J5cHRvLnNlcnZpY2UuanMiLCJzb3VyY2VSb290IjoiIiwic291cmNlcyI6WyIuLi8uLi8uLi8uLi8uLi8uLi9wcm9qZWN0cy9leHBlcnRlYW0tbXgvbmd4LXNlcnZpY2VzL3NyYy9saWIvY3lwaGVyL2NyeXB0by5zZXJ2aWNlLnRzIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFBRSxNQUFNLEVBQUUsVUFBVSxFQUFFLE1BQU0sZUFBZSxDQUFBOztBQU1sRCxNQUFNLE9BQU8sYUFBYTtJQUVDO0lBRHpCLFlBQ3lCLFlBQXlCO1FBQXpCLGlCQUFZLEdBQVosWUFBWSxDQUFhO0lBRWxELENBQUM7SUFFTSxLQUFLLENBQUMsVUFBVSxDQUFFLFNBQWlCO1FBQ3hDLE1BQU0sU0FBUyxHQUFHLE1BQU0sSUFBSSxDQUFDLE9BQU8sRUFBRSxDQUFBO1FBRXRDLHNDQUFzQztRQUN0QyxNQUFNLE9BQU8sR0FBRyxJQUFJLFdBQVcsRUFBRSxDQUFBO1FBQ2pDLE1BQU0sT0FBTyxHQUFHLE9BQU8sQ0FBQyxNQUFNLENBQUMsU0FBUyxDQUFDLENBQUE7UUFFekMsK0NBQStDO1FBQy9DLE1BQU0sRUFBRSxHQUFHLE1BQU0sQ0FBQyxlQUFlLENBQUMsSUFBSSxVQUFVLENBQUMsRUFBRSxDQUFDLENBQUMsQ0FBQTtRQUVyRCx3QkFBd0I7UUFDeEIsTUFBTSxVQUFVLEdBQUcsTUFBTSxNQUFNLENBQUMsTUFBTSxDQUFDLE9BQU8sQ0FDNUM7WUFDRSxJQUFJLEVBQUUsU0FBUztZQUNmLEVBQUU7U0FDSCxFQUNELFNBQVMsRUFDVCxPQUFPLENBQ1IsQ0FBQTtRQUVELE9BQU8sR0FBRyxJQUFJLENBQUMsa0JBQWtCLENBQUMsRUFBRSxDQUFDLElBQUksSUFBSSxDQUFDLG1CQUFtQixDQUFDLFVBQVUsQ0FBQyxFQUFFLENBQUE7SUFDakYsQ0FBQztJQUVNLEtBQUssQ0FBQyxVQUFVLENBQUUsT0FBZTtRQUN0Qyw4REFBOEQ7UUFDOUQsTUFBTSxDQUFDLFFBQVEsRUFB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TUFBTSxDQUFDLENBQUE7SUFDckIsQ0FBQztJQUVPLG1CQUFtQixDQUFFLE1BQWM7UUFDekMsTUFBTSxZQUFZLEdBQUcsSUFBSSxDQUFDLE1BQU0sQ0FBQyxDQUFBO1FBQ2pDLE1BQU0sR0FBRyxHQUFHLFlBQVksQ0FBQyxNQUFNLENBQUE7UUFDL0IsTUFBTSxLQUFLLEdBQUcsSUFBSSxVQUFVLENBQUMsR0FBRyxDQUFDLENBQUE7UUFFakMsS0FBSyxJQUFJLENBQUMsR0FBRyxDQUFDLEVBQUUsQ0FBQyxHQUFHLEdBQUcsRUFBRSxDQUFDLEVBQUUsRUFBRSxDQUFDO1lBQzdCLEtBQUssQ0FBQyxDQUFDLENBQUMsR0FBRyxZQUFZLENBQUMsVUFBVSxDQUFDLENBQUMsQ0FBQyxDQUFBO1FBQ3ZDLENBQUM7UUFFRCxPQUFPLEtBQUssQ0FBQyxNQUFNLENBQUE7SUFDckIsQ0FBQzt3R0FoSFUsYUFBYSxrQkFFZCxLQUFLOzRHQUZKLGFBQWEsY0FGWixNQUFNOzs0RkFFUCxhQUFhO2tCQUh6QixVQUFVO21CQUFDO29CQUNWLFVBQVUsRUFBRSxNQUFNO2lCQUNuQjs7MEJBR0ksTUFBTTsyQkFBQyxLQUFLIiwic291cmNlc0NvbnRlbnQiOlsiaW1wb3J0IHsgSW5qZWN0LCBJbmplY3RhYmxlIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSdcclxuaW1wb3J0IHsgRW52aXJvbm1lbnQgfSBmcm9tICcuLi9uZ3gtc2VydmljZXMubW9kZWxzJ1xyXG5cclxuQEluamVjdGFibGUoe1xyXG4gIHByb3ZpZGVkSW46ICdyb290J1xyXG59KVxyXG5leHBvcnQgY2xhc3MgQ3J5cHRvU2VydmljZSB7XHJcbiAgY29uc3RydWN0b3IgKFxyXG4gICAgQEluamVjdCgnZW52JykgcHJpdmF0ZSBlbnZpcm9ubWVudHM6IEVudmlyb25tZW50XHJcbiAgKSB7XHJcbiAgfVxyXG5cclxuICBwdWJsaWMgYXN5bmMgZW5jcnlwdEFFUyAocGxhaW50ZXh0OiBzdHJpbmcpOiBQcm9taXNlPHN0cmluZz4ge1xyXG4gICAgY29uc3QgY3J5cHRvS2V5ID0gYXdhaXQgdGhpcy5sb2FkS2V5KClcclxuXHJcbiAgICAvLyBDb252ZXJ0IHRoZSBwbGFpbnRleHQgaW4gVWludDhBcnJheVxyXG4gICAgY29uc3QgZW5jb2RlciA9IG5ldyBUZXh0RW5jb2RlcigpXHJcbiAgICBjb25zdCBlbmNvZGVkID0gZW5jb2Rlci5lbmNvZGUocGxhaW50ZXh0KVxyXG5cclxuICAgIC8vIEdlbmVyYXRlIGEgcmFuZG9tIEluaXRpYWxpemF0aW9uIFZlY3RvciAoSVYpXHJcbiAgICBjb25zdCBpdiA9IGNyeXB0by5nZXRSYW5kb21WYWx1ZXMobmV3IFVpbnQ4QXJyYXkoMTIpKVxyXG5cclxuICAgIC8vIEVuY3J5cHQgdGhlIHBsYWludGV4dFxyXG4gICAgY29uc3QgY2lwaGVydGV4dCA9IGF3YWl0IGNyeXB0by5zdWJ0bGUuZW5jcnlwdChcclxuICAgICAge1xyXG4gICAgICAgIG5hbWU6ICdBRVMtR0NNJyxcclxuICAgICAgICBpdixcclxuICAgICAgfSxcclxuICAgICAgY3J5cHRvS2V5LFxyXG4gICAgICBlbmNvZGVkXHJcbiAgICApXHJcblxyXG4gICAgcmV0dXJuIGAke3RoaXMudWludDhBcnJheVRvQmFzZTY0KGl2KX06JHt0aGlzLmFycmF5QnVmZmVyVG9CYXNlNjQoY2lwaGVydGV4dCl9YFxyXG4gIH1cclxuXHJcbiAgcHVibGljIGFzeW5jIGRlY3J5cHRBRVMgKHBheWxvYWQ6IHN0cmluZyk6IFByb21pc2U8c3RyaW5nPiB7XHJcbiAgICAvLyBFeHRyYWN0IHRoZSBJbml0aWFsaXphdGlvbiBWZWN0b3IgKElWKSwgYW5kIHRoZSBjeXBoZXIgdGV4dFxyXG4gICAgY29uc3QgW2Jhc2U2NElWLCBiYXNlNjRDaXBoZXJ0ZXh0XSA9IHBheWxvYWQuc3BsaXQoJzonKVxyXG5cclxuICAgIGlmICghYmFzZTY0SVYgfHwgIWJhc2U2NENpcGhlcnRleHQpIHsgdGhyb3cgbmV3IEVycm9yKCdUaGUgcGF5bG9hZCBtdXN0IGNvbnRhaW4gdGhlIElWIGFuZCB0aGUgY2lwaGVyIHRleHQuJykgfVxyXG5cclxuICAgIGNvbnN0IGNyeXB0b0tleSA9IGF3YWl0IHRoaXMubG9hZEtleSgpXHJcblxyXG4gICAgY29uc3QgaXYgPSB0aGlzLmJhc2U2NFRvVWludDhBcnJheShiYXNlNjRJVilcclxuICAgIGNvbnN0IGNpcGhlclRleHQgPSB0aGlzLmJhc2U2NFRvQXJyYXlCdWZmZXIoYmFzZTY0Q2lwaGVydGV4dClcclxuXHJcbiAgICAvLyBEZWNyeXB0IHRoZSBjeXBoZXIgdGV4dFxyXG4gICAgY29uc3QgZGVjcnlwdGVkID0gYXdhaXQgY3J5cHRvLnN1YnRsZS5kZWNyeXB0KFxyXG4gICAgICB7XHJcbiAgICAgICAgbmFtZTogJ0FFUy1HQ00nLFxyXG4gICAgICAgIGl2LFxyXG4gICAgICB9LFxyXG4gICAgICBjcnlwdG9LZXksXHJcbiAgICAgIGNpcGhlclRleHRcclxuICAgIClcclxuXHJcbiAgICAvLyBEZWNvZGUgdGhlIGRlY3J5cHRlZCB0ZXh0XHJcbiAgICBjb25zdCBkZWNvZGVyID0gbmV3IFRleHREZWNvZGVyKClcclxuICAgIHJldHVybiBkZWNvZGVyLmRlY29kZShkZWNyeXB0ZWQpXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFzeW5jIGxvYWRLZXkgKCkge1xyXG4gICAgLy8gRGVjb2RlIHRoZSBiYXNlNjQga2V5IHRvIFVpbnQ4QXJyYXlcclxuICAgIGNvbnN0IHJhd0tleSA9IHRoaXMuYmFzZTY0VG9VaW50OEFycmF5KHRoaXMuZW52aXJvbm1lbnRzLnNlY3JldEtleSlcclxuXHJcbiAgICAvLyBJbXBvcnQgdGhlIGtleSB0byBBUEkgQ3J5cHRvXHJcbiAgICByZXR1cm4gYXdhaXQgY3J5cHRvLnN1YnRsZS5pbXBvcnRLZXkoXHJcbiAgICAgICdyYXcnLFxyXG4gICAgICByYXdLZXksXHJcbiAgICAgIHsgbmFtZTogJ0FFUy1HQ00nIH0sXHJcbiAgICAgIHRydWUsXHJcbiAgICAgIFsnZW5jcnlwdCcsICdkZWNyeXB0J11cclxuICAgIClcclxuICB9XHJcblxyXG4gIHByaXZhdGUgdWludDhBcnJheVRvQmFzZTY0IChkYXRhOiBVaW50OEFycmF5KTogc3RyaW5nIHtcclxuICAgIGxldCBiaW5hcnkgPSAnJ1xyXG4gICAgY29uc3QgbGVuID0gZGF0YS5ieXRlTGVuZ3RoXHJcblxyXG4gICAgZm9yIChsZXQgaSA9IDA7IGkgPCBsZW47IGkrKykge1xyXG4gICAgICBiaW5hcnkgKz0gU3RyaW5nLmZyb21DaGFyQ29kZShkYXRhW2ldKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBidG9hKGJpbmFyeSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmFzZTY0VG9VaW50OEFycmF5IChiYXNlNjQ6IHN0cmluZyk6IFVpbnQ4QXJyYXkge1xyXG4gICAgY29uc3QgYmluYXJ5U3RyaW5nID0gYXRvYihiYXNlNjQpXHJcbiAgICBjb25zdCBsZW4gPSBiaW5hcnlTdHJpbmcubGVuZ3RoXHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGxlbilcclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKVxyXG4gICAgfVxyXG4gICAgcmV0dXJuIGJ5dGVzXHJcbiAgfVxyXG5cclxuICBwcml2YXRlIGFycmF5QnVmZmVyVG9CYXNlNjQgKGJ1ZmZlcjogQXJyYXlCdWZmZXIpOiBzdHJpbmcge1xyXG4gICAgbGV0IGJpbmFyeSA9ICcnXHJcbiAgICBjb25zdCBieXRlcyA9IG5ldyBVaW50OEFycmF5KGJ1ZmZlcilcclxuICAgIGNvbnN0IGxlbiA9IGJ5dGVzLmJ5dGVMZW5ndGhcclxuXHJcbiAgICBmb3IgKGxldCBpID0gMDsgaSA8IGxlbjsgaSsrKSB7XHJcbiAgICAgIGJpbmFyeSArPSBTdHJpbmcuZnJvbUNoYXJDb2RlKGJ5dGVzW2ldKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBidG9hKGJpbmFyeSlcclxuICB9XHJcblxyXG4gIHByaXZhdGUgYmFzZTY0VG9BcnJheUJ1ZmZlciAoYmFzZTY0OiBzdHJpbmcpOiBBcnJheUJ1ZmZlciB7XHJcbiAgICBjb25zdCBiaW5hcnlTdHJpbmcgPSBhdG9iKGJhc2U2NClcclxuICAgIGNvbnN0IGxlbiA9IGJpbmFyeVN0cmluZy5sZW5ndGhcclxuICAgIGNvbnN0IGJ5dGVzID0gbmV3IFVpbnQ4QXJyYXkobGVuKVxyXG5cclxuICAgIGZvciAobGV0IGkgPSAwOyBpIDwgbGVuOyBpKyspIHtcclxuICAgICAgYnl0ZXNbaV0gPSBiaW5hcnlTdHJpbmcuY2hhckNvZGVBdChpKVxyXG4gICAgfVxyXG5cclxuICAgIHJldHVybiBieXRlcy5idWZmZXJcclxuICB9XHJcbn1cclxuIl19