From b0e035c24fa062cd55cfd55ffc12bc3aa60a4ef6 Mon Sep 17 00:00:00 2001 From: Yusuke Shinyama Date: Tue, 15 Jul 2014 21:38:29 +0900 Subject: [PATCH] Style fix: always have an explicit return. --- pdfminer/pdfdocument.py | 17 ++++++++++++++++- 1 file changed, 16 insertions(+), 1 deletion(-) diff --git a/pdfminer/pdfdocument.py b/pdfminer/pdfdocument.py index 0072584..2c3c274 100644 --- a/pdfminer/pdfdocument.py +++ b/pdfminer/pdfdocument.py @@ -284,7 +284,8 @@ class PDFXRefStream(PDFBaseXRef): ## class PDFStandardSecurityHandler(object): - PASSWORD_PADDING = b'(\xbfN^Nu\x8aAd\x00NV\xff\xfa\x01\x08..\x00\xb6\xd0h>\x80/\x0c\xa9\xfedSiz' + PASSWORD_PADDING = (b'(\xbfN^Nu\x8aAd\x00NV\xff\xfa\x01\x08' + b'..\x00\xb6\xd0h>\x80/\x0c\xa9\xfedSiz') supported_revisions = (2, 3) def __init__(self, docid, param, password=b''): @@ -292,12 +293,14 @@ class PDFStandardSecurityHandler(object): self.param = param self.password = password self.init() + return def init(self): self.init_params() if self.r not in self.supported_revisions: raise PDFEncryptionError('Unsupported revision: param=%r' % self.param) self.init_key() + return def init_params(self): self.v = int_value(self.param.get('V', 0)) @@ -306,11 +309,13 @@ class PDFStandardSecurityHandler(object): self.o = str_value(self.param['O']) self.u = str_value(self.param['U']) self.length = int_value(self.param.get('Length', 40)) + return def init_key(self): self.key = self.authenticate(self.password) if self.key is None: raise PDFPasswordIncorrect + return def is_printable(self): return bool(self.p & 4) @@ -364,6 +369,8 @@ class PDFStandardSecurityHandler(object): key = self.compute_encryption_key(password) if self.verify_encryption_key(key): return key + else: + return None def verify_encryption_key(self, key): # Algorithm 3.6 @@ -424,12 +431,15 @@ class PDFStandardSecurityHandlerV4(PDFStandardSecurityHandler): self.cfm['Identity'] = self.decrypt_identity if self.strf not in self.cfm: raise PDFEncryptionError('Undefined crypt filter: param=%r' % self.param) + return def get_cfm(self, name): if name == 'V2': return self.decrypt_rc4 elif name == 'AESV2': return self.decrypt_aes128 + else: + return None def decrypt(self, objid, genno, data, attrs=None, name=None): if not self.encrypt_metadata and attrs is not None: @@ -465,10 +475,13 @@ class PDFStandardSecurityHandlerV5(PDFStandardSecurityHandlerV4): self.u_hash = self.u[:32] self.u_validation_salt = self.u[32:40] self.u_key_salt = self.u[40:] + return def get_cfm(self, name): if name == 'AESV3': return self.decrypt_aes256 + else: + return None def authenticate(self, password): password = password.encode('utf-8')[:127] @@ -486,6 +499,7 @@ class PDFStandardSecurityHandlerV5(PDFStandardSecurityHandlerV4): hash = SHA256.new(password) hash.update(self.u_key_salt) return AES.new(hash.digest(), mode=AES.MODE_CBC, IV=b'\x00' * 16).decrypt(self.ue) + return None def decrypt_aes256(self, objid, genno, data): return AES.new(self.key, mode=AES.MODE_CBC, IV=data[:16]).decrypt(data[16:]) @@ -515,6 +529,7 @@ class PDFDocument(object): security_handler_registry[4] = PDFStandardSecurityHandlerV4 if SHA256 is not None: security_handler_registry[5] = PDFStandardSecurityHandlerV5 + debug = 0 def __init__(self, parser, password=b'', caching=True, fallback=True):