[Nym3-commit] r96 - trunk

nym3-devel@lists.noreply.org nym3-devel@lists.noreply.org
Thu, 05 Aug 2004 20:02:14 +0200


Author: laurent
Date: 2004-08-05 20:02:11 +0200 (Thu, 05 Aug 2004)
New Revision: 96

Modified:
   trunk/User.py
Log:
Add function to encrypt synopses if needed (too old or enough left in clear).


Modified: trunk/User.py
===================================================================
--- trunk/User.py	2004-08-05 17:58:32 UTC (rev 95)
+++ trunk/User.py	2004-08-05 18:02:11 UTC (rev 96)
@@ -16,6 +16,24 @@
 
 class AlreadySuchUser(Exception): pass
 
+def binsearch(l, prop):
+    """Returns first index i of l for which l[i] is true,
+       assuming prop is increasing over l"""
+    min = 0
+    max = len(l) - 1
+    if not prop(l[max]): return IndexError
+    if prop(l[min]): return min
+
+    current = (max + min) / 2
+    while max - min > 1:
+	if prop(l[current]):
+	    max = current
+	    current = (max + min) / 2
+	else:
+	    min = current
+	    current = (max + min) / 2
+    return max
+
 class User:
     """Hold user data"""
     def __init__(self, username, create = 0):
@@ -105,7 +123,7 @@
     def encKey(self):
         return self.data['encKey']
 
-    def blobify(self,l):
+    def blobify(self, l):
         """encrypts a set of synopses
         l is a list of pair (mid,synopsis) """
         s = ""
@@ -335,6 +353,33 @@
         self.load_synbox()
         self.syn[i:j] = [self.blobify(syn[i:j])]
 
+    def encOldSyn(self):
+	"""Encrypt synopsis we had in clear for too long"""
+	try:
+	    firstclear = binsearch(self.syn, lambda x: (x[1] == 'clear'))
+	except: return
+	
+	offset = firstclear
+	last = len(self.syn)
+	size = last - offset
+	lastchunk = size % maxSynPerBlob
+
+	while offset + maxSynPerBlob < last:
+	    self.encryptSyn(offset, offset + maxSynPerBlurb)
+	    offset = offset + 1
+	    last = last - maxSynPerBlurb
+	
+	if offset + 1 >= last: return
+	# See if among the few remaining synopses, some are considered
+	# too old
+	try:
+	    fyoung = binsearch(self.syn, lambda x: self.index[x[0][0]]['time'] <
+		time.time() - self['EncryptSummaryAfter'] * 30 * 60)
+	except: pass
+	if fyoung <= offset: return
+	self.encryptSyn(offset, fyoung)
+
+
     def markMid(self,l,mark):
         """the status of the mids in l which had a status
         previous to mark in the lifeCycle are set to mark"""
@@ -343,7 +388,6 @@
             if (self.index[e]['status'] < mark):
                 self.index[e]['status'] = mark
         
-
     def hasMail(self,mid):
         self.load_index()
         try: