Mercurial > hg
comparison hgext/largefiles/lfutil.py @ 44062:2d49482d0dd4
hgext: replace references to hashlib.sha1 with hashutil.sha1
When in a non-pure build of Mercurial, this will provide protections
against SHA1 collision attacks.
Differential Revision: https://phab.mercurial-scm.org/D7851
author | Augie Fackler <augie@google.com> |
---|---|
date | Mon, 13 Jan 2020 14:12:31 -0500 |
parents | a02e4c12ae60 |
children | ca82929e433d |
comparison
equal
deleted
inserted
replaced
44061:cbc5755df6bf | 44062:2d49482d0dd4 |
---|---|
9 '''largefiles utility code: must not import other modules in this package.''' | 9 '''largefiles utility code: must not import other modules in this package.''' |
10 from __future__ import absolute_import | 10 from __future__ import absolute_import |
11 | 11 |
12 import contextlib | 12 import contextlib |
13 import copy | 13 import copy |
14 import hashlib | |
15 import os | 14 import os |
16 import stat | 15 import stat |
17 | 16 |
18 from mercurial.i18n import _ | 17 from mercurial.i18n import _ |
19 from mercurial.node import hex | 18 from mercurial.node import hex |
30 scmutil, | 29 scmutil, |
31 sparse, | 30 sparse, |
32 util, | 31 util, |
33 vfs as vfsmod, | 32 vfs as vfsmod, |
34 ) | 33 ) |
34 from mercurial.utils import hashutil | |
35 | 35 |
36 shortname = b'.hglf' | 36 shortname = b'.hglf' |
37 shortnameslash = shortname + b'/' | 37 shortnameslash = shortname + b'/' |
38 longname = b'largefiles' | 38 longname = b'largefiles' |
39 | 39 |
430 | 430 |
431 | 431 |
432 def copyandhash(instream, outfile): | 432 def copyandhash(instream, outfile): |
433 '''Read bytes from instream (iterable) and write them to outfile, | 433 '''Read bytes from instream (iterable) and write them to outfile, |
434 computing the SHA-1 hash of the data along the way. Return the hash.''' | 434 computing the SHA-1 hash of the data along the way. Return the hash.''' |
435 hasher = hashlib.sha1(b'') | 435 hasher = hashutil.sha1(b'') |
436 for data in instream: | 436 for data in instream: |
437 hasher.update(data) | 437 hasher.update(data) |
438 outfile.write(data) | 438 outfile.write(data) |
439 return hex(hasher.digest()) | 439 return hex(hasher.digest()) |
440 | 440 |
470 | 470 |
471 | 471 |
472 def hexsha1(fileobj): | 472 def hexsha1(fileobj): |
473 """hexsha1 returns the hex-encoded sha1 sum of the data in the file-like | 473 """hexsha1 returns the hex-encoded sha1 sum of the data in the file-like |
474 object data""" | 474 object data""" |
475 h = hashlib.sha1() | 475 h = hashutil.sha1() |
476 for chunk in util.filechunkiter(fileobj): | 476 for chunk in util.filechunkiter(fileobj): |
477 h.update(chunk) | 477 h.update(chunk) |
478 return hex(h.digest()) | 478 return hex(h.digest()) |
479 | 479 |
480 | 480 |