All notable changes to this project will be documented in this file.
Findex v6 implements new look following the work on the Findex formalization with @chloehebant.
In order to ease the reading, fix some vocabulary first:
- Encrypted Dictionary (EDX): a key value store which values are of constant size;
- Encrypted Multi-Map (EMM): a key value store which values are of variable size;
- Encrypted Graph (EGX): an encrypted graph which nodes contain data and pointers to other nodes;
- Encrypted Dictionary Scheme (DX-Enc): a scheme managing an EDX;
- Encrypted Multi-Map Scheme (MM-Enc): a scheme managing an EMM;
- Encrypted Graph Scheme (GX-Enc): a scheme managing an EGX;
- tag: bytes (may be a meaningful piece of information) used to point to a value in an map (H(w) in the Entry Table)
- token: non-meaningful bytes used to index a value in a map (it corresponds to the UIDs)
Findex (as the product) is now composed of three algorithms:
- Findex: an index interface to hide the cryptographic details of Findex Graph;
- Findex Graph: a GX-Enc scheme using a MM-Enc scheme;
- Findex Multi-Map: a MM-Enc scheme using two DX-Enc schemes.
Two generic DX-Enc schemes are used by Findex Multi-Map:
- Entry Table: an EDX scheme in charge of storing metadata about the chains: counter, key seed (Kwi), corresponding tag (H(w_i));
- Chain Table: an EMM used to store the actual chain data; it's implementation is actually done using an EDX.
HAS BEEN DONE:
- decide which constant to fix and which constant to use as generic (e.g.
BLOCK_LENGTH
/LINE_LENGTH
) - add compact operation
- pass all old tests
- pass regression tests on database:
- add regression tests inside the repo (serialize in-memory database)
- change counter back to the hash chain
- make findex types
Sync + Send
- add encryption scheme to manage encryption
- update CryptoCore version
- add
progress
callback (injection) - add CATS compatibility
- Relax
async_trait
requirements
- Support
crypto_core
v9.2.0
- Remove the need of nightly toolchain (use
never
andasync-trait
crates)
- Update crypto_core to 9.1.0
- Changed the Search, Upsert and Compact API from mutable to immutable
- Upsert now returns the set of new keywords added to the Entry Table
- add missing
async
keyword for compact callbacks - fix
list_removed_locations
doc
- Use crypto_core v9.0
- Update crypto_core to 8
- Impl Display trait on structs used in callbacks for logging
- Race condition in
fetch_chains()
- deletions in upsert
- format of the Chain Table (block length is now 16)
- take ownership of the data in callbacks
- allow multiple ET values in search
- add live compact functionality
- add macro to implement Findex traits
- [breaking] Move all interfaces (FFI, Wasm, pyo3) to
cloudproof_rust
repository - use Kmac256 instead of Kmac128
- remove inline macros
- Change number encoding in non regression vectors
- Update wasm type of progress callback
- Update
ProgressResult
serialization in ffi
- Change
progress_callback
to returnNextKeyword
andsearch
to return onlyLocation
- Add
progress_callback
tests
- Add
fetch_chains_batch_size
argument to search - in
search
,fetch_chains
calls are now run in parallel for batches offetch_chains_batch_size
(not working for the Java/Flutter interfaces for now) - Improve errors
- Replace .gitlab-ci.yml with github actions
- Test inter-languages compatibility
- FFI: fix serialization of returned values in
fetch_entry
- compact: replace fetch_entry loop with call to
fetch_entry_table_uids
- Add return type to FindexInternal function signature
- Update findex cryptographic documentation
- Only implement the callbacks required by the desired features (upsert, search, compact)
- Improve callback error message
- Release findex v1.0
- Add .gitlab-ci.yml