intend to remove rsa and dsurveil dependencies, begin personnal encrypted method of index

This commit is contained in:
a-Sansara 2012-09-13 20:26:57 +02:00
parent e93b062efa
commit 7ea35b6aa8
3 changed files with 74 additions and 6 deletions

View File

@ -245,6 +245,7 @@ you can remove index but all presents files on the box %s will be unrecoverable
if o.list : if o.list :
if impst.index != None: if impst.index != None:
impst.index.print(True,'-'*120+'\n -- INDEX '+impst.rootBox+'\n'+'-'*120) impst.index.print(True,'-'*120+'\n -- INDEX '+impst.rootBox+'\n'+'-'*120)
impst.index.impracrypt()
elif o.add : elif o.add :
impst.addFile(o.add[0],o.add[1],o.user,o.category) impst.addFile(o.add[0],o.add[1],o.user,o.category)

View File

@ -30,6 +30,7 @@
# ~~ package core ~~ # ~~ package core ~~
from base64 import urlsafe_b64encode from base64 import urlsafe_b64encode
from binascii import b2a_base64, a2b_base64
from email.encoders import encode_base64 from email.encoders import encode_base64
from email.header import Header from email.header import Header
from email.mime.base import MIMEBase from email.mime.base import MIMEBase
@ -42,7 +43,7 @@ from os import remove, urandom, sep
from os.path import abspath, dirname, join, realpath, basename, getsize, splitext from os.path import abspath, dirname, join, realpath, basename, getsize, splitext
from re import split as regsplit from re import split as regsplit
from impra.imap import ImapHelper, ImapConfig from impra.imap import ImapHelper, ImapConfig
from impra.util import __CALLER__, Rsa, RuTime, Noiser, Randomiz, RuTime, hash_sha256, formatBytes, randomFrom, bstr, quote_escape, stack, run, file_exists, get_file_content from impra.util import __CALLER__, Rsa, RuTime, Noiser, Randomiz, RuTime, hash_sha256, formatBytes, randomFrom, bstr, quote_escape, stack, run, file_exists, get_file_content, get_file_binary
DEBUG = True DEBUG = True
@ -72,7 +73,7 @@ class ConfigKey:
# part n°, hash, lns, lne, pos # part n°, hash, lns, lne, pos
hpart = hash_sha256(self.salt+name+'.part'+d)[:-3]+str(ord(hroot[i])).rjust(3,'0') hpart = hash_sha256(self.salt+name+'.part'+d)[:-3]+str(ord(hroot[i])).rjust(3,'0')
lst.append((d, hpart, self.noiser.lns, self.noiser.lne, self.rdmz.get())) lst.append((d, hpart, self.noiser.lns, self.noiser.lne, self.rdmz.get()))
dic['head'] = (name,count,hroot,self.getKey()) dic['head'] = [name,count,hroot,self.getKey()]
if not noSorted : if not noSorted :
lst = sorted(lst, key=lambda lst: lst[4]) lst = sorted(lst, key=lambda lst: lst[4])
dic['data'] = lst dic['data'] = lst
@ -103,7 +104,7 @@ class FSplitter :
self.DIR_OUTBOX = self.wkdir+sep+'outbox'+sep self.DIR_OUTBOX = self.wkdir+sep+'outbox'+sep
self.DIR_DEPLOY = self.wkdir+sep+'deploy'+sep self.DIR_DEPLOY = self.wkdir+sep+'deploy'+sep
def addFile(self, fromPath, label): def addFile(self, fromPath, label, fixCount = False):
"""""" """"""
rt = RuTime(eval(__CALLER__())) rt = RuTime(eval(__CALLER__()))
fsize = getsize(fromPath) fsize = getsize(fromPath)
@ -113,7 +114,9 @@ class FSplitter :
elif fsize < 22200000 : minp, maxp = 12, 22 elif fsize < 22200000 : minp, maxp = 12, 22
elif fsize < 48000000 : minp, maxp = 22, 32 elif fsize < 48000000 : minp, maxp = 22, 32
elif fsize < 222000000 : minp, maxp = 32, 42 elif fsize < 222000000 : minp, maxp = 32, 42
if count < minp : count = randomFrom(maxp,minp) if not fixCount :
if count < minp : count = randomFrom(maxp,minp)
else: count = fixCount
if not count > 62 : if not count > 62 :
hlst = self._split(fromPath, self.ck.getHashList(label,count, True)) hlst = self._split(fromPath, self.ck.getHashList(label,count, True))
else : else :
@ -133,6 +136,7 @@ class FSplitter :
p += 1 p += 1
m.close() m.close()
hlst['data'] = sorted(hlst['data'], key=lambda lst: lst[4]) hlst['data'] = sorted(hlst['data'], key=lambda lst: lst[4])
hlst['head'].append(psize)
rt.stop() rt.stop()
return hlst return hlst
@ -250,6 +254,8 @@ class ImpraIndex:
`encdata` : str `encdata` : str
initial content of the index encrypted with rsa initial content of the index encrypted with rsa
""" """
self.ck = ConfigKey('b-gs_bv1qyb_UFUwPWhm8xM3KJU1k2UBNfjgRBQhvkY2KYI_BF0RBTiqoqDaJlaP')
self.fspl = FSplitter(self.ck,join(rsa.dpath,'wk')+sep)
self.rsa = rsa self.rsa = rsa
self.dic = {} self.dic = {}
self.id = id self.id = id
@ -326,6 +332,58 @@ class ImpraIndex:
"""""" """"""
return self.rsa.encrypt(self.toString().replace('\'', self.QUOTE_REPL)) return self.rsa.encrypt(self.toString().replace('\'', self.QUOTE_REPL))
def impracrypt(self):
""""""
data = self.toString().replace('\'', self.QUOTE_REPL)
with open(self.rsa.dpath+'.tmpdecd2', mode='w', encoding='utf-8') as o:
o.write(data)
hlst = self.fspl.addFile(self.rsa.dpath+'.tmpdecd2','.index',12)
print(hlst['head'])
hlst['data'] = sorted(hlst['data'], reverse=True, key=lambda lst: lst[4])
data = b''
encA = []
for row in hlst['data']:
data += get_file_binary(self.fspl.DIR_OUTBOX+row[1]+'.ipr')
encA.append(get_file_binary(self.fspl.DIR_OUTBOX+row[1]+'.ipr'))
print(row)
encData = b2a_base64(data)
with open(self.rsa.dpath+'.tmpencd2', mode='wb') as o:
o.write(encData)
print('-- enc DATA --')
#print(encData)
decData = a2b_base64(encData)
print(type(decData))
print(len(decData))
#print(str(decData))
encB = hlst['head'][1]*[None]
stpos = 0
tsize = 0
print('total size : '+str(len(decData)))
for row in hlst['data']:
thesize = row[2]+hlst['head'][4]+row[3]
print(str(row[4])+' - '+row[1]+' ('+str(thesize)+')')
print('spos = '+str(stpos))
print(stpos)
epos = stpos+row[2]+hlst['head'][4]+row[3]
print('epos = '+str(epos)+'('+str(row[2])+','+str(hlst['head'][4])+','+str(row[3])+') ['+str(thesize)+']')
print(epos)
dd = decData[stpos:epos]
stpos = epos+1
print('----------')
print(dd)
print('-----------------------------------')
tsize += thesize
with open(self.fspl.DIR_OUTBOX+row[1]+'.ipr2', mode='wb') as o:
o.write(dd)
print('total size : '+str(tsize))
print('-- decoding DATA2 --')
for row in hlst['data']:
print(row)
hlst['data'] = sorted(hlst['data'], reverse=False, key=lambda lst: lst[4])
self.fspl.deployFile(hlst, '.dec', True)
def print(self,withoutCatg=False, header=''): def print(self,withoutCatg=False, header=''):
"""Print index content as formated bloc""" """Print index content as formated bloc"""
data = self.toString(withoutCatg,True).split(';') data = self.toString(withoutCatg,True).split(';')

View File

@ -74,6 +74,15 @@ def get_file_content(fileName):
r.close() r.close()
return data return data
def get_file_binary(fileName):
"""Get file content of `fileName`
:Returns: `str`
"""
r = open(fileName, "rb")
data = r.read()
r.close()
return data
def hash_sha256(data): def hash_sha256(data):
"""Get a sha256 hash of str `data` """Get a sha256 hash of str `data`
:Returns: `str` :Returns: `str`