Commit Graph

489 Commits

Author SHA1 Message Date
c0gent ac39de66a8 Make refinements to SyncKeyGen error and fault handling. 2018-08-09 15:44:36 -04:00
DrPeterVanNostrand 8ab58d35d4 Added error handling for mlock errors in threshold_crypto crate. 2018-08-09 15:44:36 -04:00
Andreas Fackler 8cc60698db Move matches from EpochState to SubsetState. 2018-08-09 16:04:09 +02:00
Andreas Fackler e9b960d020 Fix and clean up the HoneyBadger impl.
* Remove unnecessary recursive method calls.
* Add `handle_message` (without the trait).
* Fix a bug where `handle_message_content` would create an `EpochState`
  with the wrong number.
2018-08-09 16:04:09 +02:00
Andreas Fackler 5cc7b54c06 Split up the broadcast module.
Also, rename broadcast and agreement messages to just `Message`.
2018-08-08 15:46:43 +02:00
Andreas Fackler b017311e49 Split out individual epochs from Honey Badger. 2018-08-06 10:50:30 -07:00
Andreas Fackler 46a8728792 Split out Threshold Decryption from Honey Badger. 2018-08-06 10:50:30 -07:00
c0gent 697ba6f0a8
Add common supertraits and rename related type parameters.
* Add the `Contribution`, `NodeUidT`, and `Message` supertraits.
* Rename type parameters:
  * `Tx` -> `T` or `C`
  * `NodeUid` -> `N`
2018-08-02 14:52:12 -07:00
c0gent f66dbdf3a1
Reorganize `dynamic_honey_badger` and `agreement` modules slightly.
* Move `CoinState` and `Agreement` definitions from `agreement/mod.rs`
  to `.../agreement.rs`.
* Move `DynamicHoneyBadger` definition from `dynamic_honey_badger/mod.rs`
  to `.../dynamic_honey_badger.rs`.
2018-08-02 13:01:57 -07:00
Andreas Fackler dd31758bdf Extract SBV broadcast from agreement. 2018-08-02 12:55:17 +02:00
Andreas Fackler 572fa7b028
Merge pull request #180 from c0gent/c0gent-crypto-pub
Re-export `crypto`.
2018-08-01 19:18:48 +02:00
c0gent affa0eee37
Re-export `crypto`. 2018-08-01 09:56:36 -07:00
Andreas Fackler d19afc2634 Change the QHB criterion for moving on to the next epoch.
`QueueingHoneyBadger` now waits after an output, and only makes its
proposal for the next epoch when:

* there are pending transactions in the queue,
* there are pending key generation or vote messages, or
* _f + 1_ other validators have already made their proposal.

This rule should work well for small networks: With 1 - 3 nodes, it will
produce a new batch whenever at least one of them has transactions to
contribute. In larger networks, it prevents an adversary controlling _f_
nodes from producing lots of empty epochs.

An exception is made for a currently joining validator: We will commit
up to _(N + 1)² + 1_ key generation messages for them, which is the
maximum number a correct node will send.
2018-08-01 18:52:32 +02:00
Andreas Fackler 5591f5ebd0 Split honey_badger into submodules. 2018-08-01 09:56:18 +02:00
Andreas Fackler 7c66ef06ee
Merge pull request #172 from poanetwork/vk-crypto-crate
crypto module moved into its own crate
2018-07-31 22:26:19 +02:00
Vladimir Komendantskiy 062b7150e1
Merge pull request #173 from poanetwork/afck-hb-clear-cs
Fix removal of terminated CS instances in HB.
2018-07-31 15:15:54 +01:00
Vladimir Komendantskiy 6753c12b7c formatting 2018-07-31 12:15:05 +01:00
Vladimir Komendantskiy 77ed1d50d4 separated crypto module into its own crate 2018-07-31 12:15:05 +01:00
Andreas Fackler 47c00016be Remove protobuf support. 2018-07-31 11:58:44 +02:00
Andreas Fackler c448e057f8 Rename BinValues to BoolSet. 2018-07-31 09:42:30 +02:00
Andreas Fackler 4159acf8cd Represent BinValues as a u8. 2018-07-31 09:39:51 +02:00
c0gent 847a79793e
Replace `chain_error` with `failure`
Changes:

* Remove `error_chain` and convert errors to `failure` types.
* Add variants for each possible error generation point.
2018-07-30 15:14:19 -07:00
Andreas Fackler 8346085fb9 Fix removal of terminated CS instances in HB. 2018-07-30 15:02:20 +02:00
Andreas Fackler 78ab9742a9 Avoid heap allocation in BinValues::into_iter. 2018-07-30 13:08:17 +02:00
Andreas Fackler 8beab3d2b4 Log duplicate agreement messages as faults. 2018-07-30 12:04:28 +02:00
Andreas Fackler 3b65f0cead Fix agreement bugs, and refactor a few fields.
* Don't drop `Term` messages from previous epochs. They are still
  relevant for all future epochs.
* Restructure some fields to avoid unnecessary iteration and counting.
* Simplify the fields related to the common coin.
* Reorder the methods, so that the message handlers are all in one
  place.
* Handle the case where the coin value arrives before the required
  number of `Conf` messages.
2018-07-30 11:44:55 +02:00
Vladimir Komendantskiy 6efe6037f2 removed duplicated insertion 2018-07-27 08:24:19 +01:00
Vladimir Komendantskiy 638cde3d71 avoid cloning of Agreement::received_term 2018-07-26 17:55:21 +01:00
Andreas Fackler 08d6abf6b4 Make sure Term messages are handled as BVal, Aux, Conf. 2018-07-26 14:19:01 +02:00
Vladimir Komendantskiy 35edde9007
Merge pull request #167 from poanetwork/afck-queue-fields
Fix bin_values change handling in agreement.
2018-07-26 09:30:03 +01:00
Andreas Fackler cc28f8ecfe
Merge pull request #162 from poanetwork/vk-broadcast-example
Updated the Broadcast doc example to the latest API
2018-07-26 10:17:56 +02:00
Andreas Fackler 4bff2849f9 Fix bin_values change handling in agreement.
* Call `on_bin_values_changed` even if there is only one value.
* Handle the case _f = 0_ correctly: `count_bval` can be equal to both
  _f + 1_ and _2 f + 1_.
2018-07-26 09:34:34 +02:00
Andreas Fackler 27898168e2
Merge pull request #163 from poanetwork/afck-queue-fields
Remove queue fields from Agreement, CommonCoin, Broadcast and CommonSubset.
2018-07-26 08:43:07 +02:00
Andreas Fackler 8d449eceb5
Merge pull request #159 from poanetwork/afck-into-fr
Accept more types in threshold crypto API.
2018-07-26 08:31:54 +02:00
Vladimir Komendantskiy fc074d50e5 removed expect and unnecessary message cloning, added comments 2018-07-25 16:53:15 +01:00
Andreas Fackler 72ff36f2b9 Fix data shard count in Broadcast. 2018-07-25 10:46:39 +02:00
Andreas Fackler 2b904e3490 Make sure QHB always inputs a new batch after output. 2018-07-24 14:46:48 +02:00
Andreas Fackler 9d0f1b3d15 Remove output and message queue from CommonSubset. 2018-07-24 13:12:06 +02:00
Andreas Fackler 990899327e Remove output and message queue from Broadcast. 2018-07-24 12:18:09 +02:00
Vladimir Komendantskiy 883201a9b9 checking the output immediately rather than at the end 2018-07-24 11:09:15 +01:00
Andreas Fackler 30c5805446 Remove output and message queue from CommonCoin. 2018-07-24 11:57:50 +02:00
Andreas Fackler 102fa0e01d Remove output and message queue from Agreement. 2018-07-24 11:43:35 +02:00
Vladimir Komendantskiy aefb812f2a updated the Broadcast doc example to the latest API 2018-07-24 09:51:13 +01:00
Andreas Fackler b89ad6bb5d Rename: try_output_batches. Add CS multi output error. 2018-07-23 21:36:09 +02:00
Andreas Fackler 4327744976 Remove output and message queue from HoneyBadger. 2018-07-23 18:11:45 +02:00
Andreas Fackler 32e1afc24a Add more arithmetic ops to Poly. 2018-07-23 15:56:45 +02:00
Andreas Fackler 984bb49fdc Accept more types in threshold crypto API.
This removes some unnecessary allocation and conversion by accepting
more primitive types and references as the index in threshold decryption
and signing, and as the argument to a polynomial.
2018-07-23 15:56:45 +02:00
Andreas Fackler 9d43e8df59
Merge pull request #150 from poanetwork/vk-api-messages66
Outgoing message API refactoring
2018-07-23 15:43:25 +02:00
Andreas Fackler 432c865d4b Handle initial QHB messages, fix DHB. 2018-07-21 11:30:43 +02:00
Andreas Fackler e14eb5006a Clarify synchrony requirements in SyncKeyGen. 2018-07-20 18:43:28 +02:00
Vladimir Komendantskiy a9346fa2a1 removed an accidental unused import from a merge conflict 2018-07-20 12:58:07 +01:00
Vladimir Komendantskiy bc245f2e67 added a Step for each module 2018-07-20 12:51:06 +01:00
Vladimir Komendantskiy 099fbc999e made Step depend on DistAlgorithm instead of base types 2018-07-20 12:47:19 +01:00
Vladimir Komendantskiy 17339c322c added a typedef for the Queueing HB propose result 2018-07-20 12:44:41 +01:00
Vladimir Komendantskiy ccd1a98c42 optimized function arguments and added a typedef for Simulation Step 2018-07-20 12:44:41 +01:00
Vladimir Komendantskiy 65b3097238 message queue refactoring WIP 2018-07-20 12:43:15 +01:00
Andreas Fackler d787173dd8 Rename DKG messages to Part and Ack. 2018-07-19 12:28:15 +02:00
Andreas Fackler 9159b42150 Add SyncKeyGen::into_network_info. 2018-07-19 12:18:01 +02:00
Andreas Fackler c179ad1e18 Extend sync_key_gen documentation. 2018-07-19 11:32:32 +02:00
Andreas Fackler 7820d5572a
Merge pull request #146 from poanetwork/afck-key-shares
Separate keys and key shares.
2018-07-19 10:24:10 +02:00
Andreas Fackler fb0e35deea Improve DHB docs, address review comments. 2018-07-18 21:41:21 +02:00
Andreas Fackler 52a684eb7f Add example code for `SyncKeyGen` to the docs. 2018-07-18 17:59:28 +02:00
Andreas Fackler 466104bce6 Extend *honey_badger module docs. 2018-07-18 16:46:46 +02:00
Andreas Fackler 15cc6ffddd Separate keys and key shares. 2018-07-18 14:44:35 +02:00
Andreas Fackler 2d9b872484
Merge pull request #130 from poanetwork/vk-api-refactor66
Output API refactored
2018-07-18 14:10:39 +02:00
c0gent 8c1a111f13
Add `Copy` to `PublicKey` derived impls. 2018-07-17 15:38:50 -07:00
Vladimir Komendantskiy 4b88759844 review comments 2018-07-17 18:27:28 +01:00
Vladimir Komendantskiy f704b481ad Merge branch 'master' into vk-api-refactor66 2018-07-16 15:38:25 +01:00
Vladimir Komendantskiy c779d33dd1 Merge branch 'master' into vk-api-refactor66 2018-07-16 15:16:19 +01:00
Andreas Fackler 1f8373ef93 Add a `JoinPlan` to facilitate joining a running DHB network.
With that, a node can join a running network as an observer in any epoch
where key generation starts.
2018-07-16 16:03:36 +02:00
Peter van Nostrand a86f6666b5 Clear 'Poly' and 'BivarPoly' coeffs on drop. 2018-07-16 09:38:27 -04:00
Vladimir Komendantskiy 9979e790aa added must_use to tests and removed Clone from FaultLog 2018-07-16 14:31:21 +01:00
Vladimir Komendantskiy 22195c4b93 Merge branch 'master' into vk-api-refactor66 2018-07-16 14:20:50 +01:00
Vladimir Komendantskiy c6a0090859 removed cloning of FaultLog 2018-07-16 12:33:00 +01:00
Andreas Fackler 55ad2eae44 Fix DHB test with 1 validator; purge key gen msgs.
This adds a bit of special handling to make sure messages don't stay in
the queue forever in the `dynamic_honey_badger` tests, even if there is
only one validator: the problem was that the single validator is always
ready for input, so it never processed incoming messages. However, to
add the new validator, it needs to process the joining node's key
generation messages.

`DynamicHoneyBadger` now also removes committed key generation messages
from the queue, to avoid committing duplicates.
2018-07-15 12:12:27 +02:00
Andreas Fackler 01ad256363
Merge pull request #127 from poanetwork/afck-dhb-votes
Minor fixes and simplifications.
2018-07-15 11:24:00 +02:00
Andreas Fackler 70e8fedb15
Merge pull request #126 from poanetwork/remove-clear-on-drop
Replaced clear-on-drop with 'std::ptr::write_volatile'.
2018-07-15 10:44:59 +02:00
Vladimir Komendantskiy 72f7b1c06d
Merge branch 'master' into afck-dhb-votes 2018-07-14 08:20:02 +01:00
Peter van Nostrand 53a891380f Replaced clear-on-drop with 'std::ptr::write_volatile'. 2018-07-13 20:58:30 -04:00
Vladimir Komendantskiy 993a164ca9 ignored the failing doc test 2018-07-13 23:27:31 +01:00
Vladimir Komendantskiy db9191768b review comments 2018-07-13 22:53:44 +01:00
Vladimir Komendantskiy 03153cf788 Merge branch 'master' into vk-api-refactor66 2018-07-13 22:18:01 +01:00
c0gent 28da78c709
Add QueueingHoneyBadger::dyn_hb.
Needed to retrieve netinfo.
2018-07-13 08:31:03 -07:00
Vladimir Komendantskiy d7a2808774
Merge branch 'master' into vk-api-refactor66 2018-07-13 13:53:21 +01:00
Marc Brinkmann 5336fbe707 Added `RandomAdversary` and the necessary auxiliary functions.
Random adversaries are created for `broadcast` and `honey_badger`.  Random value generation was added for all type-dependencies of these algorithms, causing the `Rand` trait to be implement for a large portion of the codebase.

Additionally, `MessageWithSender` turned into an actual struct, making it much easier to handle. Tuple-like construction is still available through `MessageWithSender::new()`.
2018-07-13 13:27:49 +02:00
Marc Brinkmann a0da8b7385 Added extended example for broadcast api and other docstrings. 2018-07-13 13:27:49 +02:00
Marc Brinkmann 0e6a8aa272 Fix clippy lints.
Extra lints have been added in the latest version of clippy; this fixes four instances of two of the new lints.
2018-07-13 10:52:44 +02:00
Vladimir Komendantskiy 92f0602dd7 formatting omission fix 2018-07-12 22:25:44 +01:00
Vladimir Komendantskiy 7fb1017bb1 changed Step::output to Vec but that didn't fix the dynamic HB test 2018-07-12 21:23:52 +01:00
Andreas Fackler 3f3ac7be13 Minor fixes and simplifications.
* Clear outdated key gen messages from the buffer.
* Process output after proposing, to make `HoneyBadger` work with a
  single validator.
* Print an error if threshold decryption fails.
* Verify decryption shares with the correct ciphertext.
* Insert all ciphertexts from an epoch at once; otherwise contributions
  can be omitted from a batch.
* Remove `BoolWithFaultLog`: It's easier to return a tuple, and it's
  used only in one place now.
* Avoid redundant signature verification in `VoteCounter`.
* Fix the tests for `QueueingHoneyBadger`.
* Use fewer network sizes to speed up tests a bit.
2018-07-12 17:54:27 +02:00
Vladimir Komendantskiy 1254d40147 fixed a starvation issue in Agreement when num_faulty=0 2018-07-12 15:12:06 +01:00
Vladimir Komendantskiy 0ba06fdb76 added step output in DistAlgorithm 2018-07-12 14:54:05 +01:00
Andreas Fackler bfab919c76 Add FaultLog::is_empty. 2018-07-12 09:54:26 +02:00
Andreas Fackler bed019b166 Report faults from VoteCounter. 2018-07-12 09:54:26 +02:00
Andreas Fackler 313fe1da75 Extract vote counter from DHB. 2018-07-12 09:54:26 +02:00
c0gent f0ed2e6e12 Make `*HoneyBadger` types thread safe.
Replaces `Rc` with `Arc`. This allows usage from different threads
which will be necessary for use with Parity.
2018-07-11 16:28:41 -07:00
Andreas Fackler b41ada1809 Split the dynamic_honey_badger module. 2018-07-11 11:36:40 +02:00
Andreas Fackler ca2dd2327e Add back InvalidNodeTransactionSignature fault.
This was accidentally removed due to a merge conflict.
2018-07-10 17:29:58 +02:00
Andreas Fackler c1b4381753 Separate queue from Honey Badger.
This makes Honey Badger a bit more complicated but a lot more flexible:
It is now unaware of transactions and basically just runs one Subset
instance per epoch.

That way, users can use any kind of external queue, control throttling
and prioritization.
2018-07-10 17:29:58 +02:00
Peter van Nostrand 6783ece9b0 Added faulty node logging to algorithms. 2018-07-09 13:45:11 -04:00
Andreas Fackler 6248e4079f Fix Subset for a single validator. 2018-07-09 11:38:56 +02:00
Vladimir Komendantskiy 90e468ecf6
Merge pull request #101 from poanetwork/afck-docs
Add module-level Agreement, Coin and Subset documentation.
2018-07-05 17:39:09 +01:00
Andreas Fackler c42f606644 Fix module docs. (Review comments.) 2018-07-05 17:51:55 +02:00
Andreas Fackler 3f53964ac4 Add max_future_epochs parameter to DynamicHoneyBadger. 2018-07-05 11:47:19 +02:00
Andreas Fackler 93ca149757 Apply rustfmt and expand HB doc comment. 2018-07-05 11:47:19 +02:00
c0gent 2408e012fe Add type to `HoneyBadgerBuilder`. 2018-07-05 11:47:19 +02:00
Andreas Fackler 1a3016d94d Add Honey Badger builder. 2018-07-05 11:47:19 +02:00
Andreas Fackler 0f92010fe4 Add a max_future_epochs option to Honey Badger.
This delays handling of messages from epochs that are too far ahead.
2018-07-05 11:47:19 +02:00
Andreas Fackler f05e087492 Improve mod docs (review comments). 2018-07-05 11:45:30 +02:00
Andreas Fackler 2a30860bb0 Add agreement module-level docs. 2018-07-05 11:45:30 +02:00
Andreas Fackler f22999a37f Move the Subset docs to the module level. 2018-07-05 11:45:30 +02:00
Andreas Fackler daab0eb564 Add coin docs, change parity computation.
This makes the signature parity computation take into account all bits,
not just the last one of each byte.
2018-07-05 11:45:30 +02:00
Marc Brinkmann 5e8b26cfc3 Implemented `Rand` for `SecretKey`. 2018-07-04 16:43:17 +02:00
Andreas Fackler a4b691fd33 Improve dynamic HB doc comments. 2018-07-02 14:25:08 +02:00
Andreas Fackler 34385746c6 Add start_epoch option and DHB builder. 2018-07-02 14:14:19 +02:00
Andreas Fackler 515bd14a23 Restart Honey Badger when DKG starts for joining validator.
That way the user can be sure that if they forward all `Target::All`
messages after the first batch mentioning a joining validator, they
don't miss any messages relevant for that joining node.
2018-07-02 14:14:19 +02:00
Andreas Fackler bbc27e8a66 Update terminology: "observers" and "validators" 2018-07-02 14:14:19 +02:00
Andreas Fackler 11149c5e66 Communicate change state in Dynamic HB, add module docs. 2018-07-02 14:14:19 +02:00
Andreas Fackler 7a0b397233 Add node transaction messages to Dynamic HB. 2018-07-02 14:14:19 +02:00
Marc Brinkmann a6c920e88e Remove unused feature, allowing compilation on stable again.
There is no evidence that [optin_builtin_traits](https://doc.rust-lang.org/beta/unstable-book/language-features/optin-builtin-traits.html) are used any longer (the keyword `auto` does not even show up in the codebase).

Removing this features allow compilation on stable Rust 1.27 and possible earlier versions.
2018-07-01 18:09:21 +02:00
Andreas Fackler 33eadc94ef Apply code review comments; improve broadcast docs. 2018-06-28 21:46:51 +02:00
Andreas Fackler 824a23775d Move broadcast docs to module-level.
Also replaces the word "good" with "correct".
2018-06-28 12:49:11 +02:00
Andreas Fackler 2b4f77f11c Avoid redundant key computations. 2018-06-27 14:47:05 +02:00
Andreas Fackler 7a335c9771 Remove vote_counts field from dynamic HB. 2018-06-27 11:51:56 +02:00
Andreas Fackler 74fab61dd8 Fix Dynamic HB test. 2018-06-27 11:37:05 +02:00
Andreas Fackler a2c213d0aa Replace convert_transaction with From. 2018-06-26 15:13:04 +02:00
Andreas Fackler fd8e7a5900 Add DynamicHoneyBadger. 2018-06-26 15:13:04 +02:00
Andreas Fackler f202ccfeb8 Compute is_peer on NetworkInfo creation. 2018-06-26 14:52:53 +02:00
Andreas Fackler aaec3d4074 Simplify observer/peer-specific code.
Extract some methods to make the branches more readable.
2018-06-26 14:50:06 +02:00
Andreas Fackler 2db67df325 Rename is_full_node to is_peer. 2018-06-26 10:57:44 +02:00
Andreas Fackler 2a5f9f1bfe Allow observer nodes in all algorithms.
This allows nodes to join the network without sending any messages
themselves. They can't give any input and just observe the outcome.

Closes #81
2018-06-26 09:17:12 +02:00
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 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 7be2510e36 swapped False and True coins 2018-06-22 17:39:55 +01:00
Vladimir Komendantskiy 7a4fc37628 implemented an optimistic random common coin schedule 2018-06-22 10:39:55 +01:00
Vladimir Komendantskiy 4c2e92e63d removed the obsolete Bls12 type parameters 2018-06-22 10:17:11 +01:00
Vladimir Komendantskiy 5778cedb1c removed the unneeded pending_verification 2018-06-22 10:12:38 +01:00
Vladimir Komendantskiy f2893c5f54 Revert "removed the unneeded pending_verification and added clone-less shares in messages"
This reverts commit 10c442af475ca764badede674715142a1fd06fdb.
2018-06-22 10:12:38 +01:00
Vladimir Komendantskiy b7a0d64924 removed the unneeded pending_verification and added clone-less shares in messages 2018-06-22 10:12:38 +01:00
Vladimir Komendantskiy 69b42d5032 added verification of decryption shares as soon as they can be verified 2018-06-22 10:12:38 +01:00
Vladimir Komendantskiy 5b0d331a69 review comments 2018-06-22 10:12:38 +01:00
Vladimir Komendantskiy 5811ead460 derived instance fixes after serde option removal 2018-06-22 10:12:38 +01: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
Vladimir Komendantskiy c7f4994e3a threshold encryption of proposals in HoneyBadger 2018-06-22 10:12:38 +01:00
Andreas Fackler 67dbada49f Improve documentation. 2018-06-22 10:17:44 +02: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
Peter van Nostrand 73368b7a32 Fix formatting. 2018-06-21 13:06:48 -04:00
Peter van Nostrand 05da712c20 Added clear-on-drop secret-keys to 'NetworkInfo'. 2018-06-21 12:08:48 -04:00
Andreas Fackler a47123c4dd Improve Hash impl for Ciphertext.
This formulation makes it harder to forget updating the `Hash`
implementation if the `Ciphertext` type changes.
2018-06-20 22:09:43 +02:00
Andreas Fackler 1f27fa6891 Implement Hash for "public" cryptographic types.
This adds a `Hash` implementation for public keys, commitments,
ciphertexts and signatures — types that might make sense to be included
in special transactions. The `DynamicHoneyBadger` implementation will
require some of them.
2018-06-20 22:09:43 +02:00
Andreas Fackler 6484242afc Simplify serde implementations, add Ciphertext. 2018-06-20 10:43:59 +02:00
Andreas Fackler 83f8d61402 Support serde by default.
This removes the `serialization-serde` feature, since serde is already
used internally and therefore a dependency anyway.
2018-06-20 10:21:52 +02:00
Andreas Fackler c84c60d826 Rename crypto::keygen to crypto::poly. 2018-06-20 10:05:03 +02:00
Vladimir Komendantskiy 1436d85455
Merge pull request #63 from poanetwork/afck-hb-whose-batch
Return proposer info from HoneyBadger.
2018-06-19 09:53:52 +01:00
Andreas Fackler 66f396e01c Remove more NodeUid trait bounds.
Use a `BTreeMap` instead of `HashMap` in `NetworkInfo`. The number of
nodes can't grow very large anyway.
2018-06-18 16:37:07 +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
Andreas Fackler 3bf86453c3 Restructure crate-level docs, replace honest with correct. 2018-06-15 17:52:17 +02:00
Andreas Fackler e392f4c3af Add some crate-level documentation. 2018-06-14 17:44:43 +02:00
Vladimir Komendantskiy 3ed63a1507 formatting 2018-06-14 14:10:05 +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 994600bcf6 renamed a fn argument for readability 2018-06-14 12:43:18 +01:00
Vladimir Komendantskiy 3393052b4b review comment coverage 2018-06-14 12:28:38 +01:00
Vladimir Komendantskiy 5008d11ada Revert "the set of node indices of common coin shares is now computed only once"
This reverts commit e9808efc61.
2018-06-14 10:05:05 +01:00
Vladimir Komendantskiy e9808efc61 the set of node indices of common coin shares is now computed only once 2018-06-13 22:05:11 +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 f4b6c90c8c added a queue of incoming common coin signature shares 2018-06-13 15:17:11 +01:00
Vladimir Komendantskiy 94049e8636 fixed propagation of common coin messages to the top level 2018-06-13 15:17:11 +01:00
Vladimir Komendantskiy 40eeee90fc protobuf serialization 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 cf45a4e3cb common coin implementation 2018-06-13 15:15:41 +01:00
Vladimir Komendantskiy b6587a21e8 get_coin interface to Common Coin 2018-06-13 15:09:12 +01:00
Vladimir Komendantskiy 17dc9df78e Common Coin module template; added keys in NetworkInfo 2018-06-13 15:09:12 +01:00
Andreas Fackler 6cc2302e61 Implement polynomials for distributed key generation. 2018-06-11 16:45:08 +02:00
Vladimir Komendantskiy d1362ed500
Merge pull request #56 from poanetwork/vk-term-agreement
Added Term messages in Agreement and enabled early termination
2018-06-08 09:06:46 +01:00
Vladimir Komendantskiy dc4475ba82 for each node, never count both Aux and Term messages 2018-06-07 20:29:51 +01:00
Vladimir Komendantskiy 35d5ad106a added Term messages in Agreement and enabled early termination 2018-06-07 20:06:44 +01:00
Andreas Fackler cf9521c565 Don't return an error on deserialization failure. 2018-05-31 16:32:54 +02:00
Andreas Fackler fc599232aa Add logging to simulation example. 2018-05-31 14:28:10 +02:00
Andreas Fackler f970272d3e Add bandwidth and CPU to the simulation. 2018-05-31 14:28:10 +02:00
Andreas Fackler 1fd7155e31 Remove unused CommonSubset error variants. 2018-05-31 09:37:00 +02:00
Andreas Fackler 9859002e1b Don't panic on shards of unequal size. 2018-05-31 09:12:15 +02:00
Andreas Fackler bb61d0c5ab Ignore messages in Agreement after termination. 2018-05-30 17:33:24 +02:00
Andreas Fackler f700ae82d0 Remove unused code from CommonSubset. 2018-05-30 15:50:16 +02:00
Andreas Fackler c91fa13213 Make Broadcast handle large payloads. 2018-05-30 15:40:15 +02:00
Andreas Fackler a0a8582f0b Expand crypto tests. 2018-05-30 14:15:54 +02:00
Andreas Fackler 661bae6438 Implement threshold encryption. 2018-05-30 13:50:09 +02:00
Andreas Fackler 45a7c07106 Implement simple encryption. 2018-05-30 11:42:17 +02:00
Andreas Fackler 0017a2a7c0 Make public keys and signatures serializable. 2018-05-30 10:08:43 +02:00
Andreas Fackler 56ab6a5037 Simplify hash_g2. 2018-05-29 21:59:21 +02:00
Andreas Fackler 527b1c8c17 Use SHA256 and byteorder in hash_g2. 2018-05-29 17:59:50 +02:00
Andreas Fackler d999792234 Implement threshold signatures. 2018-05-29 17:06:02 +02:00
Vladimir Komendantskiy ede1c7d157 moved the own ID membership test to the NetworkInfo constructor 2018-05-29 14:58:17 +01:00
Vladimir Komendantskiy 98f5304d4c top-level interface now requires providing a NetworkInfo parameter 2018-05-29 14:53:01 +01:00
Vladimir Komendantskiy d09f3e26b4 introduced common shared network information 2018-05-29 14:53:01 +01:00
Vladimir Komendantskiy 2aac22f083 comment updates 2018-05-28 11:54:37 +01:00