From 3268b3fbc5c5c3084460330c7dde37e5736cdbf5 Mon Sep 17 00:00:00 2001 From: Andrew Thompson Date: Mon, 24 Sep 2018 17:09:16 -0700 Subject: [PATCH] Serialize commitments properly --- src/dkg_commitment.erl | 16 ++++++++-------- src/dkg_hybriddkg.erl | 2 +- test/dkg_worker.erl | 11 +++++++---- 3 files changed, 16 insertions(+), 13 deletions(-) diff --git a/src/dkg_commitment.erl b/src/dkg_commitment.erl index 5ea148f..c9cdb16 100644 --- a/src/dkg_commitment.erl +++ b/src/dkg_commitment.erl @@ -21,16 +21,16 @@ matrix :: dkg_commitmentmatrix:matrix(), generator :: erlang_pbc:element(), nodes = [] :: [pos_integer()], - echoes = #{} :: map(), - readies =#{} :: map() + echoes = #{} :: #{pos_integer() => erlang_pbc:element()}, + readies =#{} :: #{pos_integer() => erlang_pbc:element()} }). -record(serialized_commitment, { matrix :: dkg_commitmentmatrix:serialized_matrix(), generator :: binary(), nodes = [] :: [pos_integer()], - echoes = #{} :: map(), - readies = #{} :: map() + echoes = #{} :: #{pos_integer() => binary()}, + readies = #{} :: #{pos_integer() => binary()} }). -type commitment() :: #commitment{}. @@ -132,8 +132,8 @@ serialize(#commitment{matrix=Matrix, #serialized_commitment{matrix=dkg_commitmentmatrix:serialize(Matrix), generator=erlang_pbc:element_to_binary(Generator), nodes=Nodes, - echoes=Echoes, - readies=Readies}. + echoes=maps:map(fun(_K, V) -> erlang_pbc:element_to_binary(V) end, Echoes), + readies=maps:map(fun(_K, V) -> erlang_pbc:element_to_binary(V) end, Readies)}. -spec deserialize(serialized_commitment(), erlang_pbc:element()) -> commitment(). deserialize(#serialized_commitment{matrix=SerializedMatrix, @@ -144,5 +144,5 @@ deserialize(#serialized_commitment{matrix=SerializedMatrix, #commitment{matrix=dkg_commitmentmatrix:deserialize(SerializedMatrix, U), generator=erlang_pbc:binary_to_element(U, SerializedGenerator), nodes=Nodes, - echoes=Echoes, - readies=Readies}. + echoes=maps:map(fun(_K, V) -> erlang_pbc:binary_to_element(U, V) end, Echoes), + readies=maps:map(fun(_K, V) -> erlang_pbc:binary_to_element(U, V) end, Readies)}. diff --git a/src/dkg_hybriddkg.erl b/src/dkg_hybriddkg.erl index 4e410b5..248fcf6 100644 --- a/src/dkg_hybriddkg.erl +++ b/src/dkg_hybriddkg.erl @@ -37,7 +37,7 @@ u :: binary(), u2 :: binary(), vss_map :: #{pos_integer() => dkg_hybridvss:serialized_vss()}, - vss_results = #{} :: #{pos_integer() => {C :: dkg_commitment:serialized_commitment(), Si :: binary()}}, + vss_results = #{} :: serialized_vss_results(), qbar = [] :: qset(), qhat = [] :: qset(), rhat = [] :: rhat(), diff --git a/test/dkg_worker.erl b/test/dkg_worker.erl index 71ca53c..16c24b9 100644 --- a/test/dkg_worker.erl +++ b/test/dkg_worker.erl @@ -78,12 +78,12 @@ dispatch({NewDKG, {result, {Shard, VerificationKey, VerificationKeys}}}, State) %ct:pal("~p finished", [State#state.id]), PubKey = tpke_pubkey:init(State#state.n, State#state.t, State#state.g1, State#state.g2, VerificationKey, VerificationKeys, State#state.curve), PrivKey = tpke_privkey:init(PubKey, Shard, State#state.id - 1), - State#state{privkey=PrivKey, dkg=NewDKG}; + update_dkg(NewDKG, State#state{privkey=PrivKey}); dispatch({NewDKG, {send, ToSend}}, State) -> do_send(ToSend, State), - State#state{dkg=NewDKG}; + update_dkg(NewDKG, State); dispatch({NewDKG, ok}, State) -> - State#state{dkg=NewDKG}; + update_dkg(NewDKG, State); dispatch({NewDKG, Other}, State) -> io:format("UNHANDLED ~p~n", [Other]), State#state{dkg=NewDKG}; @@ -101,8 +101,11 @@ do_send([{multicast, Msg}|T], State) -> [ gen_server:cast({global, name(Dest)}, {dkg, State#state.id, Msg}) || Dest <- lists:seq(1, State#state.n)], do_send(T, State). - %% helper functions +update_dkg(DKG, State)-> + NewDKG = dkg_hybriddkg:deserialize(dkg_hybriddkg:serialize(DKG), State#state.g1), + State#state{dkg=NewDKG}. + name(N) -> list_to_atom(lists:flatten(["dkg_worker_", integer_to_list(N)])).