123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566 |
- # -*- test-case-name: twisted.conch.test.test_common -*-
- # Copyright (c) Twisted Matrix Laboratories.
- # See LICENSE for details.
- """
- Backported functions from Cryptography to support older versions.
- These functions can be obtained from C{cryptography.utils} instead, from
- version 1.1 onwards.
- """
- from __future__ import absolute_import, division
- import binascii
- import struct
- def intFromBytes(data, byteorder, signed=False):
- """
- Convert an integer in packed form to a Python L{int}.
- @type data: L{bytes}
- @param data: The packed integer.
- @type byteorder: L{str}
- @param byteorder: The byte order the data is in. Only C{'big'} is
- currently supported.
- @type signed: L{bool}
- @param signed: C{True} for signed, C{False} for unsigned.
- @rtype: L{int}
- @return: The decoded integer.
- """
- 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
- def intToBytes(integer, length=None):
- """
- Convert a Python L{int} to packed data.
- @type integer: L{int}
- @param integer: The integer to pack.
- @type length: L{int} or L{None}
- @param length: The length to pad the result to, or L{None} for no padding.
- @rtype: L{bytes}
- @return: The packed integer.
- """
- hexString = '%x' % (integer,)
- if length is None:
- n = len(hexString)
- else:
- n = length * 2
- return binascii.unhexlify(hexString.zfill(n + (n & 1)))
|