move int_from_bytes so we can use it elsewhere

This commit is contained in:
Paul Kehrer 2015-06-27 22:28:53 -05:00
parent 6e355b5ded
commit bb81b34c67
2 changed files with 30 additions and 23 deletions

View file

@ -122,8 +122,12 @@ def _load_ssh_ecdsa_public_key(expected_key_type, decoded_data, backend):
if len(data) != 1 + 2 * ((curve.key_size + 7) // 8):
raise ValueError("Malformed key bytes")
x = _int_from_bytes(data[1:1 + (curve.key_size + 7) // 8], byteorder='big')
y = _int_from_bytes(data[1 + (curve.key_size + 7) // 8:], byteorder='big')
x = utils.int_from_bytes(
data[1:1 + (curve.key_size + 7) // 8], byteorder='big'
)
y = utils.int_from_bytes(
data[1 + (curve.key_size + 7) // 8:], byteorder='big'
)
return ec.EllipticCurvePublicNumbers(x, y, curve).public_key(backend)
@ -145,27 +149,9 @@ def _read_next_mpint(data):
"""
mpint_data, rest = _read_next_string(data)
return _int_from_bytes(mpint_data, byteorder='big', signed=False), rest
if hasattr(int, "from_bytes"):
_int_from_bytes = int.from_bytes
else:
def _int_from_bytes(data, byteorder, signed=False):
assert byteorder == 'big'
assert not signed
if len(data) % 4 != 0:
data = (b'\x00' * (4 - (len(data) % 4))) + data
result = 0
while len(data) > 0:
digit, = struct.unpack('>I', data[:4])
result = (result << 32) + digit
data = data[4:]
return result
return (
utils.int_from_bytes(mpint_data, byteorder='big', signed=False), rest
)
class Encoding(Enum):

View file

@ -6,6 +6,7 @@ from __future__ import absolute_import, division, print_function
import abc
import inspect
import struct
import sys
import warnings
@ -25,6 +26,26 @@ def register_interface(iface):
return register_decorator
if hasattr(int, "from_bytes"):
int_from_bytes = int.from_bytes
else:
def int_from_bytes(data, byteorder, signed=False):
assert byteorder == 'big'
assert not signed
if len(data) % 4 != 0:
data = (b'\x00' * (4 - (len(data) % 4))) + data
result = 0
while len(data) > 0:
digit, = struct.unpack('>I', data[:4])
result = (result << 32) + digit
data = data[4:]
return result
class InterfaceNotImplemented(Exception):
pass