diff paraspace/dexfile.py @ 126:ff6f869273b7

Fix wrong init value for computing checksum
author Thinker K.F. Li <thinker@codemud.net>
date Mon, 08 Aug 2011 17:26:05 +0800
parents b9688a3badaa
children 650244dcdd82
line wrap: on
line diff
--- a/paraspace/dexfile.py	Sun Aug 07 23:02:08 2011 +0800
+++ b/paraspace/dexfile.py	Mon Aug 08 17:26:05 2011 +0800
@@ -1734,14 +1734,32 @@
         children = map_items
         return children
 
+    ## \biref Make SHA1 signature for DEX.
+    #
+    # This method must be called before make_checksum().
+    #
+    def make_signature(self):
+        from hashlib import sha1
+
+        raw = self.to_str()
+        sz = self.header.fileSize
+        nosum = _DEX_header.magic.sizeof(self.header.magic) + \
+            _DEX_header.checksum.sizeof(self.header.checksum) + \
+            _DEX_header.signature.sizeof(self.header.signature)
+        sha = sha1()
+        sha.update(raw[nosum:])
+        signature = sha.digest()
+        self.header.signature.data = signature
+        pass
+
     def make_checksum(self):
-        from paraspace.tools import adler32
+        from paraspace.tools import adler32, adler32_init_value
         
         raw = self.to_str()
         sz = self.header.fileSize
         nosum = _DEX_header.magic.sizeof(self.header.magic) + \
             _DEX_header.checksum.sizeof(self.header.checksum)
-        checksum = adler32(0, raw, nosum, sz - nosum)
+        checksum = adler32(adler32_init_value, raw, nosum, sz - nosum)
         self.header.checksum = checksum
         pass
     pass