Implement message validator for handshake key exchange

This commit is contained in:
ameba23
2021-06-29 09:48:19 +02:00
parent b860e73bdc
commit eb66a13ded
3 changed files with 43 additions and 7 deletions

View File

@@ -83,14 +83,21 @@ public class HandshakeKeyExchangeManagerImpl extends ConversationClientImpl
@Override @Override
public void onDatabaseOpened(Transaction txn) throws DbException { public void onDatabaseOpened(Transaction txn) throws DbException {
if (db.containsGroup(txn, localGroup.getId())) return;
db.addGroup(txn, localGroup);
// Get our own handshake public key // Get our own handshake public key
handshakePublicKey = identityManager.getHandshakeKeys(txn).getPublic(); handshakePublicKey = identityManager.getHandshakeKeys(txn).getPublic();
// Set things up for any pre-existing contacts if (!db.containsGroup(txn, localGroup.getId())) {
for (Contact c : db.getContacts(txn)) addingContact(txn, c); db.addGroup(txn, localGroup);
// Set things up for any pre-existing contacts
for (Contact c : db.getContacts(txn)) addingContact(txn, c);
} else {
for (Contact c : db.getContacts(txn)) {
if (c.getHandshakePublicKey() == null) {
sendHandshakePublicKey(txn, c);
}
}
}
} }
@Override @Override
@@ -192,7 +199,7 @@ public class HandshakeKeyExchangeManagerImpl extends ConversationClientImpl
private void sendHandshakePublicKey(Transaction txn, Contact c) private void sendHandshakePublicKey(Transaction txn, Contact c)
throws DbException { throws DbException {
LOG.info("Sending our handshake public key to " + c.getAlias()); LOG.info("Sending our handshake public key to " + c.getAuthor().getName());
Group group = getContactGroup(c); Group group = getContactGroup(c);
GroupId g = group.getId(); GroupId g = group.getId();
if (!db.containsGroup(txn, g)) db.addGroup(txn, group); if (!db.containsGroup(txn, g)) db.addGroup(txn, group);

View File

@@ -1,8 +1,11 @@
package org.briarproject.briar.handshakekeyexchange; package org.briarproject.briar.handshakekeyexchange;
import org.briarproject.bramble.api.client.ClientHelper;
import org.briarproject.bramble.api.contact.ContactManager; import org.briarproject.bramble.api.contact.ContactManager;
import org.briarproject.bramble.api.data.MetadataEncoder;
import org.briarproject.bramble.api.lifecycle.LifecycleManager; import org.briarproject.bramble.api.lifecycle.LifecycleManager;
import org.briarproject.bramble.api.sync.validation.ValidationManager; import org.briarproject.bramble.api.sync.validation.ValidationManager;
import org.briarproject.bramble.api.system.Clock;
import org.briarproject.bramble.api.versioning.ClientVersioningManager; import org.briarproject.bramble.api.versioning.ClientVersioningManager;
import org.briarproject.briar.api.conversation.ConversationManager; import org.briarproject.briar.api.conversation.ConversationManager;
import org.briarproject.briar.api.handshakekeyexchange.HandshakeKeyExchangeManager; import org.briarproject.briar.api.handshakekeyexchange.HandshakeKeyExchangeManager;
@@ -18,6 +21,9 @@ public class HandshakeKeyExchangeModule {
public static class EagerSingletons { public static class EagerSingletons {
@Inject @Inject
HandshakeKeyExchangeManager handshakeKeyExchangeManager; HandshakeKeyExchangeManager handshakeKeyExchangeManager;
@Inject
HandshakeKeyExchangeValidator handshakeKeyExchangeValidator;
} }
@Provides @Provides
@@ -41,4 +47,18 @@ public class HandshakeKeyExchangeModule {
conversationManager.registerConversationClient(handshakeKeyExchangeManager); conversationManager.registerConversationClient(handshakeKeyExchangeManager);
return handshakeKeyExchangeManager; return handshakeKeyExchangeManager;
} }
@Provides
@Singleton
HandshakeKeyExchangeValidator handshakeKeyExchangeValidator(
ValidationManager validationManager,
ClientHelper clientHelper,
MetadataEncoder metadataEncoder,
Clock clock) {
HandshakeKeyExchangeValidator validator =
new HandshakeKeyExchangeValidator(clientHelper, metadataEncoder, clock);
validationManager.registerMessageValidator(HandshakeKeyExchangeManager.CLIENT_ID, HandshakeKeyExchangeManager.MAJOR_VERSION,
validator);
return validator;
}
} }

View File

@@ -4,12 +4,17 @@ import org.briarproject.bramble.api.FormatException;
import org.briarproject.bramble.api.client.BdfMessageContext; import org.briarproject.bramble.api.client.BdfMessageContext;
import org.briarproject.bramble.api.client.BdfMessageValidator; import org.briarproject.bramble.api.client.BdfMessageValidator;
import org.briarproject.bramble.api.client.ClientHelper; import org.briarproject.bramble.api.client.ClientHelper;
import org.briarproject.bramble.api.data.BdfDictionary;
import org.briarproject.bramble.api.data.BdfEntry;
import org.briarproject.bramble.api.data.BdfList; import org.briarproject.bramble.api.data.BdfList;
import org.briarproject.bramble.api.data.MetadataEncoder; import org.briarproject.bramble.api.data.MetadataEncoder;
import org.briarproject.bramble.api.sync.Group; import org.briarproject.bramble.api.sync.Group;
import org.briarproject.bramble.api.sync.InvalidMessageException; import org.briarproject.bramble.api.sync.InvalidMessageException;
import org.briarproject.bramble.api.sync.Message; import org.briarproject.bramble.api.sync.Message;
import org.briarproject.bramble.api.system.Clock; import org.briarproject.bramble.api.system.Clock;
import static org.briarproject.briar.handshakekeyexchange.HandshakeKeyExchangeConstants.MSG_KEY_LOCAL;
import static org.briarproject.bramble.util.ValidationUtils.checkSize;
import javax.inject.Inject; import javax.inject.Inject;
@@ -26,6 +31,10 @@ public class HandshakeKeyExchangeValidator extends BdfMessageValidator {
@Override @Override
protected BdfMessageContext validateMessage(Message m, Group g, protected BdfMessageContext validateMessage(Message m, Group g,
BdfList body) throws InvalidMessageException, FormatException { BdfList body) throws InvalidMessageException, FormatException {
return null; checkSize(body,1);
BdfDictionary meta = BdfDictionary.of(
new BdfEntry(MSG_KEY_LOCAL, false)
);
return new BdfMessageContext(meta);
} }
} }