signal-desktop/ts/util/uploadAttachment.ts

44 lines
1.2 KiB
TypeScript
Raw Normal View History

// Copyright 2023 Signal Messenger, LLC
// SPDX-License-Identifier: AGPL-3.0-only
import type {
AttachmentWithHydratedData,
UploadedAttachmentType,
} from '../types/Attachment';
import { MIMETypeToString } from '../types/MIME';
import { padAndEncryptAttachment, getRandomBytes } from '../Crypto';
import { strictAssert } from './assert';
export async function uploadAttachment(
attachment: AttachmentWithHydratedData
): Promise<UploadedAttachmentType> {
const keys = getRandomBytes(64);
const encrypted = padAndEncryptAttachment({
plaintext: attachment.data,
keys,
});
const { server } = window.textsecure;
strictAssert(server, 'WebAPI must be initialized');
2023-05-04 20:58:53 +00:00
const cdnKey = await server.putEncryptedAttachment(encrypted.ciphertext);
const size = attachment.data.byteLength;
return {
2023-05-04 20:58:53 +00:00
cdnKey,
cdnNumber: 2,
key: keys,
size,
digest: encrypted.digest,
plaintextHash: encrypted.plaintextHash,
contentType: MIMETypeToString(attachment.contentType),
fileName: attachment.fileName,
flags: attachment.flags,
width: attachment.width,
height: attachment.height,
caption: attachment.caption,
blurHash: attachment.blurHash,
};
}