mirror of
https://github.com/haveno-dex/haveno.git
synced 2025-08-02 19:56:23 -04:00
Use creation data for TTL check
This commit is contained in:
parent
4a3ec759f9
commit
551eb5b648
4 changed files with 20 additions and 10 deletions
|
@ -40,6 +40,7 @@ import java.util.concurrent.TimeUnit;
|
||||||
// Run in UserThread
|
// Run in UserThread
|
||||||
public class P2PDataStorage implements MessageListener, ConnectionListener {
|
public class P2PDataStorage implements MessageListener, ConnectionListener {
|
||||||
private static final Logger log = LoggerFactory.getLogger(P2PDataStorage.class);
|
private static final Logger log = LoggerFactory.getLogger(P2PDataStorage.class);
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* How many days to keep an entry before it is purged.
|
* How many days to keep an entry before it is purged.
|
||||||
*/
|
*/
|
||||||
|
@ -55,6 +56,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener {
|
||||||
private HashMap<ByteArray, MapValue> sequenceNumberMap = new HashMap<>();
|
private HashMap<ByteArray, MapValue> sequenceNumberMap = new HashMap<>();
|
||||||
private final Storage<HashMap> storage;
|
private final Storage<HashMap> storage;
|
||||||
|
|
||||||
|
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
// Constructor
|
// Constructor
|
||||||
///////////////////////////////////////////////////////////////////////////////////////////
|
///////////////////////////////////////////////////////////////////////////////////////////
|
||||||
|
@ -237,7 +239,7 @@ public class P2PDataStorage implements MessageListener, ConnectionListener {
|
||||||
|
|
||||||
if (result) {
|
if (result) {
|
||||||
log.info("refreshDate called for storedData:\n\t" + StringUtils.abbreviate(storedData.toString(), 100));
|
log.info("refreshDate called for storedData:\n\t" + StringUtils.abbreviate(storedData.toString(), 100));
|
||||||
storedData.updateTimeStamp();
|
storedData.refreshTTL();
|
||||||
storedData.updateSequenceNumber(sequenceNumber);
|
storedData.updateSequenceNumber(sequenceNumber);
|
||||||
storedData.updateSignature(signature);
|
storedData.updateSignature(signature);
|
||||||
|
|
||||||
|
|
|
@ -36,7 +36,7 @@ public class ProtectedMailboxStorageEntry extends ProtectedStorageEntry {
|
||||||
try {
|
try {
|
||||||
in.defaultReadObject();
|
in.defaultReadObject();
|
||||||
receiversPubKey = KeyFactory.getInstance(Sig.KEY_ALGO, "BC").generatePublic(new X509EncodedKeySpec(receiversPubKeyBytes));
|
receiversPubKey = KeyFactory.getInstance(Sig.KEY_ALGO, "BC").generatePublic(new X509EncodedKeySpec(receiversPubKeyBytes));
|
||||||
updateTimeStamp();
|
checkCreationTimeStamp();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
log.warn("Exception at readObject: " + t.getMessage());
|
log.warn("Exception at readObject: " + t.getMessage());
|
||||||
}
|
}
|
||||||
|
|
|
@ -26,14 +26,14 @@ public class ProtectedStorageEntry implements Payload {
|
||||||
public int sequenceNumber;
|
public int sequenceNumber;
|
||||||
public byte[] signature;
|
public byte[] signature;
|
||||||
@VisibleForTesting
|
@VisibleForTesting
|
||||||
transient public long timeStamp;
|
public long creationTimeStamp;
|
||||||
|
|
||||||
public ProtectedStorageEntry(StoragePayload storagePayload, PublicKey ownerPubKey, int sequenceNumber, byte[] signature) {
|
public ProtectedStorageEntry(StoragePayload storagePayload, PublicKey ownerPubKey, int sequenceNumber, byte[] signature) {
|
||||||
this.storagePayload = storagePayload;
|
this.storagePayload = storagePayload;
|
||||||
this.ownerPubKey = ownerPubKey;
|
this.ownerPubKey = ownerPubKey;
|
||||||
this.sequenceNumber = sequenceNumber;
|
this.sequenceNumber = sequenceNumber;
|
||||||
this.signature = signature;
|
this.signature = signature;
|
||||||
this.timeStamp = System.currentTimeMillis();
|
this.creationTimeStamp = System.currentTimeMillis();
|
||||||
this.ownerPubKeyBytes = new X509EncodedKeySpec(this.ownerPubKey.getEncoded()).getEncoded();
|
this.ownerPubKeyBytes = new X509EncodedKeySpec(this.ownerPubKey.getEncoded()).getEncoded();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -41,7 +41,7 @@ public class ProtectedStorageEntry implements Payload {
|
||||||
try {
|
try {
|
||||||
in.defaultReadObject();
|
in.defaultReadObject();
|
||||||
ownerPubKey = KeyFactory.getInstance(Sig.KEY_ALGO, "BC").generatePublic(new X509EncodedKeySpec(ownerPubKeyBytes));
|
ownerPubKey = KeyFactory.getInstance(Sig.KEY_ALGO, "BC").generatePublic(new X509EncodedKeySpec(ownerPubKeyBytes));
|
||||||
updateTimeStamp();
|
checkCreationTimeStamp();
|
||||||
} catch (Throwable t) {
|
} catch (Throwable t) {
|
||||||
log.warn("Exception at readObject: " + t.getMessage());
|
log.warn("Exception at readObject: " + t.getMessage());
|
||||||
}
|
}
|
||||||
|
@ -51,8 +51,16 @@ public class ProtectedStorageEntry implements Payload {
|
||||||
return storagePayload;
|
return storagePayload;
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateTimeStamp() {
|
public void checkCreationTimeStamp() {
|
||||||
timeStamp = System.currentTimeMillis();
|
// We don't allow creation date in the future, but we cannot be too strict as clocks are not synced
|
||||||
|
// The 0 test is needed to be backward compatible as creationTimeStamp (timeStamp) was transient before 0.4.7
|
||||||
|
// TODO "|| creationTimeStamp == 0" can removed after we don't support 0.4.6 anymore
|
||||||
|
if (creationTimeStamp > System.currentTimeMillis() || creationTimeStamp == 0)
|
||||||
|
creationTimeStamp = System.currentTimeMillis();
|
||||||
|
}
|
||||||
|
|
||||||
|
public void refreshTTL() {
|
||||||
|
creationTimeStamp = System.currentTimeMillis();
|
||||||
}
|
}
|
||||||
|
|
||||||
public void updateSequenceNumber(int sequenceNumber) {
|
public void updateSequenceNumber(int sequenceNumber) {
|
||||||
|
@ -64,14 +72,14 @@ public class ProtectedStorageEntry implements Payload {
|
||||||
}
|
}
|
||||||
|
|
||||||
public boolean isExpired() {
|
public boolean isExpired() {
|
||||||
return (System.currentTimeMillis() - timeStamp) > storagePayload.getTTL();
|
return (System.currentTimeMillis() - creationTimeStamp) > storagePayload.getTTL();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String toString() {
|
public String toString() {
|
||||||
return "ProtectedStorageEntry{" +
|
return "ProtectedStorageEntry{" +
|
||||||
"expirablePayload=" + storagePayload +
|
"expirablePayload=" + storagePayload +
|
||||||
", timeStamp=" + timeStamp +
|
", creationTimeStamp=" + creationTimeStamp +
|
||||||
", sequenceNumber=" + sequenceNumber +
|
", sequenceNumber=" + sequenceNumber +
|
||||||
", ownerPubKey.hashCode()=" + (ownerPubKey != null ? ownerPubKey.hashCode() : "null") +
|
", ownerPubKey.hashCode()=" + (ownerPubKey != null ? ownerPubKey.hashCode() : "null") +
|
||||||
", signature.hashCode()=" + (signature != null ? Arrays.toString(signature).hashCode() : "null") +
|
", signature.hashCode()=" + (signature != null ? Arrays.toString(signature).hashCode() : "null") +
|
||||||
|
|
|
@ -113,7 +113,7 @@ public class ProtectedDataStorageTest {
|
||||||
public void testTTL() throws InterruptedException, NoSuchAlgorithmException, CertificateException, KeyStoreException, IOException, CryptoException, SignatureException, InvalidKeyException, NoSuchProviderException {
|
public void testTTL() throws InterruptedException, NoSuchAlgorithmException, CertificateException, KeyStoreException, IOException, CryptoException, SignatureException, InvalidKeyException, NoSuchProviderException {
|
||||||
mockData.ttl = (int) (P2PDataStorage.CHECK_TTL_INTERVAL_SEC * 1.5);
|
mockData.ttl = (int) (P2PDataStorage.CHECK_TTL_INTERVAL_SEC * 1.5);
|
||||||
ProtectedStorageEntry data = dataStorage1.getProtectedData(mockData, storageSignatureKeyPair1);
|
ProtectedStorageEntry data = dataStorage1.getProtectedData(mockData, storageSignatureKeyPair1);
|
||||||
log.debug("data.date " + data.timeStamp);
|
log.debug("data.date " + data.creationTimeStamp);
|
||||||
Assert.assertTrue(dataStorage1.add(data, null, null, true));
|
Assert.assertTrue(dataStorage1.add(data, null, null, true));
|
||||||
log.debug("test 1");
|
log.debug("test 1");
|
||||||
Assert.assertEquals(1, dataStorage1.getMap().size());
|
Assert.assertEquals(1, dataStorage1.getMap().size());
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue