mirror of
https://code.briarproject.org/briar/briar.git
synced 2026-02-20 14:49:53 +01:00
Erase connection windows if the JVM shuts down cleanly.
This commit is contained in:
@@ -34,6 +34,7 @@ import net.sf.briar.api.protocol.TransportIndex;
|
|||||||
import net.sf.briar.api.transport.ConnectionContext;
|
import net.sf.briar.api.transport.ConnectionContext;
|
||||||
import net.sf.briar.api.transport.ConnectionRecogniser;
|
import net.sf.briar.api.transport.ConnectionRecogniser;
|
||||||
import net.sf.briar.api.transport.ConnectionWindow;
|
import net.sf.briar.api.transport.ConnectionWindow;
|
||||||
|
import net.sf.briar.util.ByteUtils;
|
||||||
|
|
||||||
import com.google.inject.Inject;
|
import com.google.inject.Inject;
|
||||||
|
|
||||||
@@ -72,6 +73,12 @@ DatabaseListener {
|
|||||||
// The contact was removed - clean up in eventOccurred()
|
// The contact was removed - clean up in eventOccurred()
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
Runtime.getRuntime().addShutdownHook(new Thread() {
|
||||||
|
@Override
|
||||||
|
public void run() {
|
||||||
|
eraseSecrets();
|
||||||
|
}
|
||||||
|
});
|
||||||
initialised = true;
|
initialised = true;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -88,12 +95,12 @@ DatabaseListener {
|
|||||||
private synchronized void calculateIvs(ContactId c, TransportIndex i,
|
private synchronized void calculateIvs(ContactId c, TransportIndex i,
|
||||||
ConnectionWindow w) throws DbException {
|
ConnectionWindow w) throws DbException {
|
||||||
for(Entry<Long, byte[]> e : w.getUnseen().entrySet()) {
|
for(Entry<Long, byte[]> e : w.getUnseen().entrySet()) {
|
||||||
long unseen = e.getKey();
|
long connection = e.getKey();
|
||||||
byte[] secret = e.getValue();
|
byte[] secret = e.getValue();
|
||||||
ErasableKey ivKey = crypto.deriveIvKey(secret, true);
|
ErasableKey ivKey = crypto.deriveIvKey(secret, true);
|
||||||
Bytes iv = new Bytes(encryptIv(i, unseen, ivKey));
|
Bytes iv = new Bytes(encryptIv(i, connection, ivKey));
|
||||||
ivKey.erase();
|
ivKey.erase();
|
||||||
expected.put(iv, new Context(c, i, unseen, w));
|
expected.put(iv, new Context(c, i, connection, w));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -112,6 +119,12 @@ DatabaseListener {
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private synchronized void eraseSecrets() {
|
||||||
|
for(Context c : expected.values()) {
|
||||||
|
for(byte[] b : c.window.getUnseen().values()) ByteUtils.erase(b);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
public synchronized ConnectionContext acceptConnection(byte[] encryptedIv)
|
public synchronized ConnectionContext acceptConnection(byte[] encryptedIv)
|
||||||
throws DbException {
|
throws DbException {
|
||||||
if(encryptedIv.length != IV_LENGTH)
|
if(encryptedIv.length != IV_LENGTH)
|
||||||
|
|||||||
Reference in New Issue
Block a user