Secure your code as it's written. Use Snyk Code to scan source code in minutes - no build needed - and fix issues immediately.
private to_store(serialised: ArrayBuffer | string): string {
return Encoder.toBase64(serialised).asString;
}
private async sendExternalGenericMessage(
sendingClientId: string,
conversationId: string,
asset: EncryptedAsset,
preKeyBundles: UserPreKeyBundleMap
): Promise {
const {cipherText, keyBytes, sha256} = asset;
const messageId = ConversationService.createId();
const externalMessage = this.protocolBuffers.External.create({
otrKey: new Uint8Array(keyBytes),
sha256: new Uint8Array(sha256),
});
const base64CipherText = Encoder.toBase64(cipherText).asString;
const customTextMessage = this.protocolBuffers.GenericMessage.create({
external: externalMessage,
messageId,
});
const plainTextBuffer: Buffer = this.protocolBuffers.GenericMessage.encode(customTextMessage).finish();
const recipients = await this.cryptographyService.encrypt(plainTextBuffer, preKeyBundles as UserPreKeyBundleMap);
const message: NewOTRMessage = {
data: base64CipherText,
recipients,
sender: sendingClientId,
};
return this.apiClient.conversation.api.postOTRMessage(sendingClientId, conversationId, message);
private to_store(serialised: ArrayBuffer | string): string {
return Encoder.toBase64(serialised).asString;
}
}
private async encryptPayloadForSession(
sessionId: string,
plainText: Uint8Array,
base64EncodedPreKey: string,
): Promise {
this.logger.log(`Encrypting Payload for session ID "${sessionId}"`);
let encryptedPayload;
try {
const decodedPreKeyBundle: Uint8Array = Decoder.fromBase64(base64EncodedPreKey).asBytes;
const payloadAsBuffer: ArrayBuffer = await this.cryptobox.encrypt(
sessionId,
plainText,
decodedPreKeyBundle.buffer,
);
encryptedPayload = Encoder.toBase64(payloadAsBuffer).asString;
} catch (error) {
this.logger.error(`Could not encrypt payload: ${error.message}`);
encryptedPayload = '💣';
}
return {sessionId, encryptedPayload};
}
export const base64ToArraySync = (base64: string): Uint8Array => Decoder.fromBase64(stripDataUri(base64)).asBytes;
public decrypt(sessionId: string, encodedCiphertext: string): Promise {
this.logger.log(`Decrypting message for session ID "${sessionId}"`);
const messageBytes: Uint8Array = Decoder.fromBase64(encodedCiphertext).asBytes;
return this.cryptobox.decrypt(sessionId, messageBytes.buffer);
}
private from_store(record: PersistedRecord): ArrayBuffer {
return typeof record.serialised === 'string'
? Decoder.fromBase64(record.serialised).asBytes.buffer
: record.serialised;
}
private async encryptPayloadForSession(
sessionId: string,
plainText: Uint8Array,
base64EncodedPreKey: string,
): Promise {
this.logger.log(`Encrypting Payload for session ID "${sessionId}"`);
let encryptedPayload;
try {
const decodedPreKeyBundle: Uint8Array = Decoder.fromBase64(base64EncodedPreKey).asBytes;
const payloadAsBuffer: ArrayBuffer = await this.cryptobox.encrypt(
sessionId,
plainText,
decodedPreKeyBundle.buffer,
);
encryptedPayload = Encoder.toBase64(payloadAsBuffer).asString;
} catch (error) {
this.logger.error(`Could not encrypt payload: ${error.message}`);
encryptedPayload = '💣';
}
return {sessionId, encryptedPayload};
}
private from_store(record: PersistedRecord): ArrayBuffer {
return typeof record.serialised === 'string'
? Decoder.fromBase64(record.serialised).asBytes.buffer
: record.serialised;
}
return records.map((record: SerialisedRecord) => {
const payload =
typeof record.serialised === 'string'
? Decoder.fromBase64(record.serialised).asBytes.buffer
: record.serialised;
return ProteusKeys.PreKey.deserialise(payload);
});
});