Changeset 769
- Timestamp:
- 12/12/06 22:40:31 (2 years ago)
- Files:
-
- pypdf/trunk/pyPdf/pdf.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
pypdf/trunk/pyPdf/pdf.py
r768 r769 542 542 return U 543 543 544 def _alg33_1(self, password ):544 def _alg33_1(self, password, rev, keylen): 545 545 import md5 546 546 m = md5.new() 547 547 password = (password + self._encryption_padding)[:32] 548 548 m.update(password) 549 # alg 3.3 step 3 goes here, but isn't here yet550 549 md5_hash = m.digest() 551 key = md5_hash[:5] 550 if rev >= 3: 551 for i in range(50): 552 md5_hash = md5.new(md5_hash).digest() 553 key = md5_hash[:keylen] 552 554 return key 553 555 … … 576 578 print "User password accepted" 577 579 else: 578 key = self._alg33_1(password)579 # rev 2 only580 580 encrypt = self.safeGetObject(self.trailer['/Encrypt']) 581 rev = self.safeGetObject(encrypt['/R']) 582 if rev == 2: 583 keylen = 5 584 else: 585 keylen = self.safeGetObject(encrypt['/Length']) / 8 586 key = self._alg33_1(password, rev, keylen) 581 587 real_O = self.safeGetObject(encrypt["/O"]) 582 userpass = utils.RC4_encrypt(key, real_O) 588 if rev == 2: 589 userpass = utils.RC4_encrypt(key, real_O) 590 else: 591 val = real_O 592 for i in range(19, -1, -1): 593 new_key = '' 594 for l in range(len(key)): 595 new_key += chr(ord(key[l]) ^ i) 596 val = utils.RC4_encrypt(new_key, val) 597 userpass = val 583 598 owner_password = self._authenticateUserPassword(userpass) 584 599 if owner_password:
