Ejemplo n.º 1
0
 def decrypt(self, id, data):
     if data[0] != self.TYPE:
         raise IntegrityError('Invalid encryption envelope')
     data = zlib.decompress(memoryview(data)[1:])
     if id and sha256(data).digest() != id:
         raise IntegrityError('Chunk id verification failed')
     return data
Ejemplo n.º 2
0
 def decrypt(self, id, data):
     if data[0] != self.TYPE:
         raise IntegrityError('Invalid encryption envelope')
     hmac = memoryview(data)[1:33]
     if memoryview(HMAC(self.enc_hmac_key, memoryview(data)[33:], sha256).digest()) != hmac:
         raise IntegrityError('Encryption envelope checksum mismatch')
     self.dec_cipher.reset(iv=PREFIX + data[33:41])
     data = zlib.decompress(self.dec_cipher.decrypt(data[41:]))  # should use memoryview
     if id and HMAC(self.id_key, data, sha256).digest() != id:
         raise IntegrityError('Chunk id verification failed')
     return data
Ejemplo n.º 3
0
 def load(self, filename, passphrase):
     with open(filename, 'r') as fd:
         cdata = a2b_base64(''.join(fd.readlines()[1:]).encode('ascii'))  # .encode needed for Python 3.[0-2]
     data = self.decrypt_key_file(cdata, passphrase)
     if data:
         key = msgpack.unpackb(data)
         if key[b'version'] != 1:
             raise IntegrityError('Invalid key file header')
         self.repository_id = key[b'repository_id']
         self.enc_key = key[b'enc_key']
         self.enc_hmac_key = key[b'enc_hmac_key']
         self.id_key = key[b'id_key']
         self.chunk_seed = key[b'chunk_seed']
         self.path = filename
         return True
Ejemplo n.º 4
0
 def extract_nonce(self, payload):
     if payload[0] != self.TYPE:
         raise IntegrityError('Invalid encryption envelope')
     nonce = bytes_to_long(payload[33:41])
     return nonce