mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-20 14:49:53 +01:00
Ensure that private key is not stored anymore
This commit is contained in:
@@ -2,15 +2,19 @@ package org.briarproject.bramble.transport.agreement;
|
|||||||
|
|
||||||
import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons;
|
import org.briarproject.bramble.BrambleCoreIntegrationTestEagerSingletons;
|
||||||
import org.briarproject.bramble.api.Pair;
|
import org.briarproject.bramble.api.Pair;
|
||||||
|
import org.briarproject.bramble.api.contact.Contact;
|
||||||
import org.briarproject.bramble.api.contact.ContactId;
|
import org.briarproject.bramble.api.contact.ContactId;
|
||||||
import org.briarproject.bramble.api.contact.ContactManager;
|
import org.briarproject.bramble.api.contact.ContactManager;
|
||||||
import org.briarproject.bramble.api.crypto.SecretKey;
|
import org.briarproject.bramble.api.crypto.SecretKey;
|
||||||
|
import org.briarproject.bramble.api.data.BdfDictionary;
|
||||||
import org.briarproject.bramble.api.identity.Author;
|
import org.briarproject.bramble.api.identity.Author;
|
||||||
import org.briarproject.bramble.api.identity.AuthorId;
|
import org.briarproject.bramble.api.identity.AuthorId;
|
||||||
import org.briarproject.bramble.api.identity.Identity;
|
import org.briarproject.bramble.api.identity.Identity;
|
||||||
import org.briarproject.bramble.api.identity.IdentityManager;
|
import org.briarproject.bramble.api.identity.IdentityManager;
|
||||||
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||||
import org.briarproject.bramble.api.plugin.TransportId;
|
import org.briarproject.bramble.api.plugin.TransportId;
|
||||||
|
import org.briarproject.bramble.api.sync.Group;
|
||||||
|
import org.briarproject.bramble.api.sync.MessageId;
|
||||||
import org.briarproject.bramble.test.BrambleIntegrationTest;
|
import org.briarproject.bramble.test.BrambleIntegrationTest;
|
||||||
import org.briarproject.bramble.test.TestDatabaseConfigModule;
|
import org.briarproject.bramble.test.TestDatabaseConfigModule;
|
||||||
import org.briarproject.bramble.test.TestPluginConfigModule;
|
import org.briarproject.bramble.test.TestPluginConfigModule;
|
||||||
@@ -19,12 +23,17 @@ import org.junit.Before;
|
|||||||
import org.junit.Test;
|
import org.junit.Test;
|
||||||
|
|
||||||
import java.io.File;
|
import java.io.File;
|
||||||
|
import java.util.Map;
|
||||||
|
|
||||||
|
import static org.briarproject.bramble.api.transport.agreement.TransportKeyAgreementManager.CLIENT_ID;
|
||||||
|
import static org.briarproject.bramble.api.transport.agreement.TransportKeyAgreementManager.MAJOR_VERSION;
|
||||||
import static org.briarproject.bramble.test.TestPluginConfigModule.DUPLEX_TRANSPORT_ID;
|
import static org.briarproject.bramble.test.TestPluginConfigModule.DUPLEX_TRANSPORT_ID;
|
||||||
import static org.briarproject.bramble.test.TestPluginConfigModule.SIMPLEX_TRANSPORT_ID;
|
import static org.briarproject.bramble.test.TestPluginConfigModule.SIMPLEX_TRANSPORT_ID;
|
||||||
import static org.briarproject.bramble.test.TestUtils.getSecretKey;
|
import static org.briarproject.bramble.test.TestUtils.getSecretKey;
|
||||||
|
import static org.briarproject.bramble.transport.agreement.TransportKeyAgreementConstants.MSG_KEY_IS_SESSION;
|
||||||
import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
import static org.briarproject.bramble.util.StringUtils.getRandomString;
|
||||||
import static org.junit.Assert.assertFalse;
|
import static org.junit.Assert.assertFalse;
|
||||||
|
import static org.junit.Assert.assertNull;
|
||||||
import static org.junit.Assert.assertTrue;
|
import static org.junit.Assert.assertTrue;
|
||||||
|
|
||||||
public class TransportKeyAgreementIntegrationTest
|
public class TransportKeyAgreementIntegrationTest
|
||||||
@@ -143,6 +152,10 @@ public class TransportKeyAgreementIntegrationTest
|
|||||||
.canSendOutgoingStreams(bobId, newTransportId));
|
.canSendOutgoingStreams(bobId, newTransportId));
|
||||||
assertTrue(bob.getKeyManager()
|
assertTrue(bob.getKeyManager()
|
||||||
.canSendOutgoingStreams(aliceId, newTransportId));
|
.canSendOutgoingStreams(aliceId, newTransportId));
|
||||||
|
|
||||||
|
// Ensure that private key is not stored anymore.
|
||||||
|
assertLocalKeyPairIsNull(alice, bobId);
|
||||||
|
assertLocalKeyPairIsNull(bob, aliceId);
|
||||||
}
|
}
|
||||||
|
|
||||||
private Pair<ContactId, ContactId> addContacts() throws Exception {
|
private Pair<ContactId, ContactId> addContacts() throws Exception {
|
||||||
@@ -193,4 +206,30 @@ public class TransportKeyAgreementIntegrationTest
|
|||||||
return newDevice;
|
return newDevice;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Asserts that the local key pair (specifically the private key) is removed
|
||||||
|
* from the session as intended when leaving the AWAIT_KEY state.
|
||||||
|
* If it remained on disk after the keys had been activated
|
||||||
|
* then we'd lose forward secrecy.
|
||||||
|
*/
|
||||||
|
private void assertLocalKeyPairIsNull(
|
||||||
|
TransportKeyAgreementTestComponent device, ContactId contactId)
|
||||||
|
throws Exception {
|
||||||
|
Contact contact = device.getContactManager().getContact(contactId);
|
||||||
|
Group group = getContactGroup(device, contact);
|
||||||
|
Map<MessageId, BdfDictionary> map = bob.getClientHelper()
|
||||||
|
.getMessageMetadataAsDictionary(group.getId());
|
||||||
|
for (Map.Entry<MessageId, BdfDictionary> e : map.entrySet()) {
|
||||||
|
if (!e.getValue().getBoolean(MSG_KEY_IS_SESSION)) continue;
|
||||||
|
Session s = device.getSessionParser().parseSession(e.getValue());
|
||||||
|
assertNull(s.getLocalKeyPair());
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private Group getContactGroup(TransportKeyAgreementTestComponent device,
|
||||||
|
Contact c) {
|
||||||
|
return device.getContactGroupFactory().createContactGroup(CLIENT_ID,
|
||||||
|
MAJOR_VERSION, c);
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package org.briarproject.bramble.transport.agreement;
|
package org.briarproject.bramble.transport.agreement;
|
||||||
|
|
||||||
import org.briarproject.bramble.BrambleCoreModule;
|
import org.briarproject.bramble.BrambleCoreModule;
|
||||||
|
import org.briarproject.bramble.api.client.ContactGroupFactory;
|
||||||
import org.briarproject.bramble.api.contact.ContactManager;
|
import org.briarproject.bramble.api.contact.ContactManager;
|
||||||
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
import org.briarproject.bramble.api.lifecycle.LifecycleManager;
|
||||||
import org.briarproject.bramble.api.transport.KeyManager;
|
import org.briarproject.bramble.api.transport.KeyManager;
|
||||||
@@ -26,4 +27,8 @@ interface TransportKeyAgreementTestComponent
|
|||||||
ContactManager getContactManager();
|
ContactManager getContactManager();
|
||||||
|
|
||||||
LifecycleManager getLifecycleManager();
|
LifecycleManager getLifecycleManager();
|
||||||
|
|
||||||
|
ContactGroupFactory getContactGroupFactory();
|
||||||
|
|
||||||
|
SessionParser getSessionParser();
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user