feat(e2ee): secret fingerprint

This commit is contained in:
rhunk
2023-09-30 19:09:23 +02:00
parent 5e63f8fae7
commit bc015d5d60
3 changed files with 45 additions and 3 deletions

View File

@ -26,8 +26,20 @@ interface E2eeInterface {
*/
boolean acceptPairingResponse(String friendId, in byte[] encapsulatedSecret);
/**
* Check if a friend key exists
* @param friendId
* @return true if the friend key exists
*/
boolean friendKeyExists(String friendId);
/**
* Get the fingerprint of a secret key
* @param friendId
* @return the fingerprint of the secret key
*/
@nullable String getSecretFingerprint(String friendId);
@nullable EncryptionResult encryptMessage(String friendId, in byte[] message);
@nullable byte[] decryptMessage(String friendId, in byte[] message, in byte[] iv);

View File

@ -153,21 +153,35 @@ class EndToEndEncryption : MessagingRuleFeature(
private fun openManagementPopup() {
val conversationId = context.feature(Messaging::class).openedConversationUUID?.toString() ?: return
val friendId = context.database.getDMOtherParticipant(conversationId)
if (context.database.getDMOtherParticipant(conversationId) == null) {
if (friendId == null) {
context.shortToast("This menu is only available in direct messages.")
return
}
val actions = listOf(
"Initiate a new shared secret"
"Initiate a new shared secret",
"Show shared key fingerprint"
)
ViewAppearanceHelper.newAlertDialogBuilder(context.mainActivity!!).apply {
setTitle("End-to-end encryption")
setItems(actions.toTypedArray()) { _, which ->
when (which) {
0 -> askForKeys(conversationId)
0 -> {
warnKeyOverwrite(friendId) {
askForKeys(conversationId)
}
}
1 -> {
val fingerprint = e2eeInterface.getSecretFingerprint(friendId)
ViewAppearanceHelper.newAlertDialogBuilder(context).apply {
setTitle("End-to-end encryption")
setMessage("Your fingerprint is:\n\n$fingerprint\n\nMake sure to check if it matches your friend's fingerprint!")
setPositiveButton("OK") { _, _ -> }
}.show()
}
}
}
setPositiveButton("OK") { _, _ -> }