Cleanup - unused files / unused exports / duplicate exports
[ProtonMail-WebClient.git] / packages / shared / lib / keys / keyImport.ts
blob274699b73cd9d6249931c11902ae27dcd2988877
1 import type { KeyInfo } from '@proton/crypto';
2 import { CryptoProxy } from '@proton/crypto';
3 import isTruthy from '@proton/utils/isTruthy';
5 import { readFileAsString } from '../helpers/file';
7 export interface ArmoredKeyWithInfo extends KeyInfo {
8     /**
9      * Armored key corresponding to the key info.
10      * This could be a decrypted private key (see `this.keyIsDecrypted`), so handle with care.
11      */
12     armoredKey: string;
15 const ARMORED_KEY_EXPR =
16     /-----BEGIN PGP (PRIVATE|PUBLIC) KEY BLOCK-----(?:(?!-----)[\s\S])*-----END PGP (PRIVATE|PUBLIC) KEY BLOCK-----/g;
18 export const parseArmoredKeys = (fileString: string) => {
19     return fileString.match(ARMORED_KEY_EXPR) || [];
22 export const parseKeys = (filesAsStrings: string[] = []) => {
23     const armoredKeys = parseArmoredKeys(filesAsStrings.join('\n'));
24     if (!armoredKeys.length) {
25         return [];
26     }
28     return Promise.all(
29         armoredKeys.map(async (armoredKey) => {
30             try {
31                 const keyInfo = await CryptoProxy.getKeyInfo({ armoredKey });
32                 const ArmoredKeyWithInfo = {
33                     ...keyInfo,
34                     armoredKey,
35                 };
36                 return ArmoredKeyWithInfo;
37             } catch (e: any) {
38                 // ignore errors
39             }
40         })
41     ).then((result) => result.filter<ArmoredKeyWithInfo>(isTruthy));
44 export const parseKeyFiles = async (files: File[] = []) => {
45     const filesAsStrings = await Promise.all(files.map((file) => readFileAsString(file))).catch(() => []);
46     return parseKeys(filesAsStrings);