Commit Graph

79 Commits

Author SHA1 Message Date
Julien Cretin f6e9e00b87 Add linear view into a storage (#571) 2022-12-07 13:00:41 +01:00
Julien Cretin e52adf04c7 Add support for concatenated values 2022-08-19 12:47:29 +02:00
Egor Duda cc1fb2543e Accommodate Store requirements for max_word_writes and max_page_erases 2022-06-07 17:04:18 +03:00
Egor Duda 0158cc846d Use 0xff for consistency 2022-06-07 15:58:08 +03:00
Egor Duda 2708074949 Improve variable names and comments readability 2022-06-06 15:08:42 +03:00
Egor Duda 660b6b76b2 Make FileOptions available to library's users 2022-06-06 15:06:29 +03:00
Egor Duda 4e47968233 Separate options type for FileStorage, remove hardcoded constants 2022-06-05 22:40:59 +03:00
Egor Duda c0299c3225 No need for specific feature, use std instead 2022-06-05 22:40:32 +03:00
Egor Duda f2cb2f72e7 Use StorageError::CustomError for implementations-specific (I/O) errors 2022-06-05 22:39:13 +03:00
Egor Duda 1cf7373bfe With new Storage API there's no need to double-buffer file data
read_slice(...) can return Cow::Owned buffer to the caller
2022-06-05 15:16:49 +03:00
Egor Duda db26f6125b Implement file-backed persistent storage
This allows running ctap2 authenticator application on non-embedded host OS
to implement virtual FIDO2 authenticator for QEMU
2022-06-05 15:08:52 +03:00
Julien Cretin 0f368f0b48 Add justification for Cow usage 2022-06-03 17:03:06 +02:00
Julien Cretin f57126634b Allow read_slice to return a Vec 2022-06-03 11:16:43 +02:00
Julien Cretin dc00b94ee8 Remove steal_storage 2022-03-07 19:43:58 +01:00
Julien Cretin af3bee64a5 Introduce window size to fix hidden entries 2021-10-04 12:24:15 +02:00
Julien Cretin 9dc5286633 Revert "Continue compacting until content fits window during compaction"
This reverts commit 67fa8bee0b.
2021-10-04 12:24:15 +02:00
Julien Cretin daa16d948f Add test 2021-10-04 12:24:15 +02:00
Julien Cretin 67fa8bee0b Continue compacting until content fits window during compaction
Also increase the virtual window size.
2021-09-27 13:59:29 +02:00
Julien Cretin a3965eac2d Also debug the model besides the storage 2021-09-27 13:59:29 +02:00
Julien Cretin fbca34b1d1 Add test 2021-09-27 13:59:29 +02:00
Julien Cretin b3b652aa53 Stop using try_trait
It is too much instable.
2021-06-09 13:51:04 +02:00
Julien Cretin e32eb5358f Merge branch 'develop' into usize_32_or_std 2021-04-26 13:12:55 +02:00
Julien Cretin 6cb6538db6 Fix typography 2021-03-15 12:10:13 +01:00
Julien Cretin 3c7c5a4810 Update the documentation to use linking by name
See https://doc.rust-lang.org/stable/rustdoc/linking-to-items-by-name.html
2021-03-13 13:16:57 +01:00
kaczmarczyck 18f391d48f Merge branch 'develop' into large-blobs 2021-01-25 19:27:45 +01:00
Fabian Kaczmarczyck 4f3c773b15 formats code, clippy 2021-01-25 18:17:14 +01:00
Julien Cretin ae0156d287 Factor test tools between store and fragment
Those need the driver to deal with the fact that the store is stateful. Those
tests can't be moved to the test suite because they use private functions.
2021-01-25 17:30:50 +01:00
Julien Cretin 41a3f512c8 Remove useless check 2021-01-25 11:31:42 +01:00
Julien Cretin f0c51950cb Add fragmentation support 2021-01-23 21:27:59 +01:00
Julien Cretin 8634e2ec24 Make StoreUpdate generic over the byte slice ownership
This permits to call it without having to create a Vec<u8> when possible.
2021-01-20 15:56:06 +01:00
Julien Cretin a712d1476b Return error instead of debug assert
With dirty storage we hit the assert. Returning an error permits to continue to
catch if the invariant is broken for normal operation while being able to
continue fuzzing with dirty storage.
2021-01-18 16:41:03 +01:00
Julien Cretin 55038cc084 Add bound-test in addition to equality-test 2021-01-18 16:13:01 +01:00
Julien Cretin 1d576fdd31 Add unit-test for Store::entries 2020-12-14 21:06:12 +01:00
Julien Cretin edcc206e9d Make store operations constant wrt flash operations 2020-12-10 18:41:32 +01:00
Julien Cretin 8800c3e906 Merge branch 'master' into no_ram_storage 2020-12-10 15:48:45 +01:00
Julien Cretin 19ebacec15 Do not use delay_map anymore
This permits to avoid copies. Before we used to do one copy per storage
operation. Now we do one copy per store operation.
2020-12-10 13:36:33 +01:00
Julien Cretin 4253854cf1 Remove ram_storage feature
We don't need to build a production key without persistent storage. Tests and
fuzzing continue to use the std feature to use the RAM implementation (that does
sanity checks).
2020-12-10 13:06:05 +01:00
Julien Cretin f548a35f01 Do not crash with dirty init 2020-11-30 10:29:18 +01:00
Julien Cretin 29ee45de6c Do not crash in the driver for store errors
We prefer to return those errors to the fuzzer which can then decide whether
they are expected or not (e.g. when starting from a dirty storage, the store is
expected to have errors).
2020-11-24 11:31:54 +01:00
Julien Cretin d23acb4f64 Make sure production store only builds with usize=u32 2020-11-20 15:55:56 +01:00
Julien Cretin d5a43c346f Rename into_ into extract_ 2020-11-11 10:28:32 +01:00
Julien Cretin 0e4be8ca4a Update documentation 2020-11-10 19:44:28 +01:00
Julien Cretin 45332158df Add driver for new store 2020-11-03 21:27:32 +01:00
Julien Cretin a024e642d3 Return zero instead of negative immediate capacity 2020-11-03 13:30:39 +01:00
Julien Cretin 410314b780 Move transaction validity check to Format 2020-11-03 12:54:30 +01:00
Julien Cretin d734da3a0e Move transaction capacity formula to Format 2020-11-03 12:39:38 +01:00
Julien Cretin b97758dd99 Do not use import ::* 2020-11-03 11:58:20 +01:00
Julien Cretin 233c15b20c Add new store (without tests yet) 2020-11-02 11:17:09 +01:00
Julien Cretin 9778ea7fd2 Introduce distinct integer types
This PR does the following things:
- Give incompatible representations for integers with different semantics:
  - `usize` is used for natural numbers for the public API.
  - `Nat` is used internally for natural numbers (essentially a stable `usize`).
  - `Word` is used for sequences of bits representing words in flash.
  - `Position` is used for word positions in the virtual storage.
- Only use fixed size integers to preserve overflow behavior between targets.
- Use little-endian representation instead of native representation for `Word`.

Alternatives:
- Run tests and fuzzing on 32-bits architecture (or some compatibility mode).
  This approach would have better readability than the current solution (less
  conversions at public API). However it would require additional setup and
  might not be viable long-term by restricting machines on which fuzzing is
  possible.
- Accept the behavior difference for tests and fuzzing. This approach would also
  have better readability. However checking for arithmetic overflow (and other
  `usize` related concerns like memory size) is more important.
2020-10-29 18:48:15 +01:00
Julien Cretin 5ce91947b6 Fix StoreRatio fields visibility and improve documentation 2020-10-29 12:23:34 +01:00