[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: