Skip to content

Commit

Permalink
Restore input msgs for callback mode, remove serialized_dkg record
Browse files Browse the repository at this point in the history
  • Loading branch information
vihu committed Oct 22, 2018
1 parent 1549028 commit 4156efe
Show file tree
Hide file tree
Showing 2 changed files with 33 additions and 118 deletions.
124 changes: 22 additions & 102 deletions src/dkg_hybriddkg.erl
Original file line number Diff line number Diff line change
Expand Up @@ -14,31 +14,10 @@
n :: pos_integer(),
f :: pos_integer(),
t :: pos_integer(),
u :: erlang_pbc:element(),
u2 :: erlang_pbc:element(),
u :: erlang_pbc:element() | binary(),
u2 :: erlang_pbc:element() | binary(),
vss_map = #{} :: vss_map(),
vss_results = #{} :: vss_results(),
qbar = [] :: qset(),
qhat = [] :: qset(),
rhat = [] :: rhat(),
mbar = [] :: mbar(),
elq = #{} :: elq(),
rlq = #{} :: rlq(),
lc_flag = false :: boolean(),
leader :: pos_integer(),
l_next :: pos_integer(),
lc_map = #{} :: lc_map()
}).

-record(serialized_dkg, {
id :: pos_integer(),
n :: pos_integer(),
f :: pos_integer(),
t :: pos_integer(),
u :: binary(),
u2 :: binary(),
vss_map :: vss_map(),
vss_results = #{} :: serialized_vss_results(),
vss_results = #{} :: vss_results() | serialized_vss_results(),
qbar = [] :: qset(),
qhat = [] :: qset(),
rhat = [] :: rhat(),
Expand Down Expand Up @@ -68,7 +47,6 @@
-type vss_results() :: #{pos_integer() => {C :: dkg_commitment:commitment(), Si :: erlang_pbc:element()}}.
-type serialized_vss_results() :: #{pos_integer() => {C :: dkg_commitment:commitment(), Si :: binary()}}.
-type dkg() :: #dkg{}.
-type serialized_dkg() :: #serialized_dkg{}.

-export_type([dkg/0]).

Expand Down Expand Up @@ -422,83 +400,25 @@ store_leader_change(DKG, Sender, {signed_leader_change, Lbar, _, _}=LeaderChange
false
end.

-spec serialize(dkg()) -> serialized_dkg().
serialize(#dkg{id=Id,
n=N,
f=F,
t=T,
u=U,
u2=U2,
vss_map=VSSMap,
vss_results=VSSResults,
qbar=Qbar,
qhat=Qhat,
rhat=Rhat,
mbar=Mbar,
elq=Elq,
rlq=Rlq,
lc_flag=LCFlag,
leader=Leader,
l_next=LNext,
lc_map=LCMap}) ->
#serialized_dkg{id=Id,
n=N,
f=F,
t=T,
u=erlang_pbc:element_to_binary(U),
u2=erlang_pbc:element_to_binary(U2),
vss_map=serialize_vss_map(VSSMap),
vss_results=serialize_vss_results(VSSResults),
qbar=Qbar,
qhat=Qhat,
rhat=Rhat,
mbar=Mbar,
elq=Elq,
rlq=Rlq,
lc_flag=LCFlag,
leader=Leader,
l_next=LNext,
lc_map=LCMap}.

-spec deserialize(serialized_dkg(), erlang_pbc:element()) -> dkg().
deserialize(#serialized_dkg{id=Id,
n=N,
f=F,
t=T,
u=SerializedU,
u2=SerializedU2,
vss_map=SerializedVSSMap,
vss_results=SerializedVSSResults,
qbar=Qbar,
qhat=Qhat,
rhat=Rhat,
mbar=Mbar,
elq=Elq,
rlq=Rlq,
lc_flag=LCFlag,
leader=Leader,
l_next=LNext,
%% XXX: Only one element is enough?
%% presumably we need to generate U and U2 again to deserialize? Not sure...
lc_map=LCMap}, Element) ->
#dkg{id=Id,
n=N,
f=F,
t=T,
u=erlang_pbc:binary_to_element(Element, SerializedU),
u2=erlang_pbc:binary_to_element(Element, SerializedU2),
vss_map=deserialize_vss_map(SerializedVSSMap, Element),
vss_results=deserialize_vss_results(SerializedVSSResults, Element),
qbar=Qbar,
qhat=Qhat,
rhat=Rhat,
mbar=Mbar,
elq=Elq,
rlq=Rlq,
lc_flag=LCFlag,
leader=Leader,
l_next=LNext,
lc_map=LCMap}.
-spec serialize(dkg()) -> dkg().
serialize(DKG=#dkg{u=U,
u2=U2,
vss_map=VSSMap,
vss_results=VSSResults}) ->
DKG#dkg{u=erlang_pbc:element_to_binary(U),
u2=erlang_pbc:element_to_binary(U2),
vss_map=serialize_vss_map(VSSMap),
vss_results=serialize_vss_results(VSSResults)}.

-spec deserialize(dkg(), erlang_pbc:element()) -> dkg().
deserialize(DKG=#dkg{u=SerializedU,
u2=SerializedU2,
vss_map=SerializedVSSMap,
vss_results=SerializedVSSResults}, Element) ->
DKG#dkg{u=erlang_pbc:binary_to_element(Element, SerializedU),
u2=erlang_pbc:binary_to_element(Element, SerializedU2),
vss_map=deserialize_vss_map(SerializedVSSMap, Element),
vss_results=deserialize_vss_results(SerializedVSSResults, Element)}.

-spec serialize_vss_map(vss_map()) -> vss_map().
serialize_vss_map(VSSMap) ->
Expand Down
27 changes: 11 additions & 16 deletions src/dkg_hybridvss.erl
Original file line number Diff line number Diff line change
Expand Up @@ -60,12 +60,19 @@ init(Id, N, F, T, G1, G2, Session, Options) ->
-spec input(VSS :: vss(), Secret :: erlang_pbc:element()) -> {vss(), {send, [send_msg()]} | ok}.
input(VSS = #vss{session=Session={Dealer,_}, id=Id, u=U, u2=U2, t=T, n=N, callback=true}, Secret) when Dealer == Id ->
{BiPoly, Commitment, Matrix} = create_input(N, U2, T, Secret),
{store_commitment(Commitment, VSS), {send, [{callback, {send, {Session,
Matrix,
gen_input_msgs(N, U, Session, Matrix, BiPoly)}}}]}};
Msgs = lists:map(fun(Node) ->
NodeZr = erlang_pbc:element_set(erlang_pbc:element_new('Zr', U), Node),
dkg_polynomial:serialize(dkg_bipolynomial:evaluate(BiPoly, NodeZr))
end, dkg_util:allnodes(N)),
{store_commitment(Commitment, VSS), {send, [{callback, {send, {Session, Matrix, Msgs}}}]}};
input(VSS = #vss{session=Session={Dealer,_}, id=Id, u=U, u2=U2, t=T, n=N}, Secret) when Dealer == Id ->
{BiPoly, Commitment, Matrix} = create_input(N, U2, T, Secret),
{store_commitment(Commitment, VSS), {send, gen_input_msgs(N, U, Session, Matrix, BiPoly)}};
Msgs = lists:map(fun(Node) ->
NodeZr = erlang_pbc:element_set(erlang_pbc:element_new('Zr', U), Node),
Aj = dkg_polynomial:serialize(dkg_bipolynomial:evaluate(BiPoly, NodeZr)),
{unicast, Node, {send, {Session, Matrix, Aj}}}
end, dkg_util:allnodes(N)),
{store_commitment(Commitment, VSS), {send, Msgs}};
input(VSS, _Secret) ->
{VSS, ok}.

Expand Down Expand Up @@ -280,18 +287,6 @@ status(VSS) ->
%% ------------------------------------------------------------------
%% Internal helper functions
%% ------------------------------------------------------------------
-spec gen_input_msgs(N :: pos_integer(),
U :: erlang_pbc:element() | binary(),
Session :: session(),
Matrix :: binary(),
BiPoly :: dkg_bipolynomial:bipolynomial()) -> [{unicast, pos_integer(), send_msg()}].
gen_input_msgs(N, U, Session, Matrix, BiPoly) ->
lists:map(fun(Node) ->
NodeZr = erlang_pbc:element_set(erlang_pbc:element_new('Zr', U), Node),
Aj = dkg_polynomial:serialize(dkg_bipolynomial:evaluate(BiPoly, NodeZr)),
{unicast, Node, {send, {Session, Matrix, Aj}}}
end, dkg_util:allnodes(N)).

-spec get_commitment(Matrix :: binary(), VSS :: vss()) -> dkg_commitment:commitment().
get_commitment(Matrix, VSS = #vss{n=N, t=T, u2=G2}) ->
Key = erlang:phash2(Matrix),
Expand Down

0 comments on commit 4156efe

Please sign in to comment.