Use same lock values as mobile clients
[ProtonMail-WebClient.git] / packages / docs-core / lib / UseCase / EncryptMessage.ts
blob2332f6225068abb85c1d55d6dd688a34242b4493
1 import type { UseCaseInterface } from '../Domain/UseCase/UseCaseInterface'
2 import type { Result } from '../Domain/Result/Result'
3 import type { EncryptionService } from '../Services/Encryption/EncryptionService'
4 import type { EncryptionContext } from '../Services/Encryption/EncryptionContext'
5 import type { DocumentKeys } from '@proton/drive-store'
6 import { GetAssociatedEncryptionDataForRealtimeMessage } from './GetAdditionalEncryptionData'
7 import type { EncryptionMetadata } from '../Types/EncryptionMetadata'
9 /**
10  * Encrypts a message directed towards the RTS.
11  */
12 export class EncryptMessage implements UseCaseInterface<Uint8Array> {
13   constructor(private encryption: EncryptionService<EncryptionContext.RealtimeMessage>) {}
15   async execute(update: Uint8Array, metadata: EncryptionMetadata, keys: DocumentKeys): Promise<Result<Uint8Array>> {
16     const aad = GetAssociatedEncryptionDataForRealtimeMessage(metadata)
18     const result = await this.encryption.signAndEncryptData(
19       update,
20       aad,
21       keys.documentContentKey,
22       keys.userAddressPrivateKey,
23     )
25     return result
26   }