Changeset 767
- Timestamp:
- 12/12/06 22:11:22 (2 years ago)
- Files:
-
- pypdf/trunk/pyPdf/pdf.py (modified) (2 diffs)
Legend:
- Unmodified
- Added
- Removed
- Modified
- Copied
- Moved
pypdf/trunk/pyPdf/pdf.py
r766 r767 532 532 # if document metadata is not being encrypted, pass \xff\xff\xff\xff into hash 533 533 md5_hash = m.digest() 534 if rev >= 3:535 for i in range(50):536 m = md5.new()537 m.update(md5_hash[:keylen])538 md5_hash = m.digest()534 #if rev >= 3: 535 # for i in range(50): 536 # m = md5.new() 537 # m.update(md5_hash[:keylen]) 538 # md5_hash = m.digest() 539 539 return md5_hash[:keylen] 540 540 … … 547 547 return U 548 548 549 def _alg33_1(self, password): 550 import md5 551 m = md5.new() 552 password = (password + self._encryption_padding)[:32] 553 m.update(password) 554 # alg 3.3 step 3 goes here, but isn't here yet 555 md5_hash = m.digest() 556 key = md5_hash[:5] 557 return key 558 549 559 ## 550 560 # Decrypt file. 551 561 def decrypt(self, password): 562 user_password = self._authenticateUserPassword(password) 563 if user_password: 564 print "User password accepted" 565 else: 566 key = self._alg33_1(password) 567 # rev 2 only 568 encrypt = self.safeGetObject(self.trailer['/Encrypt']) 569 real_O = self.safeGetObject(encrypt["/O"]) 570 userpass = utils.RC4_encrypt(key, real_O) 571 owner_password = self._authenticateUserPassword(userpass) 572 if owner_password: 573 print "Owner password accepted" 574 else: 575 print "Password auth failed." 576 577 def _authenticateUserPassword(self, password): 578 encrypt = self.safeGetObject(self.trailer['/Encrypt']) 579 real_U = self.safeGetObject(encrypt['/U']) 552 580 U = self._alg34(password) 553 print "calc U: %r" %U554 print "file U: %r" % self.safeGetObject(self.trailer['/Encrypt'])['/U'] 581 return U == real_U 582 555 583 556 584 def getRectangle(self, name, defaults):
