From af1c8c1b92c7e5a07b9ef5622dc0a7c471c931ee Mon Sep 17 00:00:00 2001 From: Thomas Waldmann Date: Sun, 22 Mar 2015 20:10:43 +0100 Subject: [PATCH] refactor parser code, just parse, simplify return tuple --- attic/key.py | 24 +++++++++++++----------- attic/testsuite/archiver.py | 2 +- 2 files changed, 14 insertions(+), 12 deletions(-) diff --git a/attic/key.py b/attic/key.py index 6f480e870..902e6b7a8 100644 --- a/attic/key.py +++ b/attic/key.py @@ -307,7 +307,8 @@ class KeyBase(object): return generate(meta, data) def decrypt(self, id, data): - meta, data, compressor, keyer, maccer, cipher = parser(data) + meta, data = parser(data) + compressor, keyer, maccer, cipher = get_implementations(meta) assert isinstance(self, keyer) assert self.maccer_cls is maccer assert self.cipher_cls is cipher @@ -333,7 +334,8 @@ class PlaintextKey(KeyBase): @classmethod def detect(cls, repository, manifest_data): - meta, data, compressor, keyer, maccer, cipher = parser(manifest_data) + meta, data = parser(manifest_data) + compressor, keyer, maccer, cipher = get_implementations(meta) return cls(compressor, maccer, cipher) @@ -351,8 +353,7 @@ class AESKeyBase(KeyBase): only 295 exabytes! """ def extract_nonce(self, payload): - meta, data, compressor, keyer, maccer, cipher = parser(payload) - assert isinstance(self, keyer) + meta, data = parser(payload) nonce = bytes_to_long(meta.stored_iv) return nonce @@ -405,7 +406,8 @@ class PassphraseKey(AESKeyBase): @classmethod def detect(cls, repository, manifest_data): prompt = 'Enter passphrase for %s: ' % repository._location.orig - meta, data, compressor, keyer, maccer, cipher = parser(manifest_data) + meta, data = parser(manifest_data) + compressor, keyer, maccer, cipher = get_implementations(meta) key = cls(compressor, maccer, cipher) passphrase = os.environ.get('ATTIC_PASSPHRASE') if passphrase is None: @@ -437,7 +439,8 @@ class KeyfileKey(AESKeyBase): @classmethod def detect(cls, repository, manifest_data): - meta, data, compressor, keyer, maccer, cipher = parser(manifest_data) + meta, data = parser(manifest_data) + compressor, keyer, maccer, cipher = get_implementations(meta) key = cls(compressor, maccer, cipher) path = cls.find_key_file(repository) prompt = 'Enter passphrase for key file %s: ' % path @@ -637,8 +640,7 @@ def legacy_parser(all_data, key_type): # all rather hardcoded meta = Meta(compr_type=6, key_type=key_type, mac_type=HMAC_SHA256.TYPE, cipher_type=AES_CTR_HMAC.TYPE, hmac=hmac, stored_iv=stored_iv) - compressor, keyer, maccer, cipher = get_implementations(meta) - return meta, data, compressor, keyer, maccer, cipher + return meta, data def parser00(all_data): return legacy_parser(all_data, KeyfileKey.TYPE) @@ -672,8 +674,7 @@ def parser03(all_data): # new & flexible unpacker.feed(all_data[1:]) meta_tuple, data = unpacker.unpack() meta = Meta(*meta_tuple) - compressor, keyer, maccer, cipher = get_implementations(meta) - return meta, data, compressor, keyer, maccer, cipher + return meta, data def parser(data): @@ -689,7 +690,8 @@ def parser(data): def key_factory(repository, manifest_data): - meta, data, compressor, keyer, maccer, cipher = parser(manifest_data) + meta, data = parser(manifest_data) + compressor, keyer, maccer, cipher = get_implementations(meta) return keyer.detect(repository, manifest_data) diff --git a/attic/testsuite/archiver.py b/attic/testsuite/archiver.py index 4d7f40d39..01e0bccd7 100644 --- a/attic/testsuite/archiver.py +++ b/attic/testsuite/archiver.py @@ -383,7 +383,7 @@ class ArchiverTestCase(ArchiverTestCaseBase): hash = sha256(data).digest() if hash not in seen: seen.add(hash) - meta, data, _, _, _, _ = parser(data) + meta, data = parser(data) num_blocks = num_aes_blocks(len(data)) nonce = bytes_to_long(meta.stored_iv) for counter in range(nonce, nonce + num_blocks):