]> git.rkrishnan.org Git - tahoe-lafs/tahoe-lafs.git/commitdiff
directories: make the IV for the writecaps in directory entries be computed from...
authorZooko O'Whielacronx <zooko@zooko.com>
Sun, 5 Jul 2009 02:48:15 +0000 (19:48 -0700)
committerZooko O'Whielacronx <zooko@zooko.com>
Sun, 5 Jul 2009 02:48:15 +0000 (19:48 -0700)
This makes encoding of directory entries deterministic, and it is also a tad faster on Macbook Pro than getting a random IV with os.urandom(16).

src/allmydata/dirnode.py
src/allmydata/util/hashutil.py

index 302f8df58f835b085ee21c57eb21cbdf32e2f3e8..851ec4bf8e0fcb421a97d8415de9595f12da5c7f 100644 (file)
@@ -195,7 +195,7 @@ class NewDirectoryNode:
 
     def _encrypt_rwcap(self, rwcap):
         assert isinstance(rwcap, str)
-        IV = os.urandom(16)
+        IV = hashutil.mutable_rwcap_iv_hash(self._node.get_writekey())
         key = hashutil.mutable_rwcap_key_hash(IV, self._node.get_writekey())
         cryptor = AES(key)
         crypttext = cryptor.process(rwcap)
index d5b260ad379598ce79cedb22bdff61a09f33c060..8987d2dc45d2625c38eea883408636fc51f1579c 100644 (file)
@@ -82,6 +82,7 @@ MUTABLE_STORAGEINDEX_TAG = "allmydata_mutable_readkey_to_storage_index_v1"
 
 # dirnodes
 DIRNODE_CHILD_WRITECAP_TAG = "allmydata_mutable_writekey_and_salt_to_dirnode_child_capkey_v1"
+DIRNODE_CHILD_IV_TAG = "allmydata_mutable_writekey_to_iv_v1"
 
 def storage_index_hash(key):
     # storage index is truncated to 128 bits (16 bytes). We're only hashing a
@@ -122,6 +123,7 @@ def plaintext_segment_hasher():
     return tagged_hasher(PLAINTEXT_SEGMENT_TAG)
 
 KEYLEN = 16
+IVLEN = 16
 
 def convergence_hash(k, n, segsize, data, convergence):
     h = convergence_hasher(k, n, segsize, convergence)
@@ -170,6 +172,8 @@ def hmac(tag, data):
 
 def mutable_rwcap_key_hash(iv, writekey):
     return tagged_pair_hash(DIRNODE_CHILD_WRITECAP_TAG, iv, writekey, KEYLEN)
+def mutable_rwcap_iv_hash(writekey):
+    return tagged_hash(DIRNODE_CHILD_IV_TAG, writekey, IVLEN)
 
 def ssk_writekey_hash(privkey):
     return tagged_hash(MUTABLE_WRITEKEY_TAG, privkey, KEYLEN)