Получите OmemoFingerprint от получателя перед отправкой сообщения - PullRequest
0 голосов
/ 04 марта 2019

Я использую Omemo и библиотеку smack для создания приложения чата.У меня есть следующий сценарий: я хочу установить связь между двумя устройствами, устройством A и устройством B. A отправляет сообщение B. Я хочу обнаружить отпечаток пальца B, чтобы я мог проверить, доверяю ли я этому устройству или нет,Я использую этот метод:

 HashMap<OmemoDevice, OmemoFingerprint> activeFingerprints =
                omemoManager.getActiveFingerprints(JidCreate.bareFrom(jid));
     for (final Map.Entry<OmemoDevice, OmemoFingerprint> entry : activeFingerprints.entrySet()) {
                result = omemoManager.isTrustedOmemoIdentity(entry.getKey(), entry.getValue());
                if (!result) {
                    break;
                }
            }

Но иногда мне возвращаются даже 6 отпечатков пальцев, и я не знаю, какой именно.Из-за этого мне кажется, что я очень часто получаю это сообщение:

2019-03-04 13: 28: 30.111 4291-5181 / com.inpedio.sphone W / System.err: org.matrix.olm.OlmException: BAD_MESSAGE_MAC 2019-03-04 13: 28: 30.111 4291-5181 / com.inpedio.sphone W / System.err: at org.matrix.olm.OlmSession.decryptMessage (OlmSession.java:336) 2019-03-04 13: 28: 30.112 4291-5181 / com.inpedio.sphone W / System.err: at org.livesoftware.smackx.omemo.olm.OlmOmemoSession.decryptMessageKey (OlmOmemoSession.java:128) 2019-03-04 13:28: 30.112 4291-5181 / com.inpedio.sphone W / System.err: at org.jivesoftware.smackx.omemo.internal.OmemoSession.decryptTransportedKey (OmemoSession.java:109) 2019-03-04 13: 28: 30.112 4291-5181 / com.inpedio.sphone W / System.err: at org.jivesoftware.smackx.omemo.OmemoService.decryptTransportedOmemoKey (OmemoService.java:917) 2019-03-04 13: 28: 30.112 4291-5181 / com.inpedio.sphone W / System.err: at org.jivesoftware.smackx.omemo.OmemoService.decryptOmemoMessageElement (OmemoService.java:887) 2019-03-04 13:28:30.113 4291-5181 / com.inpedio.sphone W / System.err: atg.jivesoftware.smackx.omemo.OmemoService.processReceivingMessage (OmemoService.java:711) 2019-03-04 13: 28: 30.114 4291-5181 / com.inpedio.sphone W / System.err: at org.jivesoftware.smackx.omemo.OmemoService.access $ 200 (OmemoService.java:104) 2019-03-04 13: 28: 30.114 4291-5181 / com.inpedio.sphone W/System.err: at org.jivesoftware.smackx.omemo.OmemoService $ OmemoStanzaListener.processStanza (OmemoService.java:1238) 2019-03-04 13: 28: 30.114 4291-5181 / com.inpedio.sphone W / System.err: в org.jivesoftware.smack.AbstractXMPPConnection $ 4.run (AbstractXMPPConnection.java:1204) 2019-03-04 13: 28: 30.115 4291-5181 / com.inpedio.sphone W / System.err: в java.util.concurrent.ThreadPoolExecutor.runWorker (ThreadPoolExecutor.java:1162) 2019-03-04 13: 28: 30.115 4291-5181 / com.inpedio.sphone W / System.err: в java.util.concurrent.ThreadPoolExecutor $ Worker.run (ThreadPoolExecutor.java: 636) 2019-03-04 13: 28: 30.115 4291-5181 / com.inpedio.sphone W / System.err: at java.lang.Thread.run (Thread.java:764) 2019-03-04 13: 28: 30.116 4291-5181 / com.inpedio.sphone W / OmemoService: внутреннему omemoMessageListener не удалось расшифровать входящее сообщение OMEMO: переносимый ключ не может быть расшифрован, посколькунет предоставленного ключа сообщения.Предоставляет ключи: [1546815194]

Я использую библиотеку OlmOmemo и smack.

1 Ответ

0 голосов
/ 05 марта 2019

Автор smack-omemo здесь.

Вы, вероятно, хотите убедиться, что получили все отпечатки пальцев своего контакта, позвонив по номеру OmemoManager.requestDeviceListUpdateFor(contactJid).После этого у вас должен быть полный список устройств контактов после вызова вашего кода.

Что касается того, как узнать, какой отпечаток принадлежит какому устройству: Как правило, вы хотите предоставить пользователю список отпечатков пальцев обоихих собственные и их контакты устройства.Таким образом, вы можете узнать, какое устройство и какое, сравнивая отпечатки пальцев.

В протоколе OMEMO ключи преднамеренно не идентифицируются по описательному имени (например, «телефон», «рабочий стол» и т. Д.) По порядку.мотивировать пользователей проверять отпечатки пальцев путем сканирования QR-кодов.Исключение, которое вы включили в свой вопрос, является показателем того, что отправляющее устройство «забыло» доверять принимающему устройству, в результате чего сообщение не зашифровано для принимающего устройства.В идеале вы должны предупредить пользователя, если он попытается отправить сообщение контакту, у которого есть «неопределившиеся» устройства, и попросить его проверить это устройство / принять решение, доверять этому устройству или нет - снова, в идеале, сканируя QR-код.код.

Кстати: вы можете поделиться ссылкой на OlmOmemo?Я ничего не могу найти с Google, но я хотел бы взглянуть на то, как они реализовали мои интерфейсы smack-omemo:)

...