42
42
# A very generous timeout when it comes to local connections...
43
43
CONNECTION_TIMEOUT = 20.
44
44
45
+ # The hmac module implicitly defaults to using MD5.
46
+ # Support using a stronger algorithm for the challenge/response code:
47
+ HMAC_DIGEST_NAME = 'sha256'
48
+
45
49
_mmap_counter = itertools .count ()
46
50
47
51
default_family = 'AF_INET'
@@ -718,7 +722,7 @@ def deliver_challenge(connection, authkey):
718
722
assert isinstance (authkey , bytes )
719
723
message = os .urandom (MESSAGE_LENGTH )
720
724
connection .send_bytes (CHALLENGE + message )
721
- digest = hmac .new (authkey , message , 'md5' ).digest ()
725
+ digest = hmac .new (authkey , message , HMAC_DIGEST_NAME ).digest ()
722
726
response = connection .recv_bytes (256 ) # reject large message
723
727
if response == digest :
724
728
connection .send_bytes (WELCOME )
@@ -732,7 +736,7 @@ def answer_challenge(connection, authkey):
732
736
message = connection .recv_bytes (256 ) # reject large message
733
737
assert message [:len (CHALLENGE )] == CHALLENGE , 'message = %r' % message
734
738
message = message [len (CHALLENGE ):]
735
- digest = hmac .new (authkey , message , 'md5' ).digest ()
739
+ digest = hmac .new (authkey , message , HMAC_DIGEST_NAME ).digest ()
736
740
connection .send_bytes (digest )
737
741
response = connection .recv_bytes (256 ) # reject large message
738
742
if response != WELCOME :
0 commit comments