summaryrefslogtreecommitdiff
path: root/src/frontend.erl
diff options
context:
space:
mode:
authorMagnus Ahltorp <map@kth.se>2014-11-18 17:06:53 +0100
committerMagnus Ahltorp <map@kth.se>2014-11-19 05:03:19 +0100
commit72fdb2fb8870f49cb066eca754e87e7b7e5d82d9 (patch)
treef880bf106a4300a739ce41b04f3d213ab9a858b5 /src/frontend.erl
parent41412486d1b128057e453ac94c675a83a2f3e1b4 (diff)
Make ht load tree and verify root hash before updating tree size
Diffstat (limited to 'src/frontend.erl')
-rw-r--r--src/frontend.erl13
1 files changed, 10 insertions, 3 deletions
diff --git a/src/frontend.erl b/src/frontend.erl
index 9c69517..6fc2fd5 100644
--- a/src/frontend.erl
+++ b/src/frontend.erl
@@ -41,6 +41,7 @@ request(post, "ct/frontend/sendsth", Input) ->
{struct, PropList} ->
OldSize = db:size(),
Treesize = proplists:get_value(<<"tree_size">>, PropList),
+ RootHash = base64:decode(proplists:get_value(<<"sha256_root_hash">>, PropList)),
Indexsize = db:indexsize(),
if
@@ -59,9 +60,15 @@ request(post, "ct/frontend/sendsth", Input) ->
case Errors of
[] ->
- ok = db:set_treesize(Treesize),
- ht:reset_tree([db:size() - 1]),
- success({[{result, <<"ok">>}]});
+ ht:load_tree(Treesize - 1),
+ OwnRootHash = ht:root(Treesize - 1),
+ case OwnRootHash of
+ RootHash ->
+ ok = db:set_treesize(Treesize),
+ success({[{result, <<"ok">>}]});
+ _ ->
+ html("Root hash not the same", hex:bin_to_hexstr(OwnRootHash))
+ end;
_ ->
html("Database not complete", Errors)
end