diff options
| author | Josef Gustafsson <josef.gson@gmail.com> | 2015-09-08 13:59:56 +0200 |
|---|---|---|
| committer | Josef Gustafsson <josef.gson@gmail.com> | 2015-09-08 13:59:56 +0200 |
| commit | 8fb9762dd4e9dccca4975318d8b9b3292129bd06 (patch) | |
| tree | aea693d5ef4b710291f4820d1ca09ba129600fe4 /monitor/josef_lib.py | |
| parent | e52cd6a3f7b6f129966f9b3c1831e675dd49599e (diff) | |
bugfix: incrementing tree
Diffstat (limited to 'monitor/josef_lib.py')
| -rw-r--r-- | monitor/josef_lib.py | 44 |
1 files changed, 44 insertions, 0 deletions
diff --git a/monitor/josef_lib.py b/monitor/josef_lib.py index 3c52761..89756cf 100644 --- a/monitor/josef_lib.py +++ b/monitor/josef_lib.py @@ -777,3 +777,47 @@ def write_file(fn, sth): tempname = fn + ".new" open(tempname, 'w').write(json.dumps(sth)) mv_file(tempname, fn) + + +class UTC(datetime.tzinfo): + def utcoffset(self, dt): + return datetime.timedelta(hours=0) + def dst(self, dt): + return datetime.timedelta(0) + +def reduce_layer(layer): + new_layer = [] + while len(layer) > 1: + e1 = layer.pop(0) + e2 = layer.pop(0) + new_layer.append(internal_hash((e1,e2))) + return new_layer + +def reduce_tree(entries, layers): + if len(entries) == 0 and layers is []: + return [[hashlib.sha256().digest()]] + + layer_idx = 0 + layers[layer_idx] += entries + + while len(layers[layer_idx]) > 1: + if len(layers) == layer_idx + 1: + layers.append([]) + + layers[layer_idx + 1] += reduce_layer(layers[layer_idx]) + layer_idx += 1 + return layers + +def reduce_subtree_to_root(layers): + while len(layers) > 1: + if len(layers[1]) == 0: + layers[1] = layers[0] + else: + layers[1] += next_merkle_layer(layers[0]) + del layers[0] + + if len(layers[0]) > 1: + return next_merkle_layer(layers[0]) + return layers[0] + + |
