import { IsBoolean, IsNotEmpty, ValidateIf } from 'class-validator'; import { AES_GCM_IV_BYTE_LENGTH } from '../../../consts/crypto/aesGcmIvByteLength'; import { IsBase64 } from '../../../validation/decorators/isBase64'; import { UploadCiphertextOptionsDto } from './UploadCiphertextOptionsDto'; export class CreateZkUploadDto extends UploadCiphertextOptionsDto { @IsNotEmpty() @IsBoolean() passwordProtected: boolean; @ValidateIf((dto: CreateZkUploadDto) => dto.passwordProtected === true) @IsNotEmpty() @IsBase64({ maxByteLength: 128 }) wrappedDek?: string; @ValidateIf((dto: CreateZkUploadDto) => dto.passwordProtected === true) @IsNotEmpty() @IsBase64({ byteLength: AES_GCM_IV_BYTE_LENGTH }) wrapIv?: string; @ValidateIf((dto: CreateZkUploadDto) => dto.passwordProtected === true) @IsNotEmpty() @IsBase64({ maxByteLength: 64 }) salt?: string; }