From: Zooko O'Whielacronx <zooko@zooko.com>
Date: Fri, 30 Mar 2007 01:11:30 +0000 (-0700)
Subject: hashutil: convenience methods for tagged and encoded hashes
X-Git-Url: https://git.rkrishnan.org/components/%22news.html/architecture.txt?a=commitdiff_plain;h=99a046ab51b4e7d7cf66000bc5dd551a913a3fe2;p=tahoe-lafs%2Ftahoe-lafs.git

hashutil: convenience methods for tagged and encoded hashes
In various cases, including Merkle Trees, it is useful to tag and encode the inputs to your secure hashes to prevent security flaws due to ambiguous meanings of hash values.
---

diff --git a/src/allmydata/util/hashutil.py b/src/allmydata/util/hashutil.py
new file mode 100644
index 00000000..ccadccf0
--- /dev/null
+++ b/src/allmydata/util/hashutil.py
@@ -0,0 +1,18 @@
+from allmydata.Crypto.Hash import SHA256
+
+def netstring(s):
+    return "%d:%s," % (len(s), s,)
+
+def tagged_hash(tag, val):
+    s = SHA256.new()
+    s.update(netstring(tag))
+    s.update(val)
+    return s.digest()
+            
+def tagged_pair_hash(tag, val1, val2):
+    s = SHA256.new()
+    s.update(netstring(tag))
+    s.update(netstring(val1))
+    s.update(netstring(val2))
+    return s.digest()
+