From 7d7a0ef27ed6d2136b3b988b413587a9e2124ef5 Mon Sep 17 00:00:00 2001 From: Hugo Date: Wed, 15 Jan 2020 22:55:47 +0200 Subject: [PATCH 1/2] Fix for Python 3.10 and Python 10: don't compare to sys.version string --- src/ecdsa/util.py | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/ecdsa/util.py b/src/ecdsa/util.py index 5f1c7500..dc913fbf 100644 --- a/src/ecdsa/util.py +++ b/src/ecdsa/util.py @@ -17,7 +17,7 @@ oid_ecPublicKey = (1, 2, 840, 10045, 2, 1) encoded_oid_ecPublicKey = der.encode_oid(*oid_ecPublicKey) -if sys.version > '3': +if sys.version_info >= (3,): def entropy_to_bits(ent_256): """Convert a bytestring to string of 0's and 1's""" return bin(int.from_bytes(ent_256, 'big'))[2:].zfill(len(ent_256)*8) @@ -27,7 +27,7 @@ def entropy_to_bits(ent_256): return ''.join(bin(ord(x))[2:].zfill(8) for x in ent_256) -if sys.version < '2.7': +if sys.version_info < (2, 7): # Can't add a method to a built-in type so we are stuck with this def bit_length(x): return len(bin(x)) - 2 From 0cbfad84fc6c833b8551d6e9e45b348d698379f5 Mon Sep 17 00:00:00 2001 From: Hugo Date: Wed, 15 Jan 2020 22:57:45 +0200 Subject: [PATCH 2/2] Fix for Python 4: replace unsafe six.PY3 with PY2 --- src/ecdsa/keys.py | 4 ++-- src/ecdsa/numbertheory.py | 8 ++++---- src/ecdsa/util.py | 8 ++++---- 3 files changed, 10 insertions(+), 10 deletions(-) diff --git a/src/ecdsa/keys.py b/src/ecdsa/keys.py index 172fdf58..28277db4 100644 --- a/src/ecdsa/keys.py +++ b/src/ecdsa/keys.py @@ -68,7 +68,7 @@ import binascii from hashlib import sha1 -from six import PY3, b +from six import PY2, b from . import ecdsa from . import der from . import rfc6979 @@ -823,7 +823,7 @@ def from_pem(cls, string, hashfunc=sha1): """ # the privkey pem may have multiple sections, commonly it also has # "EC PARAMETERS", we need just "EC PRIVATE KEY". - if PY3 and isinstance(string, str): + if not PY2 and isinstance(string, str): string = string.encode() privkey_pem = string[string.index(b("-----BEGIN EC PRIVATE KEY-----")):] return cls.from_der(der.unpem(privkey_pem), hashfunc) diff --git a/src/ecdsa/numbertheory.py b/src/ecdsa/numbertheory.py index b300440c..0fa02cba 100644 --- a/src/ecdsa/numbertheory.py +++ b/src/ecdsa/numbertheory.py @@ -11,7 +11,7 @@ from __future__ import division -from six import integer_types, PY3 +from six import integer_types, PY2 from six.moves import reduce try: xrange @@ -198,11 +198,11 @@ def square_root_mod_prime(a, p): return (2 * a * pow(4 * a, (p - 5) // 8, p)) % p raise RuntimeError("Shouldn't get here.") - if PY3: - range_top = p - else: + if PY2: # xrange on python2 can take integers representable as C long only range_top = min(0x7fffffff, p) + else: + range_top = p for b in xrange(2, range_top): if jacobi(b * b - 4 * a, p) == -1: f = (a, -b, 1) diff --git a/src/ecdsa/util.py b/src/ecdsa/util.py index dc913fbf..86f51ac3 100644 --- a/src/ecdsa/util.py +++ b/src/ecdsa/util.py @@ -5,7 +5,7 @@ import binascii import sys from hashlib import sha256 -from six import PY3, int2byte, b, next +from six import PY2, int2byte, b, next from . import der from ._compat import normalise_bytes @@ -76,10 +76,10 @@ def __init__(self, seed): def __call__(self, numbytes): a = [next(self.generator) for i in range(numbytes)] - if PY3: - return bytes(a) - else: + if PY2: return "".join(a) + else: + return bytes(a) def block_generator(self, seed): counter = 0