mirror of
https://github.com/awatertrevi/infisical.git
synced 2026-10-10 23:28:45 +00:00
111 lines
2.8 KiB
TypeScript
111 lines
2.8 KiB
TypeScript
import {
|
|
decryptAssymmetric,
|
|
encryptAssymmetric} from '@app/components/utilities/cryptography/crypto';
|
|
import {
|
|
decryptPrivateKeyHelper
|
|
} from '@app/helpers/key';
|
|
|
|
/**
|
|
* Class to handle key actions
|
|
* TODO: in future, all private key-related encryption operations
|
|
* must pass through this class
|
|
*/
|
|
class KeyService {
|
|
private static privateKey: string = '';
|
|
|
|
static setPrivateKey(privateKey: string) {
|
|
KeyService.privateKey = privateKey;
|
|
}
|
|
|
|
/** Return the user's decrypted private key
|
|
* @param {Object} obj
|
|
* @param {Number} obj.encryptionVersion
|
|
* @param {String} obj.encryptedPrivateKey
|
|
* @param {String} obj.iv
|
|
* @param {String} obj.tag
|
|
* @param {String} obj.password
|
|
* @param {String} obj.salt
|
|
* @param {String} obj.protectedKey
|
|
* @param {String} obj.protectedKeyIV
|
|
* @param {String} obj.protectedKeyTag
|
|
* @returns {String} privateKey - decrypted private key
|
|
*/
|
|
static async decryptPrivateKey({
|
|
encryptionVersion,
|
|
encryptedPrivateKey,
|
|
iv,
|
|
tag,
|
|
password,
|
|
salt,
|
|
protectedKey,
|
|
protectedKeyIV,
|
|
protectedKeyTag,
|
|
}: {
|
|
encryptionVersion: number;
|
|
encryptedPrivateKey: string;
|
|
iv: string;
|
|
tag: string;
|
|
password: string;
|
|
salt: string;
|
|
protectedKey?: string;
|
|
protectedKeyIV?: string;
|
|
protectedKeyTag?: string;
|
|
}) {
|
|
return decryptPrivateKeyHelper({
|
|
encryptionVersion,
|
|
encryptedPrivateKey,
|
|
iv,
|
|
tag,
|
|
password,
|
|
salt,
|
|
protectedKey,
|
|
protectedKeyIV,
|
|
protectedKeyTag
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Return [plaintext] encrypted by the user's private key
|
|
* @param {Object} obj
|
|
* @param {String} obj.plaintext - plaintext to encrypt
|
|
*/
|
|
static encryptWithPrivateKey({
|
|
plaintext,
|
|
publicKey,
|
|
}: {
|
|
plaintext: string;
|
|
publicKey: string;
|
|
}) {
|
|
return encryptAssymmetric({
|
|
plaintext,
|
|
publicKey,
|
|
privateKey: KeyService.privateKey
|
|
});
|
|
}
|
|
|
|
/**
|
|
* Return [ciphertext] decrypted by the user's private key
|
|
* @param {Object} obj
|
|
* @param {String} obj.ciphertext - ciphertext to decrypt
|
|
* @param {String} obj.ciphertext - iv of ciphertext
|
|
* @param {String} obj.ciphertext - tag of ciphertext
|
|
*/
|
|
static decryptWithPrivateKey({
|
|
ciphertext,
|
|
nonce,
|
|
publicKey
|
|
}: {
|
|
ciphertext: string;
|
|
nonce: string;
|
|
publicKey: string;
|
|
}) {
|
|
return decryptAssymmetric({
|
|
ciphertext,
|
|
nonce,
|
|
publicKey,
|
|
privateKey: KeyService.privateKey
|
|
});
|
|
}
|
|
}
|
|
|
|
export default KeyService; |