return partial (fn, params)
-STATE_DEAD = 0
-STATE_LIVE = 1
+STATE_FRESH = 0
+STATE_DEAD = 1
+STATE_LIVE = 2
class Crypto (object):
"""
stats = { "in" : 0
, "out" : 0
, "obj" : 0 }
- state = STATE_DEAD
+
+ state = STATE_FRESH
+ ctsize = -1
+ ptsize = -1
def __init__ (self, *al, **akv):
self.set_parameters (*al, **akv)
if paramversion is None and nacl is None:
# postpone until first header is available
return
- self.nacl = nacl
- self.paramversion = paramversion
- kdf = kdf_by_version (paramversion)
+ kdf = kdf_by_version (paramversion)
if kdf is not None:
self.key, self.nacl = kdf (password, nacl)
if self.pfx is None:
self.pfx = os.urandom(8)
+ self.nacl = nacl
+ self.paramversion = paramversion
+
def process (self, buf):
if self.aes is not None:
return b""
+ def next (self):
+ self.ctsize = 0
+ self.ptsize = 0
+ self.stats ["obj"] += 1
+ self.state = STATE_LIVE
+
+
def counters (self):
return self.stats ["obj"], self.stats ["in"], self.stats ["out"]
curobj = None
hdrdum = None
- ctsize = -1 # per object from .next() → .done()
def __init__ (self, password, paramversion, nacl=None,
counter=AES_GCM_IV_CNT_DATA):
self.iv = self.iv_make()
self.curobj = (filename, version, paramversion, nacl or self.nacl)
self.cnt += 1
- self.ctsize = 0
self.aes = Cipher \
( algorithms.AES (self.key)
, modes.GCM (self.iv)
#self.aes.authenticate_additional_data (str.encode (aad))
self.hdrdum = hdr_make_dummy (filename)
- self.stats ["obj"] += 1
- self.state = STATE_LIVE
+ super().next ()
return self.hdrdum
def process (self, buf):
+ self.ptsize += len (buf)
data = super().process (buf)
self.ctsize += len (data)
return data
pfx = None
tag = None # GCM tag, part of header
- ctsize = -1
- ptsize = -1
def __init__ (self, password, paramversion=None, nacl=None, counter=None):
super().__init__ (password, paramversion, nacl, counter=counter)
# XXX figure out what we want for AAD. Filename (not known to stream)?
# Size?
#self.aes.authenticate_additional_data (str.encode (aad))
- ctsize = 0
- ptsize = 0
- self.stats ["obj"] += 1
- self.state = STATE_LIVE
-
def next_in_source (self, tarinfo, source):
ok, hdr = hdr_read_stream (source)