Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(949)

Unified Diff: tools/telemetry/third_party/gsutil/third_party/crcmod/python3/crcmod/crcmod.py

Issue 1260493004: Revert "Add gsutil 4.13 to telemetry/third_party" (Closed) Base URL: https://chromium.googlesource.com/chromium/src.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View side-by-side diff with in-line comments
Download patch
Index: tools/telemetry/third_party/gsutil/third_party/crcmod/python3/crcmod/crcmod.py
diff --git a/tools/telemetry/third_party/gsutil/third_party/crcmod/python3/crcmod/crcmod.py b/tools/telemetry/third_party/gsutil/third_party/crcmod/python3/crcmod/crcmod.py
deleted file mode 100644
index ec5adaf41f16d80a92e13847986c5e7b18cc12a9..0000000000000000000000000000000000000000
--- a/tools/telemetry/third_party/gsutil/third_party/crcmod/python3/crcmod/crcmod.py
+++ /dev/null
@@ -1,457 +0,0 @@
-#-----------------------------------------------------------------------------
-# Copyright (c) 2010 Raymond L. Buvel
-# Copyright (c) 2010 Craig McQueen
-#
-# Permission is hereby granted, free of charge, to any person obtaining a copy
-# of this software and associated documentation files (the "Software"), to deal
-# in the Software without restriction, including without limitation the rights
-# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
-# copies of the Software, and to permit persons to whom the Software is
-# furnished to do so, subject to the following conditions:
-#
-# The above copyright notice and this permission notice shall be included in
-# all copies or substantial portions of the Software.
-#
-# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
-# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
-# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
-# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
-# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
-# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
-# SOFTWARE.
-#-----------------------------------------------------------------------------
-'''crcmod is a Python module for gererating objects that compute the Cyclic
-Redundancy Check. Any 8, 16, 24, 32, or 64 bit polynomial can be used.
-
-The following are the public components of this module.
-
-Crc -- a class that creates instances providing the same interface as the
-algorithms in the hashlib module in the Python standard library. These
-instances also provide a method for generating a C/C++ function to compute
-the CRC.
-
-mkCrcFun -- create a Python function to compute the CRC using the specified
-polynomial and initial value. This provides a much simpler interface if
-all you need is a function for CRC calculation.
-'''
-
-__all__ = '''mkCrcFun Crc
-'''.split()
-
-# Select the appropriate set of low-level CRC functions for this installation.
-# If the extension module was not built, drop back to the Python implementation
-# even though it is significantly slower.
-try:
- import crcmod._crcfunext as _crcfun
- _usingExtension = True
-except ImportError:
- import crcmod._crcfunpy as _crcfun
- _usingExtension = False
-
-import sys, struct
-
-#-----------------------------------------------------------------------------
-class Crc:
- '''Compute a Cyclic Redundancy Check (CRC) using the specified polynomial.
-
- Instances of this class have the same interface as the algorithms in the
- hashlib module in the Python standard library. See the documentation of
- this module for examples of how to use a Crc instance.
-
- The string representation of a Crc instance identifies the polynomial,
- initial value, XOR out value, and the current CRC value. The print
- statement can be used to output this information.
-
- If you need to generate a C/C++ function for use in another application,
- use the generateCode method. If you need to generate code for another
- language, subclass Crc and override the generateCode method.
-
- The following are the parameters supplied to the constructor.
-
- poly -- The generator polynomial to use in calculating the CRC. The value
- is specified as a Python integer. The bits in this integer are the
- coefficients of the polynomial. The only polynomials allowed are those
- that generate 8, 16, 24, 32, or 64 bit CRCs.
-
- initCrc -- Initial value used to start the CRC calculation. This initial
- value should be the initial shift register value XORed with the final XOR
- value. That is equivalent to the CRC result the algorithm should return for
- a zero-length string. Defaults to all bits set because that starting value
- will take leading zero bytes into account. Starting with zero will ignore
- all leading zero bytes.
-
- rev -- A flag that selects a bit reversed algorithm when True. Defaults to
- True because the bit reversed algorithms are more efficient.
-
- xorOut -- Final value to XOR with the calculated CRC value. Used by some
- CRC algorithms. Defaults to zero.
- '''
- def __init__(self, poly, initCrc=~0, rev=True, xorOut=0, initialize=True):
- if not initialize:
- # Don't want to perform the initialization when using new or copy
- # to create a new instance.
- return
-
- (sizeBits, initCrc, xorOut) = _verifyParams(poly, initCrc, xorOut)
- self.digest_size = sizeBits//8
- self.initCrc = initCrc
- self.xorOut = xorOut
-
- self.poly = poly
- self.reverse = rev
-
- (crcfun, table) = _mkCrcFun(poly, sizeBits, initCrc, rev, xorOut)
- self._crc = crcfun
- self.table = table
-
- self.crcValue = self.initCrc
-
- def __str__(self):
- lst = []
- lst.append('poly = 0x%X' % self.poly)
- lst.append('reverse = %s' % self.reverse)
- fmt = '0x%%0%dX' % (self.digest_size*2)
- lst.append('initCrc = %s' % (fmt % self.initCrc))
- lst.append('xorOut = %s' % (fmt % self.xorOut))
- lst.append('crcValue = %s' % (fmt % self.crcValue))
- return '\n'.join(lst)
-
- def new(self, arg=None):
- '''Create a new instance of the Crc class initialized to the same
- values as the original instance. The current CRC is set to the initial
- value. If a string is provided in the optional arg parameter, it is
- passed to the update method.
- '''
- n = Crc(poly=None, initialize=False)
- n._crc = self._crc
- n.digest_size = self.digest_size
- n.initCrc = self.initCrc
- n.xorOut = self.xorOut
- n.table = self.table
- n.crcValue = self.initCrc
- n.reverse = self.reverse
- n.poly = self.poly
- if arg is not None:
- n.update(arg)
- return n
-
- def copy(self):
- '''Create a new instance of the Crc class initialized to the same
- values as the original instance. The current CRC is set to the current
- value. This allows multiple CRC calculations using a common initial
- string.
- '''
- c = self.new()
- c.crcValue = self.crcValue
- return c
-
- def update(self, data):
- '''Update the current CRC value using the string specified as the data
- parameter.
- '''
- self.crcValue = self._crc(data, self.crcValue)
-
- def digest(self):
- '''Return the current CRC value as a string of bytes. The length of
- this string is specified in the digest_size attribute.
- '''
- n = self.digest_size
- crc = self.crcValue
- lst = []
- while n > 0:
- lst.append(crc & 0xFF)
- crc = crc >> 8
- n -= 1
- lst.reverse()
- return bytes(lst)
-
- def hexdigest(self):
- '''Return the current CRC value as a string of hex digits. The length
- of this string is twice the digest_size attribute.
- '''
- n = self.digest_size
- crc = self.crcValue
- lst = []
- while n > 0:
- lst.append('%02X' % (crc & 0xFF))
- crc = crc >> 8
- n -= 1
- lst.reverse()
- return ''.join(lst)
-
- def generateCode(self, functionName, out, dataType=None, crcType=None):
- '''Generate a C/C++ function.
-
- functionName -- String specifying the name of the function.
-
- out -- An open file-like object with a write method. This specifies
- where the generated code is written.
-
- dataType -- An optional parameter specifying the data type of the input
- data to the function. Defaults to UINT8.
-
- crcType -- An optional parameter specifying the data type of the CRC
- value. Defaults to one of UINT8, UINT16, UINT32, or UINT64 depending
- on the size of the CRC value.
- '''
- if dataType is None:
- dataType = 'UINT8'
-
- if crcType is None:
- size = 8*self.digest_size
- if size == 24:
- size = 32
- crcType = 'UINT%d' % size
-
- if self.digest_size == 1:
- # Both 8-bit CRC algorithms are the same
- crcAlgor = 'table[*data ^ (%s)crc]'
- elif self.reverse:
- # The bit reverse algorithms are all the same except for the data
- # type of the crc variable which is specified elsewhere.
- crcAlgor = 'table[*data ^ (%s)crc] ^ (crc >> 8)'
- else:
- # The forward CRC algorithms larger than 8 bits have an extra shift
- # operation to get the high byte.
- shift = 8*(self.digest_size - 1)
- crcAlgor = 'table[*data ^ (%%s)(crc >> %d)] ^ (crc << 8)' % shift
-
- fmt = '0x%%0%dX' % (2*self.digest_size)
- if self.digest_size <= 4:
- fmt = fmt + 'U,'
- else:
- # Need the long long type identifier to keep gcc from complaining.
- fmt = fmt + 'ULL,'
-
- # Select the number of entries per row in the output code.
- n = {1:8, 2:8, 3:4, 4:4, 8:2}[self.digest_size]
-
- lst = []
- for i, val in enumerate(self.table):
- if (i % n) == 0:
- lst.append('\n ')
- lst.append(fmt % val)
-
- poly = 'polynomial: 0x%X' % self.poly
- if self.reverse:
- poly = poly + ', bit reverse algorithm'
-
- if self.xorOut:
- # Need to remove the comma from the format.
- preCondition = '\n crc = crc ^ %s;' % (fmt[:-1] % self.xorOut)
- postCondition = preCondition
- else:
- preCondition = ''
- postCondition = ''
-
- if self.digest_size == 3:
- # The 24-bit CRC needs to be conditioned so that only 24-bits are
- # used from the 32-bit variable.
- if self.reverse:
- preCondition += '\n crc = crc & 0xFFFFFFU;'
- else:
- postCondition += '\n crc = crc & 0xFFFFFFU;'
-
-
- parms = {
- 'dataType' : dataType,
- 'crcType' : crcType,
- 'name' : functionName,
- 'crcAlgor' : crcAlgor % dataType,
- 'crcTable' : ''.join(lst),
- 'poly' : poly,
- 'preCondition' : preCondition,
- 'postCondition' : postCondition,
- }
- out.write(_codeTemplate % parms)
-
-#-----------------------------------------------------------------------------
-def mkCrcFun(poly, initCrc=~0, rev=True, xorOut=0):
- '''Return a function that computes the CRC using the specified polynomial.
-
- poly -- integer representation of the generator polynomial
- initCrc -- default initial CRC value
- rev -- when true, indicates that the data is processed bit reversed.
- xorOut -- the final XOR value
-
- The returned function has the following user interface
- def crcfun(data, crc=initCrc):
- '''
-
- # First we must verify the params
- (sizeBits, initCrc, xorOut) = _verifyParams(poly, initCrc, xorOut)
- # Make the function (and table), return the function
- return _mkCrcFun(poly, sizeBits, initCrc, rev, xorOut)[0]
-
-#-----------------------------------------------------------------------------
-# Naming convention:
-# All function names ending with r are bit reverse variants of the ones
-# without the r.
-
-#-----------------------------------------------------------------------------
-# Check the polynomial to make sure that it is acceptable and return the number
-# of bits in the CRC.
-
-def _verifyPoly(poly):
- msg = 'The degree of the polynomial must be 8, 16, 24, 32 or 64'
- for n in (8,16,24,32,64):
- low = 1<<n
- high = low*2
- if low <= poly < high:
- return n
- raise ValueError(msg)
-
-#-----------------------------------------------------------------------------
-# Bit reverse the input value.
-
-def _bitrev(x, n):
- y = 0
- for i in range(n):
- y = (y << 1) | (x & 1)
- x = x >> 1
- return y
-
-#-----------------------------------------------------------------------------
-# The following functions compute the CRC for a single byte. These are used
-# to build up the tables needed in the CRC algorithm. Assumes the high order
-# bit of the polynomial has been stripped off.
-
-def _bytecrc(crc, poly, n):
- mask = 1<<(n-1)
- for i in range(8):
- if crc & mask:
- crc = (crc << 1) ^ poly
- else:
- crc = crc << 1
- mask = (1<<n) - 1
- crc = crc & mask
- return crc
-
-def _bytecrc_r(crc, poly, n):
- for i in range(8):
- if crc & 1:
- crc = (crc >> 1) ^ poly
- else:
- crc = crc >> 1
- mask = (1<<n) - 1
- crc = crc & mask
- return crc
-
-#-----------------------------------------------------------------------------
-# The following functions compute the table needed to compute the CRC. The
-# table is returned as a list. Note that the array module does not support
-# 64-bit integers on a 32-bit architecture as of Python 2.3.
-#
-# These routines assume that the polynomial and the number of bits in the CRC
-# have been checked for validity by the caller.
-
-def _mkTable(poly, n):
- mask = (1<<n) - 1
- poly = poly & mask
- table = [_bytecrc(i<<(n-8),poly,n) for i in range(256)]
- return table
-
-def _mkTable_r(poly, n):
- mask = (1<<n) - 1
- poly = _bitrev(poly & mask, n)
- table = [_bytecrc_r(i,poly,n) for i in range(256)]
- return table
-
-#-----------------------------------------------------------------------------
-# Map the CRC size onto the functions that handle these sizes.
-
-_sizeMap = {
- 8 : [_crcfun._crc8, _crcfun._crc8r],
- 16 : [_crcfun._crc16, _crcfun._crc16r],
- 24 : [_crcfun._crc24, _crcfun._crc24r],
- 32 : [_crcfun._crc32, _crcfun._crc32r],
- 64 : [_crcfun._crc64, _crcfun._crc64r],
-}
-
-#-----------------------------------------------------------------------------
-# Build a mapping of size to struct module type code. This table is
-# constructed dynamically so that it has the best chance of picking the best
-# code to use for the platform we are running on. This should properly adapt
-# to 32 and 64 bit machines.
-
-_sizeToTypeCode = {}
-
-for typeCode in 'B H I L Q'.split():
- size = {1:8, 2:16, 4:32, 8:64}.get(struct.calcsize(typeCode),None)
- if size is not None and size not in _sizeToTypeCode:
- _sizeToTypeCode[size] = '256%s' % typeCode
-
-_sizeToTypeCode[24] = _sizeToTypeCode[32]
-
-del typeCode, size
-
-#-----------------------------------------------------------------------------
-# The following function validates the parameters of the CRC, namely,
-# poly, and initial/final XOR values.
-# It returns the size of the CRC (in bits), and "sanitized" initial/final XOR values.
-
-def _verifyParams(poly, initCrc, xorOut):
- sizeBits = _verifyPoly(poly)
-
- mask = (1<<sizeBits) - 1
-
- # Adjust the initial CRC to the correct data type (unsigned value).
- initCrc = initCrc & mask
-
- # Similar for XOR-out value.
- xorOut = xorOut & mask
-
- return (sizeBits, initCrc, xorOut)
-
-#-----------------------------------------------------------------------------
-# The following function returns a Python function to compute the CRC.
-#
-# It must be passed parameters that are already verified & sanitized by
-# _verifyParams().
-#
-# The returned function calls a low level function that is written in C if the
-# extension module could be loaded. Otherwise, a Python implementation is
-# used.
-#
-# In addition to this function, a list containing the CRC table is returned.
-
-def _mkCrcFun(poly, sizeBits, initCrc, rev, xorOut):
- if rev:
- tableList = _mkTable_r(poly, sizeBits)
- _fun = _sizeMap[sizeBits][1]
- else:
- tableList = _mkTable(poly, sizeBits)
- _fun = _sizeMap[sizeBits][0]
-
- _table = tableList
- if _usingExtension:
- _table = struct.pack(_sizeToTypeCode[sizeBits], *tableList)
-
- if xorOut == 0:
- def crcfun(data, crc=initCrc, table=_table, fun=_fun):
- return fun(data, crc, table)
- else:
- def crcfun(data, crc=initCrc, table=_table, fun=_fun):
- return xorOut ^ fun(data, xorOut ^ crc, table)
-
- return crcfun, tableList
-
-#-----------------------------------------------------------------------------
-_codeTemplate = '''// Automatically generated CRC function
-// %(poly)s
-%(crcType)s
-%(name)s(%(dataType)s *data, int len, %(crcType)s crc)
-{
- static const %(crcType)s table[256] = {%(crcTable)s
- };
- %(preCondition)s
- while (len > 0)
- {
- crc = %(crcAlgor)s;
- data++;
- len--;
- }%(postCondition)s
- return crc;
-}
-'''
-

Powered by Google App Engine
This is Rietveld 408576698