Index: tools/telemetry/third_party/gsutil/third_party/rsa/rsa/transform.py |
diff --git a/tools/telemetry/third_party/gsutil/third_party/rsa/rsa/transform.py b/tools/telemetry/third_party/gsutil/third_party/rsa/rsa/transform.py |
deleted file mode 100644 |
index c740b2d275abfd11f3859a853b55239b4f9307ce..0000000000000000000000000000000000000000 |
--- a/tools/telemetry/third_party/gsutil/third_party/rsa/rsa/transform.py |
+++ /dev/null |
@@ -1,220 +0,0 @@ |
-# -*- coding: utf-8 -*- |
-# |
-# Copyright 2011 Sybren A. Stüvel <sybren@stuvel.eu> |
-# |
-# Licensed under the Apache License, Version 2.0 (the "License"); |
-# you may not use this file except in compliance with the License. |
-# You may obtain a copy of the License at |
-# |
-# http://www.apache.org/licenses/LICENSE-2.0 |
-# |
-# Unless required by applicable law or agreed to in writing, software |
-# distributed under the License is distributed on an "AS IS" BASIS, |
-# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
-# See the License for the specific language governing permissions and |
-# limitations under the License. |
- |
-'''Data transformation functions. |
- |
-From bytes to a number, number to bytes, etc. |
-''' |
- |
-from __future__ import absolute_import |
- |
-try: |
- # We'll use psyco if available on 32-bit architectures to speed up code. |
- # Using psyco (if available) cuts down the execution time on Python 2.5 |
- # at least by half. |
- import psyco |
- psyco.full() |
-except ImportError: |
- pass |
- |
-import binascii |
-from struct import pack |
-from rsa import common |
-from rsa._compat import is_integer, b, byte, get_word_alignment, ZERO_BYTE, EMPTY_BYTE |
- |
- |
-def bytes2int(raw_bytes): |
- r'''Converts a list of bytes or an 8-bit string to an integer. |
- |
- When using unicode strings, encode it to some encoding like UTF8 first. |
- |
- >>> (((128 * 256) + 64) * 256) + 15 |
- 8405007 |
- >>> bytes2int('\x80@\x0f') |
- 8405007 |
- |
- ''' |
- |
- return int(binascii.hexlify(raw_bytes), 16) |
- |
- |
-def _int2bytes(number, block_size=None): |
- r'''Converts a number to a string of bytes. |
- |
- Usage:: |
- |
- >>> _int2bytes(123456789) |
- '\x07[\xcd\x15' |
- >>> bytes2int(_int2bytes(123456789)) |
- 123456789 |
- |
- >>> _int2bytes(123456789, 6) |
- '\x00\x00\x07[\xcd\x15' |
- >>> bytes2int(_int2bytes(123456789, 128)) |
- 123456789 |
- |
- >>> _int2bytes(123456789, 3) |
- Traceback (most recent call last): |
- ... |
- OverflowError: Needed 4 bytes for number, but block size is 3 |
- |
- @param number: the number to convert |
- @param block_size: the number of bytes to output. If the number encoded to |
- bytes is less than this, the block will be zero-padded. When not given, |
- the returned block is not padded. |
- |
- @throws OverflowError when block_size is given and the number takes up more |
- bytes than fit into the block. |
- ''' |
- # Type checking |
- if not is_integer(number): |
- raise TypeError("You must pass an integer for 'number', not %s" % |
- number.__class__) |
- |
- if number < 0: |
- raise ValueError('Negative numbers cannot be used: %i' % number) |
- |
- # Do some bounds checking |
- if number == 0: |
- needed_bytes = 1 |
- raw_bytes = [ZERO_BYTE] |
- else: |
- needed_bytes = common.byte_size(number) |
- raw_bytes = [] |
- |
- # You cannot compare None > 0 in Python 3x. It will fail with a TypeError. |
- if block_size and block_size > 0: |
- if needed_bytes > block_size: |
- raise OverflowError('Needed %i bytes for number, but block size ' |
- 'is %i' % (needed_bytes, block_size)) |
- |
- # Convert the number to bytes. |
- while number > 0: |
- raw_bytes.insert(0, byte(number & 0xFF)) |
- number >>= 8 |
- |
- # Pad with zeroes to fill the block |
- if block_size and block_size > 0: |
- padding = (block_size - needed_bytes) * ZERO_BYTE |
- else: |
- padding = EMPTY_BYTE |
- |
- return padding + EMPTY_BYTE.join(raw_bytes) |
- |
- |
-def bytes_leading(raw_bytes, needle=ZERO_BYTE): |
- ''' |
- Finds the number of prefixed byte occurrences in the haystack. |
- |
- Useful when you want to deal with padding. |
- |
- :param raw_bytes: |
- Raw bytes. |
- :param needle: |
- The byte to count. Default \000. |
- :returns: |
- The number of leading needle bytes. |
- ''' |
- leading = 0 |
- # Indexing keeps compatibility between Python 2.x and Python 3.x |
- _byte = needle[0] |
- for x in raw_bytes: |
- if x == _byte: |
- leading += 1 |
- else: |
- break |
- return leading |
- |
- |
-def int2bytes(number, fill_size=None, chunk_size=None, overflow=False): |
- ''' |
- Convert an unsigned integer to bytes (base-256 representation):: |
- |
- Does not preserve leading zeros if you don't specify a chunk size or |
- fill size. |
- |
- .. NOTE: |
- You must not specify both fill_size and chunk_size. Only one |
- of them is allowed. |
- |
- :param number: |
- Integer value |
- :param fill_size: |
- If the optional fill size is given the length of the resulting |
- byte string is expected to be the fill size and will be padded |
- with prefix zero bytes to satisfy that length. |
- :param chunk_size: |
- If optional chunk size is given and greater than zero, pad the front of |
- the byte string with binary zeros so that the length is a multiple of |
- ``chunk_size``. |
- :param overflow: |
- ``False`` (default). If this is ``True``, no ``OverflowError`` |
- will be raised when the fill_size is shorter than the length |
- of the generated byte sequence. Instead the byte sequence will |
- be returned as is. |
- :returns: |
- Raw bytes (base-256 representation). |
- :raises: |
- ``OverflowError`` when fill_size is given and the number takes up more |
- bytes than fit into the block. This requires the ``overflow`` |
- argument to this function to be set to ``False`` otherwise, no |
- error will be raised. |
- ''' |
- if number < 0: |
- raise ValueError("Number must be an unsigned integer: %d" % number) |
- |
- if fill_size and chunk_size: |
- raise ValueError("You can either fill or pad chunks, but not both") |
- |
- # Ensure these are integers. |
- number & 1 |
- |
- raw_bytes = b('') |
- |
- # Pack the integer one machine word at a time into bytes. |
- num = number |
- word_bits, _, max_uint, pack_type = get_word_alignment(num) |
- pack_format = ">%s" % pack_type |
- while num > 0: |
- raw_bytes = pack(pack_format, num & max_uint) + raw_bytes |
- num >>= word_bits |
- # Obtain the index of the first non-zero byte. |
- zero_leading = bytes_leading(raw_bytes) |
- if number == 0: |
- raw_bytes = ZERO_BYTE |
- # De-padding. |
- raw_bytes = raw_bytes[zero_leading:] |
- |
- length = len(raw_bytes) |
- if fill_size and fill_size > 0: |
- if not overflow and length > fill_size: |
- raise OverflowError( |
- "Need %d bytes for number, but fill size is %d" % |
- (length, fill_size) |
- ) |
- raw_bytes = raw_bytes.rjust(fill_size, ZERO_BYTE) |
- elif chunk_size and chunk_size > 0: |
- remainder = length % chunk_size |
- if remainder: |
- padding_size = chunk_size - remainder |
- raw_bytes = raw_bytes.rjust(length + padding_size, ZERO_BYTE) |
- return raw_bytes |
- |
- |
-if __name__ == '__main__': |
- import doctest |
- doctest.testmod() |
- |