+def check_hashes ():
+ # Make sure we recognise the format of the Files: field
+ format = changes.get("format", "0.0").split(".",1)
+ if len(format) == 2:
+ format = int(format[0]), int(format[1])
+ else:
+ format = int(float(format[0])), 0
+
+ check_hash(".changes", files, "md5sum", apt_pkg.md5sum)
+ check_hash(".dsc", dsc_files, "md5sum", apt_pkg.md5sum)
+
+ # (hashname, function, originate)
+ # If originate is true, we have to calculate it because
+ # the changes file version is too early for it to be
+ # included
+ hashes = [("sha1", apt_pkg.sha1sum, False),
+ ("sha256", apt_pkg.sha256sum, False)]
+
+ if format <= (1,8):
+ hashes["sha1"] = True
+ hashes["sha256"] = True
+
+ for x in changes:
+ if x.startswith("checksum-"):
+ h = x.split("-",1)[1]
+ if h not in dict(hashes):
+ reject("Unsupported checksum field in .changes" % (h))
+
+ for x in dsc:
+ if x.startswith("checksum-"):
+ h = x.split("-",1)[1]
+ if h not in dict(hashes):
+ reject("Unsupported checksum field in .dsc" % (h))
+
+ for h,f,o in hashes:
+ try:
+ fs = utils.build_file_list(changes, 0, "checksums-%s" % h, h)
+ if o:
+ create_hash(fs, h, f, files)
+ else:
+ check_hash(".changes %s" % (h), fs, h, f, files)
+ except NoFilesFieldError:
+ reject("No Checksums-%s: field in .changes" % (h))
+ except UnknownFormatError, format:
+ reject("%s: unknown format of .changes" % (format))
+ except ParseChangesError, line:
+ reject("parse error for Checksums-%s in .changes, can't grok: %s." % (h, line))
+
+ if "source" not in changes["architecture"]: continue
+
+ try:
+ fs = utils.build_file_list(dsc, 1, "checksums-%s" % h, h)
+ if o:
+ create_hash(fs, h, f, dsc_files)
+ else:
+ check_hash(".dsc %s" % (h), fs, h, f, dsc_files)
+ except UnknownFormatError, format:
+ reject("%s: unknown format of .dsc" % (format))
+ except NoFilesFieldError:
+ reject("No Checksums-%s: field in .dsc" % (h))
+ except ParseChangesError, line:
+ reject("parse error for Checksums-%s in .dsc, can't grok: %s." % (h, line))
+
+################################################################################
+
+def create_hash (lfiles, key, testfn, basedict = None):
+ for f in lfiles.keys():