HDR_OFF_NACL = HDR_OFF_PARAMVERSION + I2N_HDR_SIZE_PARAMVERSION
HDR_OFF_IV = HDR_OFF_NACL + I2N_HDR_SIZE_NACL
HDR_OFF_CTSIZE = HDR_OFF_IV + I2N_HDR_SIZE_IV
+HDR_CTSIZE_DUMMY = 0xffffFFFFffffFFFF
FMT_UINT16_LE = "<H"
FMT_UINT64_LE = "<Q"
def hdr_from_params (version, paramversion, nacl, iv, ctsize=None):
if ctsize is None:
- ctsize = 0xffffFFFFffffFFFF # dummy, overwritten later
+ ctsize = HDR_CTSIZE_DUMMY # dummy, overwritten later
buf = bytearray (I2N_HDR_SIZE)
bufv = memoryview (buf)
self.pfx = pfx
- def next (self, aad=None, iv=None):
- self.aes.authenticate_additional_data (aad)
-
-
def process (self, buf):
self.aes.update (buf)
return struct.pack("<8sL", self.pfx, self.cnt % 0xffFFffFF)
- def next (self, filename, ctsize):
+ def next (self, filename):
self.cnt += 1
- aad = "%.20x|%s" % (ctsize, filename)
- iv = iv_make()
+ aad = "%s" % filename
+ iv = self.iv_make()
self.aes = Cipher \
( algorithms.AES (self.key)
, modes.GCM (iv)
, backend = default_backend ()) \
.encryptor ()
- return super().next(aad)
+ return self.aes.authenticate_additional_data (aad)
def done (self):
super().__init__ (password, paramversion, nacl)
- def next (self, filename, hdr):
+ def next (self, hdr):
self.cnt += 1
- aad = "%0.20x|%s" % (hdr["ctsize"], filename)
print("I2N: got header “%s”" % crypto.hdr_fmt (hdr))
self.aes = Cipher \
( algorithms.AES (key)
, modes.GCM (hdr["iv"])
, backend = default_backend ()) \
. decryptor ()
- return super().next(aad)
def next_in_source (self, tarinfo, source):
if ok is False:
raise DecryptionError("Irrecoverable error reading header from "
"%r" % source)
- return self.next(tarinfo.name, hdr)
+ return self.next(hdr)
- def done (self, tag):
+ def done (self, filename, tag):
+ aad = "%s" % filename
+ self.aes.authenticate_additional_data (aad)
return self.aes.finalize_with_tag (tag)