From mboxrd@z Thu Jan 1 00:00:00 1970 Received: from mga03.intel.com (mga03.intel.com [134.134.136.65]) by mx.groups.io with SMTP id smtpd.web10.3566.1663140717798248395 for ; Wed, 14 Sep 2022 00:31:58 -0700 Authentication-Results: mx.groups.io; dkim=fail reason="unable to parse pub key" header.i=@intel.com header.s=intel header.b=BKH4axU6; spf=pass (domain: intel.com, ip: 134.134.136.65, mailfrom: wenzhao1.li@intel.com) DKIM-Signature: v=1; a=rsa-sha256; c=relaxed/simple; d=intel.com; i=@intel.com; q=dns/txt; s=Intel; t=1663140717; x=1694676717; h=from:to:cc:subject:date:message-id:mime-version: content-transfer-encoding; bh=AMvqo9VhH1rgG8VH6WvbtP0Vsqwm3s88iYh8cUWFjt8=; b=BKH4axU6oM+vEEJNK5IUHZW8cNaisYmstWk7vlienCe2IWuyb2rJf5RF Dq9UmlK3m6iVJfzLXo58B3kAsDRUVfr+dsEUi6aGJyfgr+oVuEJuDh+4S Bs49JSVu7Aofi5G/Z/qvyyjXVF0sOqBuyM/aV3kArzFYgN88TFEK7eGA3 YEpiDd5AZMGVkH+UtkWWcbMkJpj45R2dvVCNhmYrnAp5/YstatWpPsBwu PTB2iiy0Uy0+b3cUSfJvF8K8qmG13lmPZuIYA0VSb+4xDhixYNbtKGO9i DfkCyMhpfRygqVN+XBJemWhMzNYSPEhRiqcv9ZWVO7ubjPJc3DEkH21ZH Q==; X-IronPort-AV: E=McAfee;i="6500,9779,10469"; a="299718084" X-IronPort-AV: E=Sophos;i="5.93,313,1654585200"; d="scan'208";a="299718084" Received: from fmsmga008.fm.intel.com ([10.253.24.58]) by orsmga103.jf.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Sep 2022 00:31:57 -0700 X-IronPort-AV: E=Sophos;i="5.93,313,1654585200"; d="scan'208";a="678934916" Received: from liwenzha-mobl.ccr.corp.intel.com ([10.238.1.245]) by fmsmga008-auth.fm.intel.com with ESMTP/TLS/ECDHE-RSA-AES256-GCM-SHA384; 14 Sep 2022 00:31:55 -0700 From: "liwenzha" To: devel@edk2.groups.io Cc: Bob Feng , Liming Gao , Yuwei Chen Subject: [Patch V1] [Patch V1][edk2-basetools]BaseTools:Convert the C tool of calculating the crc32 into a python tool Date: Wed, 14 Sep 2022 15:31:32 +0800 Message-Id: <20220914073132.2170-1-wenzhao1.li@intel.com> X-Mailer: git-send-email 2.37.0.windows.1 MIME-Version: 1.0 Content-Transfer-Encoding: 8bit description This patch converts the C tool of calculating the crc32 value of file into a python file. To realize this,after reading the data into the file in binary form from an original file,a lookup table is listed to do XOR and shifting calculation for each bit in the file.The 32-bit result is placed at the beginning of the file as the header.The verification part will recalculate the crc32 value of the data behind the header again.When header is equal to the recalculating result,which means the crc32 value of this file is correct and the file is valid.In the unit testing part,some files which have been preprocessed by C tool are placed in a folder.The file after processing by python tool will be compared with these files to check whether the result is correct. Cc: Bob Feng Cc: Liming Gao Signed-off-by: Yuwei Chen --- edk2basetools/GenCrc32/GenCrc32.py | 262 ++-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- 1 file changed, 2 insertions(+), 260 deletions(-) diff --git a/edk2basetools/GenCrc32/GenCrc32.py b/edk2basetools/GenCrc32/GenCrc32.py index e27e4b0..982d2e7 100644 --- a/edk2basetools/GenCrc32/GenCrc32.py +++ b/edk2basetools/GenCrc32/GenCrc32.py @@ -14,263 +14,8 @@ import argparse import os import sys +from binascii import crc32 -mCrcTable=[0x00000000, - 0x77073096, - 0xEE0E612C, - 0x990951BA, - 0x076DC419, - 0x706AF48F, - 0xE963A535, - 0x9E6495A3, - 0x0EDB8832, - 0x79DCB8A4, - 0xE0D5E91E, - 0x97D2D988, - 0x09B64C2B, - 0x7EB17CBD, - 0xE7B82D07, - 0x90BF1D91, - 0x1DB71064, - 0x6AB020F2, - 0xF3B97148, - 0x84BE41DE, - 0x1ADAD47D, - 0x6DDDE4EB, - 0xF4D4B551, - 0x83D385C7, - 0x136C9856, - 0x646BA8C0, - 0xFD62F97A, - 0x8A65C9EC, - 0x14015C4F, - 0x63066CD9, - 0xFA0F3D63, - 0x8D080DF5, - 0x3B6E20C8, - 0x4C69105E, - 0xD56041E4, - 0xA2677172, - 0x3C03E4D1, - 0x4B04D447, - 0xD20D85FD, - 0xA50AB56B, - 0x35B5A8FA, - 0x42B2986C, - 0xDBBBC9D6, - 0xACBCF940, - 0x32D86CE3, - 0x45DF5C75, - 0xDCD60DCF, - 0xABD13D59, - 0x26D930AC, - 0x51DE003A, - 0xC8D75180, - 0xBFD06116, - 0x21B4F4B5, - 0x56B3C423, - 0xCFBA9599, - 0xB8BDA50F, - 0x2802B89E, - 0x5F058808, - 0xC60CD9B2, - 0xB10BE924, - 0x2F6F7C87, - 0x58684C11, - 0xC1611DAB, - 0xB6662D3D, - 0x76DC4190, - 0x01DB7106, - 0x98D220BC, - 0xEFD5102A, - 0x71B18589, - 0x06B6B51F, - 0x9FBFE4A5, - 0xE8B8D433, - 0x7807C9A2, - 0x0F00F934, - 0x9609A88E, - 0xE10E9818, - 0x7F6A0DBB, - 0x086D3D2D, - 0x91646C97, - 0xE6635C01, - 0x6B6B51F4, - 0x1C6C6162, - 0x856530D8, - 0xF262004E, - 0x6C0695ED, - 0x1B01A57B, - 0x8208F4C1, - 0xF50FC457, - 0x65B0D9C6, - 0x12B7E950, - 0x8BBEB8EA, - 0xFCB9887C, - 0x62DD1DDF, - 0x15DA2D49, - 0x8CD37CF3, - 0xFBD44C65, - 0x4DB26158, - 0x3AB551CE, - 0xA3BC0074, - 0xD4BB30E2, - 0x4ADFA541, - 0x3DD895D7, - 0xA4D1C46D, - 0xD3D6F4FB, - 0x4369E96A, - 0x346ED9FC, - 0xAD678846, - 0xDA60B8D0, - 0x44042D73, - 0x33031DE5, - 0xAA0A4C5F, - 0xDD0D7CC9, - 0x5005713C, - 0x270241AA, - 0xBE0B1010, - 0xC90C2086, - 0x5768B525, - 0x206F85B3, - 0xB966D409, - 0xCE61E49F, - 0x5EDEF90E, - 0x29D9C998, - 0xB0D09822, - 0xC7D7A8B4, - 0x59B33D17, - 0x2EB40D81, - 0xB7BD5C3B, - 0xC0BA6CAD, - 0xEDB88320, - 0x9ABFB3B6, - 0x03B6E20C, - 0x74B1D29A, - 0xEAD54739, - 0x9DD277AF, - 0x04DB2615, - 0x73DC1683, - 0xE3630B12, - 0x94643B84, - 0x0D6D6A3E, - 0x7A6A5AA8, - 0xE40ECF0B, - 0x9309FF9D, - 0x0A00AE27, - 0x7D079EB1, - 0xF00F9344, - 0x8708A3D2, - 0x1E01F268, - 0x6906C2FE, - 0xF762575D, - 0x806567CB, - 0x196C3671, - 0x6E6B06E7, - 0xFED41B76, - 0x89D32BE0, - 0x10DA7A5A, - 0x67DD4ACC, - 0xF9B9DF6F, - 0x8EBEEFF9, - 0x17B7BE43, - 0x60B08ED5, - 0xD6D6A3E8, - 0xA1D1937E, - 0x38D8C2C4, - 0x4FDFF252, - 0xD1BB67F1, - 0xA6BC5767, - 0x3FB506DD, - 0x48B2364B, - 0xD80D2BDA, - 0xAF0A1B4C, - 0x36034AF6, - 0x41047A60, - 0xDF60EFC3, - 0xA867DF55, - 0x316E8EEF, - 0x4669BE79, - 0xCB61B38C, - 0xBC66831A, - 0x256FD2A0, - 0x5268E236, - 0xCC0C7795, - 0xBB0B4703, - 0x220216B9, - 0x5505262F, - 0xC5BA3BBE, - 0xB2BD0B28, - 0x2BB45A92, - 0x5CB36A04, - 0xC2D7FFA7, - 0xB5D0CF31, - 0x2CD99E8B, - 0x5BDEAE1D, - 0x9B64C2B0, - 0xEC63F226, - 0x756AA39C, - 0x026D930A, - 0x9C0906A9, - 0xEB0E363F, - 0x72076785, - 0x05005713, - 0x95BF4A82, - 0xE2B87A14, - 0x7BB12BAE, - 0x0CB61B38, - 0x92D28E9B, - 0xE5D5BE0D, - 0x7CDCEFB7, - 0x0BDBDF21, - 0x86D3D2D4, - 0xF1D4E242, - 0x68DDB3F8, - 0x1FDA836E, - 0x81BE16CD, - 0xF6B9265B, - 0x6FB077E1, - 0x18B74777, - 0x88085AE6, - 0xFF0F6A70, - 0x66063BCA, - 0x11010B5C, - 0x8F659EFF, - 0xF862AE69, - 0x616BFFD3, - 0x166CCF45, - 0xA00AE278, - 0xD70DD2EE, - 0x4E048354, - 0x3903B3C2, - 0xA7672661, - 0xD06016F7, - 0x4969474D, - 0x3E6E77DB, - 0xAED16A4A, - 0xD9D65ADC, - 0x40DF0B66, - 0x37D83BF0, - 0xA9BCAE53, - 0xDEBB9EC5, - 0x47B2CF7F, - 0x30B5FFE9, - 0xBDBDF21C, - 0xCABAC28A, - 0x53B39330, - 0x24B4A3A6, - 0xBAD03605, - 0xCDD70693, - 0x54DE5729, - 0x23D967BF, - 0xB3667A2E, - 0xC4614AB8, - 0x5D681B02, - 0x2A6F2B94, - 0xB40BBE37, - 0xC30C8EA1, - 0x5A05DF1B, - 0x2D02EF8D] parser=argparse.ArgumentParser(description=''' @@ -307,10 +52,7 @@ def CalculateCrc32(inputfile:str, outputfile:str, filebytes=b''): with open(inputfile,'rb') as fin: temp=fin.read() - DataSize = len(temp) - for Index in range(DataSize): - Crc=(Crc>>8)^mCrcTable[(Crc&0xff)^temp[Index]] - CrcOut=Crc^0xffffffff + CrcOut = crc32(temp) CrcOut=CrcOut.to_bytes(4,byteorder="little") with open(outputfile,'wb') as fout: if status==0: -- 2.37.0.windows.1