feat: add @standardnotes/encryption package (#1199)
* feat: add @standardnotes/encryption package * fix: mobile dependency on encryption package * fix: order of build & lint in pr workflows * fix: web dependency on encryption package * fix: remove encryption package composite configuration * fix: import order
This commit is contained in:
52
packages/encryption/src/Domain/Operator/OperatorWrapper.ts
Normal file
52
packages/encryption/src/Domain/Operator/OperatorWrapper.ts
Normal file
@@ -0,0 +1,52 @@
|
||||
import { isAsyncOperator } from './Functions'
|
||||
import { OperatorManager } from './OperatorManager'
|
||||
import * as Models from '@standardnotes/models'
|
||||
import {
|
||||
DecryptedParameters,
|
||||
EncryptedParameters,
|
||||
encryptedParametersFromPayload,
|
||||
ErrorDecryptingParameters,
|
||||
} from '../Types/EncryptedParameters'
|
||||
|
||||
export async function encryptPayload(
|
||||
payload: Models.DecryptedPayloadInterface,
|
||||
key: Models.ItemsKeyInterface | Models.RootKeyInterface,
|
||||
operatorManager: OperatorManager,
|
||||
): Promise<EncryptedParameters> {
|
||||
const operator = operatorManager.operatorForVersion(key.keyVersion)
|
||||
let encryptionParameters
|
||||
|
||||
if (isAsyncOperator(operator)) {
|
||||
encryptionParameters = await operator.generateEncryptedParametersAsync(payload, key)
|
||||
} else {
|
||||
encryptionParameters = operator.generateEncryptedParametersSync(payload, key)
|
||||
}
|
||||
|
||||
if (!encryptionParameters) {
|
||||
throw 'Unable to generate encryption parameters'
|
||||
}
|
||||
|
||||
return encryptionParameters
|
||||
}
|
||||
|
||||
export async function decryptPayload<C extends Models.ItemContent = Models.ItemContent>(
|
||||
payload: Models.EncryptedPayloadInterface,
|
||||
key: Models.ItemsKeyInterface | Models.RootKeyInterface,
|
||||
operatorManager: OperatorManager,
|
||||
): Promise<DecryptedParameters<C> | ErrorDecryptingParameters> {
|
||||
const operator = operatorManager.operatorForVersion(payload.version)
|
||||
|
||||
try {
|
||||
if (isAsyncOperator(operator)) {
|
||||
return await operator.generateDecryptedParametersAsync(encryptedParametersFromPayload(payload), key)
|
||||
} else {
|
||||
return operator.generateDecryptedParametersSync(encryptedParametersFromPayload(payload), key)
|
||||
}
|
||||
} catch (e) {
|
||||
console.error('Error decrypting payload', payload, e)
|
||||
return {
|
||||
uuid: payload.uuid,
|
||||
errorDecrypting: true,
|
||||
}
|
||||
}
|
||||
}
|
||||
Reference in New Issue
Block a user