Sebastian Messmer
|
eab7cb1df4
|
Implement BlockStore::overwrite(). This is the last step in ensuring that the write() call doen't have to load leaves if they're only overwritten anyhow.
|
2016-07-16 11:42:06 +02:00 |
|
Sebastian Messmer
|
6fc62a58fa
|
Removed unneeded include
|
2016-07-15 12:51:29 +02:00 |
|
Sebastian Messmer
|
d626349802
|
Finish MockBlockStore to also collect other performance metrics, and implement the standard block store tests for it.
|
2016-07-15 10:23:09 +02:00 |
|
Sebastian Messmer
|
9e9369b9ed
|
Performance optimization: When removing or shrinking a tree, we don't load/read leaves anymore. Loading inner nodes is enough to get all block IDs and then we can delete the leaves from their IDs without loading them.
|
2016-07-13 11:27:31 +02:00 |
|
Sebastian Messmer
|
2bc3b641aa
|
Allow Data::FillWithZeroes on rvalue
|
2016-07-10 22:43:07 +02:00 |
|
Sebastian Messmer
|
514dbcb6c7
|
ClientId is not loaded/generated inside of KnownBlockVersions, but in CryDevice. This way, CryDevice also has access to the ClientID. This is later needed to recognize whether we're in a single-client or in a multi-client setting.
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
f066b45954
|
VersionCountingBlockStore::forEachBlock() has an integrity check checking that all expected blocks are still existing.
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
491b277cee
|
In case of an integrity violation, tell the user how they can reset integrity data.
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
839a511c4d
|
When an integrity violation is detected, any further access to the file system is blocked. This ensures that the user notices the integrity violation.
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
2284571127
|
Add test cases to KnownBlockVersionsTest
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
c84a230afd
|
VersionCountingBlockStore is initialized with a flag, saying whether missing blocks are integrity errors. This flag is meant to be activated in a single-client scenario to have this additional integrity check.
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
e02021ecdc
|
Throw an IntegrityViolationError exception instead of just logging integrity violations. This makes sure the user notices.
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
32001d0af3
|
Write another integrity test case
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
473e9cc8bb
|
Fix compiler errors
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
1a72d3c226
|
Deleting a block doesn't set the version number to MAX_UINT64, but just increases it by one. This makes sure, that if (in case of a synchronization conflict) the block is reintroduced by another client, this is accepted.
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
5534b56ce3
|
When increasing the version number, don't only look at the version number in the block, but also at the last version number given to it by the current client. Ensure, the new version number is higher than both.
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
577c697856
|
When a client deletes a block, it will never again accept it as a valid block.
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
4d1f7a46b9
|
* Prevent rollback to the "newest" version of a client when this version was superseded by a version from a different client.
* Use mutex/locks to secure access to KnownBlockVersions
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
ea3de7360c
|
* Block versions don't have to be globally nondecreasing, but only per client id. This solves potential synchronization conflicts in a multi-client setting.
* Use cpputils::Serializer and cpputils::Deserializer instead of std::ifstream for storing/loading the block version list
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
13411c4e59
|
Integrity data from KnownBlockVersions is persisted to a file
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
d7f547dd47
|
Implement a VersionCountingBlockStore that checks that version numbers are nondecreasing. Currently, the block store is not used yet and the state is not stored over different runs of CryFS. This comes with future commits.
|
2016-06-26 22:15:52 -07:00 |
|
Sebastian Messmer
|
9ed7bd0b41
|
Ciphertext blocks are split into subdirectories (before, all were on top level) to reduce number of files per directory. Some unix tools don't work well with directories with too many entries.
|
2016-04-29 12:21:02 -07:00 |
|
Sebastian Messmer
|
037b59634e
|
Implemented BlockStore::blockSizeFromPhysicalBlockSize. This will be used to let the user configure physical block size instead of virtual block size.
|
2016-03-16 18:56:06 +00:00 |
|
Sebastian Messmer
|
63d0b2b29d
|
Fix compiling test cases on Debian
|
2016-02-14 18:17:37 +01:00 |
|
Sebastian Messmer
|
636445cd82
|
Introduce version flags for file system entities to allow future CryFS versions to be backwards-compatible even if the format changes.
|
2016-02-13 15:06:28 +01:00 |
|
Sebastian Messmer
|
31672e086c
|
Fix includes after merging repositories
|
2016-02-11 15:19:58 +01:00 |
|
Sebastian Messmer
|
f3d614c633
|
Merged blockstore
|
2016-02-11 14:44:28 +01:00 |
|