Commit Graph

75 Commits

Author SHA1 Message Date
Andreas Fackler b3b3994ec1
Merge pull request #82 from poanetwork/vk-test-decryption-shares
An adversary sending faulty decryption shares
2018-06-26 09:06:33 +02:00
Vladimir Komendantskiy 1c9ca201d5 corrected a comment and removed a redundant mut 2018-06-25 21:18:25 +01:00
Vladimir Komendantskiy 11ec39879b created an adversary to test against faulty decryption shares 2018-06-25 19:22:08 +01:00
Andreas Fackler 062b35ab3a Make SyncKeyGen NodeUid-aware.
This allows the caller to address nodes by ID instead of by index.

Also contains a few other minor changes that will be needed for
`DynamicHoneyBadger`.
2018-06-25 13:07:31 +02:00
Vladimir Komendantskiy af03158e00 tries to decrypt and output a batch on epoch update from already received messages 2018-06-22 10:12:38 +01:00
Andreas Fackler e11f183db2 Remove generic E: Engine from crypto. 2018-06-22 10:08:23 +02:00
Andreas Fackler 7eb487f329 Implement SyncKeyGen.
This is a _synchronous_ key generation algorithm. We will use it in
`DynamicHoneyBadger`, on top of `HoneyBadger` to satisfy the synchrony
requirements.

It can also be used independently e.g. on top of a blockchain.
2018-06-22 10:06:29 +02:00
Andreas Fackler 3f707a8e12 Return proposer info from HoneyBadger.
Also, consistently name generic arguments, and remove some unused trait
bounds.
2018-06-18 16:19:54 +02:00
Vladimir Komendantskiy f2a03f8f04 corrected the agreement test proposer ID 2018-06-14 13:45:58 +01:00
Vladimir Komendantskiy 82b4250f0d added the broadcast proposer ID in the common coin nonce 2018-06-14 13:36:48 +01:00
Vladimir Komendantskiy 3393052b4b review comment coverage 2018-06-14 12:28:38 +01:00
Vladimir Komendantskiy b82ac64148 note in the broadcast example about the use of keys 2018-06-13 18:24:35 +01:00
Vladimir Komendantskiy 4dbef3968d fixed early update of Agreement epoch 2018-06-13 15:18:27 +01:00
Vladimir Komendantskiy d5794cb5fe extended the common coin nonce with a global UID and the top-level epoch 2018-06-13 15:18:27 +01:00
Vladimir Komendantskiy e116c6c171 added tests for the common coin 2018-06-13 15:17:11 +01:00
Vladimir Komendantskiy 122f1fc6f1 updated the tests with key initialisation 2018-06-13 15:15:41 +01:00
Vladimir Komendantskiy 98f5304d4c top-level interface now requires providing a NetworkInfo parameter 2018-05-29 14:53:01 +01:00
Vladimir Komendantskiy 938d2f5c16 added a note about the use of NetworkInfo in tests 2018-05-29 14:53:01 +01:00
Vladimir Komendantskiy d09f3e26b4 introduced common shared network information 2018-05-29 14:53:01 +01:00
Andreas Fackler 9a0622f3f2 Update Rust, re-enable rustfmt. 2018-05-21 11:26:42 +02:00
Andreas Fackler ab89dabde9 Add a few explaining comments. 2018-05-19 17:10:30 +02:00
Andreas Fackler b8a2463d1c Extend tests and fix CommonSubset.
Verify termination and more outputs.

`CommonSubset` now instantiates `Agreement` with the correct ID.
2018-05-19 15:56:49 +02:00
Vladimir Komendantskiy 962a618ffd ported Common Subset tests to TestNetwork 2018-05-18 22:04:09 +01:00
Andreas Fackler d5f9c4d40d Fix Agreement and re-enable HoneyBadger test. 2018-05-17 17:38:45 +02:00
Andreas Fackler 500ec81b2f Add a network simulation example. 2018-05-17 12:52:07 +02:00
Vladimir Komendantskiy ca49f4041b fixed the outdated code in Agreement test 2018-05-17 11:27:31 +01:00
Vladimir Komendantskiy c8c8e1bb1f added a latch for the decided value in Agreement to remember the output value 2018-05-17 10:43:56 +01:00
Andreas Fackler 4164af1702 Generalize TestNetwork and test HoneyBadger. 2018-05-16 16:21:30 +02:00
Vladimir Komendantskiy 21b898d8e0 dispatch targeted messages in the Common Subset message handling routine 2018-05-16 11:21:53 +01:00
Vladimir Komendantskiy 5f916c4d08 formatting and lint check 2018-05-15 22:25:41 +01:00
Vladimir Komendantskiy c8034da332 corrected the CommonSubset module and test to decide on a map of values insetead of a set 2018-05-15 18:18:05 +01:00
Vladimir Komendantskiy eadd233fe4 added the Common Subset test module 2018-05-15 15:44:47 +01:00
Andreas Fackler b8c534da2b Rename has_output to decided, add output iterator. 2018-05-15 16:05:55 +02:00
Andreas Fackler 3895949cf6 Fix broadcast for size < 4, and test more network sizes. 2018-05-15 15:53:37 +02:00
Andreas Fackler 5528fc2de8 Define a common DistAlgorithm trait.
This will allow us to deduplicate network simulations in tests for the
different algorithms. More generally, it facilitates writing general
tools and applying them to all distributed algorithms.
2018-05-15 15:48:43 +02:00
Vladimir Komendantskiy c1a03c28d1 updated comment and fn name 2018-05-14 12:36:00 +01:00
Vladimir Komendantskiy 50ba18b0dd reduced the set of proposers to 1 2018-05-14 12:36:00 +01:00
Vladimir Komendantskiy 9043b1102f formatting 2018-05-14 12:35:28 +01:00
Vladimir Komendantskiy 8091b6cc1d corrected the test message handling loop termination condition 2018-05-14 12:35:28 +01:00
Vladimir Komendantskiy a20ee74254 added a test for Binary Agreement with 4 proposers 2018-05-14 12:35:28 +01:00
Andreas Fackler 71fa32c18f Remove interior mutability.
The `RwLock` is not needed anymore, since the broadcast implementation
doesn't handle any threading internally.
2018-05-14 09:35:34 +02:00
Andreas Fackler 38cdd596a2 Start implementing the top-level Honey Badger algorithm.
This also contains a few fixes for the `common_subset` module:
* Rename `common_subset::Output` to `Message` to avoid confusing it
  with the value that the algorithm outputs as a result.
* Implement dispatch of messages to the right instance within
  `CommonSubset`, in a way that is transparent to the user.
2018-05-12 16:09:07 +02:00
Andreas Fackler 36183b1e27 Simplify the message types. 2018-05-10 17:52:12 +02:00
Andreas Fackler b98bbe9dcd Fix broadcast and example, enable more tests.
This fixes several issues with the broadcast algorithm and enables the
previously ignored tests that now pass:
* Don't decide on a root hash based on anyone's `Echo` message.
* Work around the `merkle` crate's inability to produce the proof of the
  `i`-th leaf for a given index `i`.
* Ignore messages from unknown nodes.
* Avoid decoding multiple times.
* Document the full algorithm.
* Don't count multiple `Echo` or `Ready` messages coming from the same
  node.
* Fix index computation for a given proof.
* Move `BroadcastMessage` into `broadcast` to make the module more
  self-contained.

The example now only executes a single broadcast instance, expecting the
first node (the one with the lexicographically lowest address) to
propose a value. A shell script is added that runs for example nodes.

Use env_logger instead of simple_logger, so the log level can be controlled
with an environment variable. You can e.g. log all output from the broadcast
test and the crate itself in debug mode with:
RUST_LOG=hbbft=debug,broadcast=debug

Some debugging messages are more concise now and use hexadecimal
notation instead of printing arrays of decimal values.

An indentation error in the Travis script is also fixed.
2018-05-08 17:04:38 +02:00
Andreas Fackler eec3102cbf Move node to examples, deduplicate code. 2018-05-05 17:54:29 +02:00
Andreas Fackler e2cd4ca1b7 added (ignored) regression tests for some of the broadcast issues 2018-05-04 11:14:19 +02:00
Andreas Fackler 8bced81438 removed some unnecessary cloning
This also adds a few TODOs to the broadcast implementation: Some of
these issues need a regression test. (Oh, and a fix!)
2018-05-04 09:58:21 +02:00
Andreas Fackler babbd2f36a fixed broadcast failure with malicious value proposal 2018-05-03 11:07:37 +03:00
Andreas Fackler 0f3377c8e9 made broadcast handle its own echo and value messages 2018-05-03 08:47:31 +03:00
Andreas Fackler 7096251b91 extended tests, make broadcast output only once 2018-05-02 16:34:54 +03:00