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 <bob.c.f...@intel.com> Cc: Liming Gao <gaolim...@byosoft.com.cn> Signed-off-by: Yuwei Chen <yuwei.c...@intel.com> --- edk2basetools/GenCrc32/GenCrc32.py | 373 ++++++++++++++++++ edk2basetools/GenCrc32/__init__.py | 10 + edk2basetools/tests/GenCrc32/decode/PcdPeim | Bin 0 -> 18912 bytes .../tests/GenCrc32/decode/PcdPeim_crc32 | Bin 0 -> 18916 bytes .../tests/GenCrc32/decode/S3Resume2Pei | Bin 0 -> 18272 bytes .../tests/GenCrc32/decode/S3Resume2Pei_crc32 | Bin 0 -> 18276 bytes edk2basetools/tests/GenCrc32/decode/demo | 1 + edk2basetools/tests/GenCrc32/decode/demo_crc | 1 + .../tests/GenCrc32/encode/PcdPeim.efi | Bin 0 -> 18912 bytes .../tests/GenCrc32/encode/PcdPeim_crc32 | Bin 0 -> 18916 bytes .../tests/GenCrc32/encode/S3Resume2Pei.efi | Bin 0 -> 18272 bytes .../tests/GenCrc32/encode/S3Resume2Pei_crc32 | Bin 0 -> 18276 bytes edk2basetools/tests/GenCrc32/encode/demo.bin | 1 + edk2basetools/tests/GenCrc32/encode/demo_crc | 1 + edk2basetools/tests/GenCrc32/test_gencrc32.py | 124 ++++++ 15 files changed, 511 insertions(+) create mode 100644 edk2basetools/GenCrc32/GenCrc32.py create mode 100644 edk2basetools/GenCrc32/__init__.py create mode 100644 edk2basetools/tests/GenCrc32/decode/PcdPeim create mode 100644 edk2basetools/tests/GenCrc32/decode/PcdPeim_crc32 create mode 100644 edk2basetools/tests/GenCrc32/decode/S3Resume2Pei create mode 100644 edk2basetools/tests/GenCrc32/decode/S3Resume2Pei_crc32 create mode 100644 edk2basetools/tests/GenCrc32/decode/demo create mode 100644 edk2basetools/tests/GenCrc32/decode/demo_crc create mode 100644 edk2basetools/tests/GenCrc32/encode/PcdPeim.efi create mode 100644 edk2basetools/tests/GenCrc32/encode/PcdPeim_crc32 create mode 100644 edk2basetools/tests/GenCrc32/encode/S3Resume2Pei.efi create mode 100644 edk2basetools/tests/GenCrc32/encode/S3Resume2Pei_crc32 create mode 100644 edk2basetools/tests/GenCrc32/encode/demo.bin create mode 100644 edk2basetools/tests/GenCrc32/encode/demo_crc create mode 100644 edk2basetools/tests/GenCrc32/test_gencrc32.py diff --git a/edk2basetools/GenCrc32/GenCrc32.py b/edk2basetools/GenCrc32/GenCrc32.py new file mode 100644 index 0000000..e27e4b0 --- /dev/null +++ b/edk2basetools/GenCrc32/GenCrc32.py @@ -0,0 +1,373 @@ +#@file +#Calculate Crc32 value and Verify Crc32 value for input data. +# +#Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> +#SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +# +#Import Modules +# +import io +import logging +import argparse +import os +import sys + +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=''' +Calculate Crc32 value and Verify Crc32 value for input data. +''') +parser.add_argument("-e","--encode",dest="inputfilename1", + help="Calculate andverify CRC32 value for the input file.") +parser.add_argument("-d","--decode",dest="inputfilename2", + help="Verify CRC32 value for the input file.") +parser.add_argument("-o","--output",dest="outputfilename", + help="Output file name.") +parser.add_argument("-s","--silent",help="Returns only the exit code;informational and error messages are not displayed.") +parser.add_argument("--version", action="version", version='%(prog)s Version 2.0', + help="Show program's version number and exit.") + +group=parser.add_mutually_exclusive_group() +group.add_argument("-v","--verbose",action="store_true", + help="Print information statements") +group.add_argument("-q","--quiet",action="store_true", + help="Disable all messages except fatal errors") + + + +#Calculate the Crc32 and store it in the file +def CalculateCrc32(inputfile:str, outputfile:str, filebytes=b''): + logger=logging.getLogger('GenCrC32') + status=0 + try: + Crc=0xffffffff + if filebytes != b'': + temp = filebytes + status=1 + else: + 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=CrcOut.to_bytes(4,byteorder="little") + with open(outputfile,'wb') as fout: + if status==0: + fout.write(CrcOut) + fout.write(temp) + except Exception as e: + logger.error("Calculation failed!") + raise(e) + return CrcOut + + +#Verify the CRC and checkout if the file is correct +def VerifyCrc32(inputfile1:str,outputfile1:str): + logger=logging.getLogger('GenCrC32') + try: + with open(inputfile1,'rb') as fin3: + head=fin3.read() + header=head[0:4] + calres=CalculateCrc32('', outputfile1, head[4:]) + + if calres==header: + return calres + else: + logger.error("Invalid file!") + raise(e) + + except Exception as e: + logger.error("Verification failed!") + raise(e) + + +def main(): + args=parser.parse_args() + + logger=logging.getLogger('GenCrc32') + if args.quiet: + logger.setLevel(logging.CRITICAL) + if args.verbose: + logger.setLevel(logging.DEBUG) + lh = logging.StreamHandler(sys.stdout) + lf = logging.Formatter("%(levelname)-8s: %(message)s") + lh.setFormatter(lf) + logger.addHandler(lh) + + try: + if len(sys.argv)==1: + parser.print_help() + logger.error("Missing options") + raise(e) + if args.inputfilename1: + CalculateCrc32(args.inputfilename1,args.outputfilename) + elif args.inputfilename2: + VerifyCrc32(args.inputfilename2,args.outputfilename) + except Exception as e: + return 1 + return 0 + + +if __name__=="__main__": + exit(main()) \ No newline at end of file diff --git a/edk2basetools/GenCrc32/__init__.py b/edk2basetools/GenCrc32/__init__.py new file mode 100644 index 0000000..b35de32 --- /dev/null +++ b/edk2basetools/GenCrc32/__init__.py @@ -0,0 +1,10 @@ +# @file +# Calculate the crc32 value of file. +# +# Copyright (c) 2021, Intel Corporation. All rights reserved.<BR> +# +# SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +# Import Modules diff --git a/edk2basetools/tests/GenCrc32/decode/PcdPeim b/edk2basetools/tests/GenCrc32/decode/PcdPeim new file mode 100644 index 0000000000000000000000000000000000000000..db03070a222507e0d035754fb46973ac92b32931 GIT binary patch literal 18912 zcmdUXeSA~Z{r_zf+5mwYAYj0%VFVT|U}#F(lD71jA}xeIqy`GL(3G^4hNU-9z9N>T zRl_kG+jI}#Ip;R@=iKJlrWUHQlxhJ{!ADT0LvVV#paW4_5b5vzx%Z|m1)SUK_s_2{ zlY8$upYwTsI_Cz9mvjI1U--XX`TuUABcJ1nV$_!*JkG^V9UU|FhKDU2cYKmORRWOP zV{vblpN+WCXZYXoMG71yMh~A<o^{t4zuNHa3ps8J=zgBdab;Hn_%Fxi2<~P9YafD) zBp1ml$u|U_k>fmbd^OcVHOJjI9utuLVdXjmjLYJ<!Z|V+*AW94=rpWchr#Wi<8wE7 z*T^!FY%QQo*P(w|9G4S)c2+RKq+?r5T2^M#hw>)%r(J4Nr}Z^ygRccns5*OM&psN7 z4|a#PT-X0q@U^p#Tx5ABZPlu-m*u~TxnV5Uup*N-_!6M8rsC}H0QkghRRmK3a6&IZ zoP7dM8fjcvj(Mz<U_hSWf_aDff@Oy;o;Vlm1LWoFe|N?D(q$#PpbC!vHQ({UO-(oN z!hH+>>x`Rl*^;n}E;MyKritG@Hzp>`Ck2kH0(~(;?A-8j*NU!+TF5Oi2jV*M5B>f9 zZDIe2i)R}mnv-#-?u}n~;zHGMsC#6nxQl0N*GIG`N7a5(8;lR^i#>7f3ed^{gzF=t zPHH|OIQ0og<{Tsp1Bl53aE(NGd)%i5CoZfS4mEa=uva3?;%fgD=my~{Ku=zZO5!EL zEDmrWys8TdSN9x(TLez&p-y9IxwC?APYrG{8ANU}$L$%xsko$LPS0_;87nlftb|~Z zDK(g9N)Yv<IL_q?^y&D!M?mW`jQEd{02Ey==GU`)wdxCi8ky4+TA~-vCU6|Bgia@W z%<%7yCt;x7g}4*v8?g+auKtatkW<h0i^dx;lCO6K!un9LLG@x}N^RO^jei_WWJw$6 zA4x8nwoEOI40P)3`+X-Ov44qS#kxReeBgsVjI|!~e<zea(_UmUHhI`hfiL@o>QIGR zRiO@T(%3(1nhA1-+Oz_V-vDb{(lP<;AA>=CT7jD8gmHmxo&7W4F`!f(1k%V(mZIvl zzuhz$3li9<?K!G#AHWD)V6XaKb(;NcU!<P%tU&VWAa(6lLwDl+JZY&dyxHvVG(%Dk z`J{O8MyUJ+ZO4aE1$Zdl#bmgst7_HC6@eG@UFGal;KRPaDIFO_{3WJB5V^#`H2urW z&l4^QugOs^<J_d+RKXaMQe~XSG3*L#G3m$gt;ax4G+zhB9%YLSqZcReZTm4~?Vn2i zo-UIxlvFT{qkmZ{7zEz~_^(s&PrV#}i-f<%q~nl03}P=HLq#UtGAH9a#sZG(cX(t( zs)dmUDZhws5=faTp~T5F^^-v<EAWDDD5XEZ^rW4%%PCDFO03Dan*&<*w)mSVxBw5^ z?-W17y{pO^hVIxuRu1USK)PdR#A+-BL;ViHm7%9J&^D8tp12nCqwJ7+nWh9bw15Ek zGQtddNYQ^KqdiL|dY-%$yiRt&CL<I+8^I@grBw9e*#+0p!OIP8VIf)U!H6drDYst$ zpQP0USsBv$7ZDI7r%zcwkJf`JJtywOE%-5(;L9L0br?RSFcoE>RY9;tLGU@Ai2?lp z10G^PcP$3;l=Usj`lo2Utd(121`>z?MJrTlhB2U05NuZvG${-WYT#pxc(Sg=K-cxM z2EM1Pw<-)k15e_1m<Gaw49Eh?X4tAA`Kf~BQ#?ntV1gM^#nr?_g3N?@zzjoi%vW$c zsNi@)!C~n62W-z?71<bs&J@B!=9Gfaa5dkMVp6j1$8brq?&Au|3PLF!!M9`(8O0#@ zE(QEa1>7uwKThE0C`HpCcu)cVlLCI80-!!-c>0-$z6f&8k`~@TPU}z>Ql%uP4dWRu zW0vv`#SUCmLv_%4K+L8TPXp8tXi+RQ;v8v6Jc-tXWf=wnEuoaH)Ho}w=bWXU2N5Fm zSwX=xOFW4hg5VaPBJe&cD{P^`e$+qCzA3@4^@JtJp3`7u^uh!o$8#D3&r-0JijQNd zlle8y{!Iz}n+zUfGRKvQKg6h~8Mhs&2w=H(T#|^GdUldTo6@aeRWI9*GNoruwf(R! zbCWtPZewbwKw~%f<E{PnX0<RWI}p|oNE-5o@8eAd`&i!xk@24UfVn<PoCS<1VVJju zC3fruYW|*F;P+|lWBC9jCUzQn)mi%?r(TSK5+!FvN<)YYq)sX2mx_Ng$gWTl<ylV6 z`9uaO(Fn!p#OLvJ^~@O$7=1zH0V#X_n83<RrorrqYGj6zr3|VNT&EDMzntKk7<RFx zdbvp2ml~UV&@ihsnL_%}X-R(G8cxemV<bm2I!7yvrOJ1!4y6yEzQ4(uz@m(hPahe_ z#%?c&7Qk*QfGkI++G{`U`-tVkd6qdmyCiJ}7aD>~6U3t^JK!=h#&cY<<bFK6;B->H zrar{_dXBhaEXQr<q_)IaAG=&!jAwSb?VNvt=Tr(zbK~;esi_FW(IiMMi<3JTXT5s4 zXpDkRlt4S$;6^g=`$TCFR<m6E9KkH1RbY1w!2Vf=h3Ckqt*`g&12AfFDGJG*8rCa{ zsOaqIQoen0Ubg*=Z=%OM5AHZy6?I3igd*1*Qt#rQ$up<|$9ccDG*qr(hs1I;2PE^# zE{ZUcTD$@1tgo~EIpQi1BH@)8rx=SVXaUVoZj|9+dQcH9Sq}rNUWOu|5Ud&#U3G;@ z4q~Szt7Kr=1GG#-%ih*rOFQ?=%OveA8%POcG?GC41s1xx1}Abb;Sj@UK3y)#6w6q# zCX|1%o^yoCwfpifB8oV%L24rpTx}lC%ZWwTo`*6yan`lxH8ihP<`s6;^)Zys#4pgN zM!6~{u2`{_7|Yiwj5)+s<W3}Tg|#byh&zW^_4Po+qC=ej^+3d@L!?wKkprh{%C!=w zI&f<c&qD~zb)k>ba{jnopxr`_G6YV%d4wd<)j_BM(TVXgh}2L{m7IfbFDT&Kx8|`% zOJbkuQ|c2rzY&-XEY`k{zvmIKmKBt4e~epexaTLh)V78B)*x>9c4r}b1-SK{C)DDY z2^1NwwqwEuwsltGd#X#FU#j``jRn>NZRdo_P(>Wy9&7IsMr8-~YV5E2&O{0&N;kKC z;-AFShk~(@htg&p@{i=(^A5!Ua6~qsKC!>rWDI%ZLJhBQ*`f7VD2(OX^Eu2P#Pq3% zD)23C7hJ7{I_Ius%cPzU9eP{8f1<}h!8tW98l10#MVB~T@^EVy?SBE^`V<6VjkDM) zi|SL=`)Tq1@jxHfd0egP3dTd?pG5^d*q=gT&Y)s;*wyyBa3`rR@r}+4YDgFs8bkSU zC<=OZly6sM+xOBe_9tB$>`y+4IPCkI7LgEv7omrhocj?`<l9S|l_(^i{i5EA-P zR8X7J&_eq@WnIKYfkoBb<HJUS@MQ;HBy@WM-yW11e!Q#{SzL=|H&})(_IdV(*Z_B8 zO=c#Bw0l_c<lb(QLYV0BkV3vYppZ@o<6?_bVF;b-Am6U83&u*YS^g0)LtQK>)zwv6 z&Kl4Gyo)6G7CSHUgxqf?VS)ay)D*MinF@_bGL2_J11axz(iZw*7b{Oyy#)d}GI~KT z*YW)_SQ_yWxjs#`X=1?MFX*WF)-qLXFz?pboiP!0P?Z#x?8`c*OOh<iz$HdVp-ZeV zi!N$mDqS?fBnfqW{_@>NA+7k{IN-L1yXsZ9b=Ak-)@2Q6b#?ZP4}73zon7@KZtE&_ zGGEsAcTi`@-uD3qIM%XTlgleY>TcCbY>TdsHRvv?&Z~M_j|qB+^(rEg9YNA_)6MCK zlf5E#(Cs01RQwZeR7crC(IQO(??jK*2EDfewan8Z;;DkYf!0#8)FE*TV9RNsJI~TT zM|48PsE@3B<*F4>KNNqygl)3$?G=TpUbrC^{(>rz<cK!rot5}D-@dRw^)K?qWAMgr zQP;p;;oGz0?0fwhL||FkTwxLc<pw%6_M^TJ2crh2eoyTX_2>Khu`D5oey6?YJvCd1 zGIlR3O1&tyB8>;**bxab>3~DrM|nLm8Q=zXBrt;u)T)sWvekczafrVo-~x>`?20@L z-l=h6Jr(SNqzMyg;<EuwEWi<+OZ*{{AjM5?0g^!;-(H%Rc-Ven(*gwXNNYG42aX~$ zD#WHfLab&|d1Xb0i{h!T`um~BU|iAxF<B}#65+^XBq@KqBw=KX<hBRJr=@wxjiS42 zEo^@VL8Gk*QX@B7VguIK@$Gly0mBs3`GO^h=NG0SHTv>A>BM{yDpzDSdmH9o6;I}8 zuR^j>60x36NETWcvjkC!Xe01SfXh}dg~ePF^E+9(;aT#|w*JlIJ@*rs8({F6TL`9i zAFyNz<2}#OOszaKk!E(&rdl*n0QNyS<2@e|M4b$A7HQD6eWkYZqY<iJ{+WZl@9@vO zas7eb*QOO~df&bN^=aj>Nm|j}2EmXO=+pQ<w}xAf@%M)d1IOb>P*I7*1<UR>SP^Q` zee|+r0ry38;%6%UDzSSGBrg)l5Rp72wh&2?18br3i-S$6+>lNmdg$>sDh`TR#|~+s z+yYaJ;9|uWJ9H$~6y)XBurQM4Uko(s;*qVSR$toK9TF!27BlFd4s<QUPNoVeQR(6g zDPZU+;FZ;U3Y1*Tsh3U)R8EuFOmT=~r9M1>=Py8~f1@4-JS6VI6yLrn&jp=Hy2Z)D zA_6DtzD$K;U)3sCSKyRZ3c?HQ9dQB}L8q>_ezL5bS;{>-^HIP1oyNcmdNkpe9rT<4 z0+RVels8%I#l&EF2<bD}VA4C_Zwck46^?#g-~~eliZl)=9)bf<+=!0?77f3Fbc?-3 z5zq~%vPGdn8!1TxGL?T|*hT#V5xShna18Sm3>PlP@EgK_RBWP%2*%*fh&w|t#u|={ z7|0&rXka5q@q`V;yA|vb_E$RWY_v<nr_lzr9rNGFw`b*L+54hB^DXc=*<f~}BYXC( z6oKT~6J^h~4ggIeAXq6>U{LMDrbkQV$9j%wccOw`&-S73po2SIzaRf;9i{!R;mHI? zEC^iE_>K;`v~;YdXPu=$peaOdxPTjj$b(B9jFF_3COzNYlviNy_Ti|KDrRtijqg+F zfwHURPAw<g44oKYo`h1d8Mz6&V9Xg^%xXWq@y4J^>eQl}oRt~}vx+;<B5&GH`#(g< z1(h81U$^EZ?kBq0_RgjW&I*V1b!@($K(Yb|yh_V*%n})-VzrK)-u6*{|G$i?&!`X{ z7S>bE(+O#G$r227X%WWJWrr}T<9+bm(}D*%l%5<AV?TV{)k8<pCFm9sz`LszUEN{~ z^jpzP7}(-u)mYU*c0_ytIS%!+ht8!Xp|7JQJ-x~jgS_O`$eT<R5MzWz^p##n-<E)= z7H;Y|3aS!)+1kZKT27W9kdX0gsTvu6i8}JXEIt?)xxbdh*W!BL_V|0_B6p+rc$ccj zTS$)of`3Zhp=9=%R9g(Fny>WR$kS0FP!DithUyUNPEiXAffw|vs?ZxolfHZ`_%6(B zU_BIp#rQIcW5FitBim9!7-Iajw7HX7i67GOHgz)&Q9MI-JSt3v-%a$SQU<CUfUBqN z1*#`onyfk$Qa{ersZqO0R^wZzKoZGve5*#e&Ei{Mf~8~&Cd(F_y@yhuR4JStyMZ4{ z7(>XN9nZ^8{RkMc&dXTJx0hvVSVN{74T9=lstSwh2x?mb(`Tw)lkoXRu=Sj(2i}w* zB?Ww$9pX)2LKGZQ`)@_n&m0v}k4}RUeCezcQ9Fa8o)S=n_~S3A2`$SU1^-B3d!-YS z#QpYnHpa4d`1Zr>6%~|TD!P%uT<pb2h9?e3;L^JT@kh`W_6FD-Ah4TBS=$Dbl|d3P zb*8E-GKwyp5miW?NoAVOqojUbYHQDk4Umx?b+UEngGvik5q8Hc_6o`RrMQFo$kQ&V z!?=&|e>8yqJ@Q{HC`kOG^Afe{uM5{f0-Zf!V6Smn7?W*($@d9WKI(VT<s4E+&N`(E zB0fW!reg>tC#jGrWPkWBp+-Vlg{Bf&XbKuhv+A>6@WSzaRUjOT7cGIF82=}$qzx|0 zsQ4C^go-cXfL!P3FHzFD8VOZ};)c>jFo)s8XyHat5n9z#0CduNB(7z24sn5<dG>M0 zDAj*D80qkm>mC%(0@B6y^&Um`8Shc!sH9_qJoAn;^QyQ}#yr|7HLuS?u;>|#92^q< z^UrR<QVDwv;b@X^JU}?C=UNtU!qjb-vT}INH{P?K0Pc_h1Og~%Nzdf`f3FG^#K=tq zg{a1UX46;%j#kx;zGyVgO-6^*<LsxK)H`EVbtQ#Yb(OMr&UM8I6FiRqVg1(SySX%U z1m7Zz2r#4d0PCzx8!b%EAi7N>vue|{x&F^qbnVK<^9rbcMVAv6xDm#kVhyLp2$Mp- zetS0{ThcY0{|lVw>?JFK5*pHXq2yPf3MMAL1-n}JK!6sfXBKFB9-NP_XJ91{vEXsg z7g8%HPJ~|vUPxfwJ!fIx3X~u{bTma-yJKK&JJ$C68X()gBxW~8Avi)TVSk<=S^$A? zxK3IB`+@acn2osGUdI$14QxF(FtwkiZbjRo1M~L7o36tfI)Zq40OD1GFlVth92M9i zv`E=cgQm)|2Q3;Pvj&)W1CYZ-Oaehk#K?Hn7ZLTnaRm#v$G3+4=kAS@Lqo}-%bemE zP)1r%%WtGCd!7Sg>6m%i(5CMLco<c%SEZJue%5kvDM--qyc+pN?-8-8e)e*(nu2i* zYh0@+>YeN}*kyu;vtzz!`EJ54>S-z89@l}FZd|Q>uV7&NYXj%i0upvXtm-tTFo508 zKgrIlI~p_yne$>Unfq`=A9B)3+#iv1A=fyZV8p847DF^i5&i*oToMCxUIiw^8K4>M zY}M$$lF?A0d%{LBn14}<S;%4VB!JJ3^RTGQX+32O^s0zw3fS}Pvu8;HDWs$$iC<A6 zJ1FK*0B*Z<9P%JwErjGTdB#jLA*VrXQdkqlgqCPfjp2(NG7g#w#7w1018+V<TdQNj zt*kq=uD|!NUEDaqQ$vcgF5mqiuHrGcH{}I+>L^VmD^p>bviAyON-Lb=g}+m=)J9@i zx3o)=&r*<X!1xtsrFTn6Z(?4xlo_Qw^ag1_I->Q^Z1BclqdKrpbLHYi1B*jjHG|j( z*PEsFH?i)ZS1spcyrZVjJ@YJ4dVUuu$veuirR*)4=I2lyjy0*9V+CqljKDlN{gyNx zk8wR)NYe>{Zq1PSr=|HhY!$sC9+ZhF$@uS=0I(e8(cr%h-kN|rqkoKjj(?<mmD-PN z7KxP)DgpzqaB()%$=(GywR2BaI=FsZg~Jam?&|L#$Ik>-pwhXJwvTSqd75cv3(c5_ z-nlMb(0LxA!8>V?SD4TSPM&6`aYlu#ibQ%HIv1QVzbd|kkcVgM=<Ri{FEX%~W8IN2 zhU9qJsA`PPfA(b{hrBxZko}hBaLnIAXcy}SOMOw6EHwTD8i%Lo-lvv9>1?GVU$hds zW#|>O4iO=PR3M%CZac++Uj!0@03;@OH0VR>S1#Xe#8u2Cz}|gJk(mUW_(MD)Q_ZgD z`u&;?S{Dj&@P21KCk6+e@M0kr1jK#d0I7<0gR)rLPN@lq^o;d*6;-m#Qwb^_!sL*! zQ)=5U-YnCZ08ou%nT&0-giVV>0Cgnx?2a^Cg+3_}v}D}25DWZMc61QkQ#;aox<}AZ z3^vZccHyS$Vd<N=IHe8cf9^zPK=AW18kT>KZMZ1Oy@BMudHL=gBsX>0&@Na<o2ntr zL2+uFKhsevr2RPvBF~UuPU|_id759d)yT@V_CrmR19$3T?j0v+*xpW2b8mKxs#sTG z_iMJCtYV$3<aghvbchphf|bGizTlk~yW=SLOz`}k((R1pyTj1D_#!-oHs35?Ykj@< zj05j&de5-pzLT-Ram!ip=LNxh&FH<sa_#ouPQc$g*8ePJ$Edyor-V{uL7Y@ODVDIB z9R<N{CpjZ!I$;Jik8KD1-|~Ej>eR6q0loV;NncEK2mBI=YXT160myqQGXYo%z{pz| z+C$az@hoAA{nAFQr<vv|X>RvEywSuB7codP2AWw-Gry!6SeyGT*<8pHAHyca-o0_6 zCrmJnfRR~v3A+S{t`*xP0REo!um~0#2raJI>Hu9~2Q?SsBQg?$$FTrN`~yhZ6eKd# zRt3{E1rxC$VZs$Mj)$dn)S6u%o_3hp*@(8SpKtvFx{zk@y3~4XYNg47PZ4$|W;8Oo z(87Lz7V&@VR_%q3EjXVy#IQTHesr;scz(~)n9dJ0{GNFJnegb&X<!>bseG$+CW)OW zHsI_Cnxawo6^w-s6ky+FJzzbz?PS(eycRAp<rM^1YT)t-_ZFGP;4>B<9^)o_(gS^? z_|{*d{|fYt!D+vAGaX%(U`pL~kV7QUff?5KJdG*jF9YjU!PT_*K^540o!G00={zB` zw}13Y(~7_zemoR7pTyrY2HN3U{{qzn&d=iS`95y=)>eG8&HxURTInYh0nsRU1L7$B z5J!yR+vtcZa4@##MS?=s?d{^QZ}2CA8CV32pbk%D`8YjS2lI8T@FEG=vj*0n5iE#A z05N(1A`-8Rv#g8czdfl0dQcr%8#t(mtR_Zg3u|Z>>yY-c^Cd1$g1Yq_L^lP_Tlnw( zf|$WJ(t0j%K8?TU9z3q=9;Ny+^qs@1(}6Ez{FTr|mBQ-2z(FJUjJyh#!8+;g1(-i@ zFeY*~a6V<zMB!1QY84(Lsz0Nz`y)XbN);GA-5n4o2qT~ue^ub1F0$t;8YZp+8z2cz zB8W>eOk$tHz<5Phf+>%PF9vb4eoqc@QDaKraA<R<mK}*C;6(R)4S&xIvaS<IKbYZL zv!Uuh4;<reH~`Mm6ZZ=%13d=5^&g0ZK+hb$)k0?K8Ns)bRRTRD`POe^WDzz&d|Mbm z=$fUfJYWZ?KQfZhPvLM_WaQh!@Gu7mI(i-exC$OGc|FK~t=Gd{{iF7jWudV?qQWoN zZo?gUXwL+28t7Tew|*66Xib!%)^{KuI1{$g*JR?cwFHxrU=S9!J=&}CTu40g3eQMg zqxP7H@=8$VpUEEKz?a&=x5v<pioRkU9t$AqsXhtyGaTaBc#wX<)H4H1lz2kKUZI=~ zL?}feMDn1RjNf*$A3OFvZz3JRjx@@;rjtuic9}}PJQY~4M0Oe1Q1fjP!ULPHXRmEL z0iU@ml+z#RGj5u>Ztuj<&XeFbGB$92#HPvX&P?9ceLJ4Py|l=Fns0j^`dsEIib_>O zQl(OwctPLuE7JAJ1913l2U|Fl^<&K=11G<Npa7@nW%xy%&TqVCME(qi>K7vPTR}Nu zHHc}7SPexoYre=f^lg8m<%BwXLUnJMY0SB<SYbqWo@q=X>k1s#@DJpf#)4*k{ix;G zM~@Di{5w){0_=&xbk|K=(6Kg6Mo@qm|2QNSS~<J-{lF2f_wNxil&Ql^hBQ4TG6}O| zxq97l*cmzdE{(K2*4kg;#3}IYBBQf27u!#|N!&lWmlCM|dUOy8{)yPOo}P+iTCc*W z8R|AvMW)rOtgl1+m8?^BrmDA>jDRekj)bpa`w}V9r?+eYNnspv_n1(2KdN)Dihj~! z!uS|Y7@3XNg!D^H6BLTqCt#3|VO{Wr=~I#8GmOwa-*yAUg{t!?czbm8@b%sW&l<Jo zL-<tBkD(_P7urf`GfV0lsO28`^+o6$1m@f0LtClUF1!+;K>~QDfQRQ7jHRzJ^rfY* z(eyQnzDClQ22m1EXVVRcd}@C@p;i+W0?%o1QjccEA)bUY2VO{zI&5SiB?ai$(DO0E zfF7i{m(v6(^WUb5F@g$h4FwIQF>X2k0BJodhvH{C*Uxby@Sz`06~alNU;%GWV4|$Z ziqO^=*i<lOZAWQ_0jSfa8N6Pz(=|0-u%g-~__Xw-<lU+K9-iM5rdo|cy<dVaG8N)Q z2QXx-E=2wejP#3V6Iy`;`;jKRX9G|I7>t1_!ADsJrBi<v7UU(qBsC13{2!^=!2uqq z7%};6IM6g`a2BSM>y6ZlCx{(5vSWv_rvpA+L`^H<Lp&$Ax1;8_9uVe1_YxK&uV9)A zOg8}30t<BljowioBW@UqiEt+#VqdaBF1CFvad8*c-a%Z{Tb4yCuMH>B7|yMBC=J=y zZ;A2;H=73BH-V=-(>QPh2Gb=O-~N1vj5zy2F!K+Dp*6id&t&2Ql;u&Rv$n^<TH{fb z`R{dMD766Tz5_S>GfN1WZitD9C>oYRQZEQgr%IASNUH{DWA#v)fYz(dW=TOyWQ7%g zO3#LWqzBHc{KeJ-S#*y<lf+eLQvvuft13;isM90fK;&jfHzTSM!0PK~fzWxpE|3gJ zM97GQ#ooz(caB`-w{0<%k(0oKX8Em{%u9rA$S&Q(nRiB=;?XEh3E!Ps3L!aq{!QfY zZI8o3vKx^Ez4;n4x-gn`AxE9-nF+1n+)6nrxQO7A+wB#fQM(O?!Xh0zhz(tROh}(3 zCV&z6W+GbN$aC22V22aRH{fSNv=#E}@g_&yA%W;t!eUd+X7i#YWlLt7OY+OgOO{lX zmSvZfm(Dbo3e|$YY3590y3sNdyUl7}so?dw3%#rJ@DD1CQ!|Wa^G0u7jq&E01h8g) zrMqTbQe|<CyVzUfZ*V)-t*tC?tlQ}JHB~oMI&$+W9qzhH$C{csYv3N-sO-|x{F1V& z{DMVQ`6VSwON<IdV}^0MZzeJ>_LpmFu*NvsSh~)?sK#h%p5D-GtZPCCYh3L%Hn|1- zaB>(7W}B+ly9s2C-{*5T3dW|*O@ezp;h^7H4#1ar+{V(y<whW0<MlVx5Xv>4>c+M1 z8l$(dVKctgxaV9Iep5B5xCJ62^Hkm7b63}Fo@J~P6l9HFLE&)-RO4pjdZ=&?$!0d^ zEL~cZpAE%ZGBW1Qgo+1g$?`&$TCcyc##q;=Xh5i5-QXrEhQfl8sHloOQNAvdcTwZU z>IRsru5p83knznj3Q$6gySCcjfFW5Ko9Y@GB-RDG@i)0^B!Xq$b?(L`{`ITfK4YSB zF1*5A<XuzUAdTmOO@W4Iatr;SG2A&w-a%*u%M3V>rP)$$Oiwo^CC@Z&G2(IV<&R01 zKPF%Pm>PYAmuA2phhY1r{#fevZLEWxC7)bEo^uu6;WLXGYrR)YT}3DG*Cp=eVH0Fq z^YF22YVaDmvNS8=rpnUd-#cAZr<P_#OM`G^6U6Nm{1?<UxC^TrYZ|U1H3Wg!d8>2k z8moPquUN{N7rKSgy8m&L;$_(Az!j3hw6JY-8t_s+*-(>H-Q>=$sqwj+nh3vzE3OvS zc&_0<L-Gq{mZG}VKJZ03rPz(2+ML~hf0k7()Oi~*Re6;$m^jB@TMPHS!oq`VC5h4{ zS1M5ckbcbNQifEPOKv{YzlQQdG7$sijR>~2jR+oiR;l2tYg~IJ-D}7c#UU>P0<*$^ zf@cP@jz#{PD>*(~fh%%1t`$6Rs;afHTU9|_v%4l+$nn=T)Kp=hxVpJ+y?=dn)0(<E z8I8Q)-^o#0UF#m?BhTF=z#mA<!=)h~r@!gd=IJ#vjnk{=8%whb@=;Do7A;v=mAiBa z?y{lBs@%f-+{NbU)iaH?)o{R?IYwiNTk!iDk@rV&=2EZUx8@3ml+c@rJ|vO61taEM z?}p8g<BI1@ql^V}QtVyb@R#ExtN&-ZlXCW=M#1fau?H2k#2eM}QWU?2>J3JTZ$)pj zjEWGmjON_J?2=T}Pnp?SgG|e*l#AlYtrkj2w|R9N>zcfh1Cz<GWjn+KqMf`@zDUVU zx@{7Mn~lRbD!uQ@3E;=v74TI2qrMi6lT^e=6LNvK)@Y`BUbr-;YGL`Jys9#nBOh8a zD+^|$Kp3wTT|<0JHrHi6#qb!D0~|7zxHrH*E6EcuR^hAOu)*!4nE56&WyMFy4aAw^ zE+|k@sVFJU&Lr6(0f{jXcV833!+FFr7$#KUZ@3PnY;%oV6P0BMLpKu|hv2)6oBx29 z<!+z%GJO?zee0{Q;ssHhOE<2s9clzeL$y$gHF@sU{<RQmk=Nn%36;@D$>-!254pfR zy~savK5o#jx$BggD<%EQddRQ$>FBaDYJwczItn}@Tq95wxY{f+5#=9!=}`75$2yRe z1z@O*-b7=W)|q7|7$^w;MQY&8S68Z>cm5On=%d$oYm`JRdybTRpfGgJzD5j{qMM?8 zGS`NLBGW~N`C6{8hE>WuQjGq`OC_;5b2MowOnoy}qKi-_74g0yBUdg28|jUHw60B3 z)x|3c<#{b4CX<_PNo}4z-I6@;mDD`ll0;AP&G0Mvq>N9fTkodzNj0}9U&%E_Bi+uY zFTer!Z3I6C9XftsDE*cC*Q`N<qdX0{R8;#KsVgXNT-WH`)M#ATuz3T$hUTIZdF}?c z;5HVZNcw&5Arlq8y357~Rw#L^%<DCluCH!r7??nYM~_G8Yk+|wZ*`3^-{<rC28M8= ztn3jS)jqVsh%cHeZ*1~!*nr@6lZ?t=4puAVC`9DZE9lek66}OZXm_NnlrDL0>bi%~ zm*sN!yn=hp0I{Xmte~!xxSOQDKvtyF+u%p5p6m7b{2K%Xu`*Zy+Ygdj;x!h#Yw8B& zrYUJ8y4j1u5}yUM-HHy-HCr+sN_J!2p!C2Ab~bn$n-sYT5`*hedtgy|QvS-|GDfdI z%Aq_;gqo=24q^l$c?Ws<ME2@oS|<dHa*G|q6o>z_LP6P;gQQ9C8gIj8(2E+^c-L=0 z3x_0XbYgRkUXCkuV+UC$Y&JUUyvXY`#BsSLxtFb!xX;IS6y~^Gr_ctrQP?+|lhWiY z0NBAnEA{*GpR$}b9?_veuPegl+h4s_p2-E5KJWTE>_0DaT+7@fYw|o>N@`kmPHtX) z!Pn$>O6_Qw%5BNb)}#{m`s%vI8mTuJB#nROfQOCvH0Q~mp>zMqy#c_nEwL@P0}l>2 zxed7D<pH;5I^JI4a~D2$<3s-+j^E=1prkaf^oGL=!(aa7JB8a^!9zQ~{UiEC*g(CK zI`>Mdy4ECHa%EnAPWi$rXK9jUZd&D{Z0k2UXptAukqheM`Z*hFRs;Y4Z-3K^&&Hf6 z{=>8dXKnKqoSk;&i^g3yKYc1W`)Oxt*-JNl@RVzv_A%FoD{~&K8~yTwf4+0uiixb) z75;uva7Nr$xpR+gUv&D9zlwZybKYN!6Mk3Jp7@;Ou~oNMc7Kr5(ei^wZ+^zm{loP$ z|5-OWJ?B2N^{L~(9q&n>d}sPBkG|-!@0ZX1=hED*OW&RUbLW$$qR>B2+x@pa>9{RH zj5~7cb9sRsXJXyGrj{Qe*T0J&QTO1ZN7B#2$BPe*{SU4$<MR<d31hJj#3zIgjXj3z z^Z2}n&sX@+KUvJchsNk%G&JKw{}yF0J|E*lW3h0o>G%}V75~;{6KHRjPJ=j(`1m?n z-xMeLF8!<cBK!se_bp-EKUcufiDb)Z+<!Vk_HX*<{8{)A%)=PpkNaBiFqEgLukFCi z9m&5;emVK=<VWW{F)uvt$h^PJ)7lbk78|qeu>HyQh3$e(lTw%BPq{0lHKje}Qc7y- zU8%cMxwOo*yVHJ<_Vcud(+;HdrJ3f>od193zc&BG{IBL~?BngL?SHX%+Yj0!c2jyv zdV2cK^nK}HrH{xkXC!5mWvt5hNye`-Mr4l3v}fjL`ZBjrGXRF^AEzbH&77N`v^42w zNxw}xoRny_TA#P>v+hfNExC2xU*<hO@3ndF&ii~`oNbb=#TK+ZZF|-BH``g;loV4+ zQp)O-pQijaC7kkN3ZFV7H8FKrswZ`Q>cP~vQje#ePQ8%2DQ#O?=KR9>d**k|7wlW@ z585BIpR<2yZ%;pv{zm%D3~Ppv(VFqSj4_#$GA)_wGKI_sGC#`vG;{TWwF|zpVB>;^ z7W`&Gc)^Pc-d}KX!TAN37Lf8E0ngW4jFx=Mt(G#2%kq%r3CkYKo0iWl7cCFYeQfTY zx%=jRFn4y+yrjY;M^a1D_N0fB9#48cX<yR&Nn(=5nqakCS6F@4E!HmUE7pp<=3 z)ye;p{9^Je$<}$z^Vq!m=lw6_esNx|ZL#eR+iqKz?S$=;&5)9wQjoGOg{4fh&$j=< z{#Uy$-J5<_`UB}TnRjFcG9S!*1e{;LfU|HMT%P+~($h&?7Jk@*`z%|Yt<Y9vbJ)sk zx7jLfx7%uL9$SNLgH5nC+qOWnt+sn@_rU}1xBb-ipzUGXBeutFzqjqQJ!RWvd(IZN z?YF&bJ8XN?b`;t_Zu`(C+D_R{+djAT+3?S0Qq(D$6m5z=#gJlzU1p_NQc}TfUP@s~ OQHmp_46oNX?*9TcgYjno literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/decode/PcdPeim_crc32 b/edk2basetools/tests/GenCrc32/decode/PcdPeim_crc32 new file mode 100644 index 0000000000000000000000000000000000000000..c2ccd306172b3240103cf19dd12ebede0f1330ce GIT binary patch literal 18916 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 S=A{&-6s0&)%J6!P<NhxjY4f)L literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/decode/S3Resume2Pei b/edk2basetools/tests/GenCrc32/decode/S3Resume2Pei new file mode 100644 index 0000000000000000000000000000000000000000..2d1d44821ef897723d0da667f2e0b495e8ce013b GIT binary patch literal 18272 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 NT#2E7r*z}b{{lGaaHjwO literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/decode/S3Resume2Pei_crc32 b/edk2basetools/tests/GenCrc32/decode/S3Resume2Pei_crc32 new file mode 100644 index 0000000000000000000000000000000000000000..d18f172842a5579fe15b9ac8c9bb90ba06b96644 GIT binary patch literal 18276 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 RoR7H}b0voUozjgz{|nl9a@7C; literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/decode/demo b/edk2basetools/tests/GenCrc32/decode/demo new file mode 100644 index 0000000..9f9601c --- /dev/null +++ b/edk2basetools/tests/GenCrc32/decode/demo @@ -0,0 +1 @@ +This is a test file for the GenCrc32 python tool~ \ No newline at end of file diff --git a/edk2basetools/tests/GenCrc32/decode/demo_crc b/edk2basetools/tests/GenCrc32/decode/demo_crc new file mode 100644 index 0000000..546f91f --- /dev/null +++ b/edk2basetools/tests/GenCrc32/decode/demo_crc @@ -0,0 +1 @@ +U@"�This is a test file for the GenCrc32 python tool~ \ No newline at end of file diff --git a/edk2basetools/tests/GenCrc32/encode/PcdPeim.efi b/edk2basetools/tests/GenCrc32/encode/PcdPeim.efi new file mode 100644 index 0000000000000000000000000000000000000000..db03070a222507e0d035754fb46973ac92b32931 GIT binary patch literal 18912 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 OQHmp_46oNX?*9TcgYjno literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/encode/PcdPeim_crc32 b/edk2basetools/tests/GenCrc32/encode/PcdPeim_crc32 new file mode 100644 index 0000000000000000000000000000000000000000..c2ccd306172b3240103cf19dd12ebede0f1330ce GIT binary patch literal 18916 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 S=A{&-6s0&)%J6!P<NhxjY4f)L literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/encode/S3Resume2Pei.efi b/edk2basetools/tests/GenCrc32/encode/S3Resume2Pei.efi new file mode 100644 index 0000000000000000000000000000000000000000..2d1d44821ef897723d0da667f2e0b495e8ce013b GIT binary patch literal 18272 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 NT#2E7r*z}b{{lGaaHjwO literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/encode/S3Resume2Pei_crc32 b/edk2basetools/tests/GenCrc32/encode/S3Resume2Pei_crc32 new file mode 100644 index 0000000000000000000000000000000000000000..d18f172842a5579fe15b9ac8c9bb90ba06b96644 GIT binary patch literal 18276 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 RoR7H}b0voUozjgz{|nl9a@7C; literal 0 HcmV?d00001 diff --git a/edk2basetools/tests/GenCrc32/encode/demo.bin b/edk2basetools/tests/GenCrc32/encode/demo.bin new file mode 100644 index 0000000..9f9601c --- /dev/null +++ b/edk2basetools/tests/GenCrc32/encode/demo.bin @@ -0,0 +1 @@ +This is a test file for the GenCrc32 python tool~ \ No newline at end of file diff --git a/edk2basetools/tests/GenCrc32/encode/demo_crc b/edk2basetools/tests/GenCrc32/encode/demo_crc new file mode 100644 index 0000000..546f91f --- /dev/null +++ b/edk2basetools/tests/GenCrc32/encode/demo_crc @@ -0,0 +1 @@ +U@"�This is a test file for the GenCrc32 python tool~ \ No newline at end of file diff --git a/edk2basetools/tests/GenCrc32/test_gencrc32.py b/edk2basetools/tests/GenCrc32/test_gencrc32.py new file mode 100644 index 0000000..4d8e3b8 --- /dev/null +++ b/edk2basetools/tests/GenCrc32/test_gencrc32.py @@ -0,0 +1,124 @@ +#@file +#Calculate Crc32 value and Verify Crc32 value for input data. +# +#Copyright (c) 2007 - 2018, Intel Corporation. All rights reserved.<BR> +#SPDX-License-Identifier: BSD-2-Clause-Patent +# +## + +#Import Modules +import shutil +import unittest +import tempfile +import os +import GenCrc32.GenCrc32 as Gen +import filecmp +import struct as st + + + +class TestGenCrc32(unittest.TestCase): + def setUp(self): + self.tmpdir=tempfile.mkdtemp() + self.binary_file=os.path.join(self.tmpdir,"Binary.bin") + self.create_inputfile() + + + def tearDown(self): + if os.path.exists(self.tmpdir): + shutil.rmtree(self.tmpdir) + + + def create_inputfile(self): + with open(self.binary_file,"wb") as fout: + for i in range(512): + fout.write(st.pack("<H",i)) + + + + + def test_crc32encode(self): + inputfile=[ + os.path.join("encode","demo.bin"), + os.path.join("encode","PcdPeim.efi"), + os.path.join("encode","S3Resume2Pei.efi") + ] + + outputfile=[ + os.path.join("encode/encode_result","demo_crc_py"), + os.path.join("encode/encode_result","PcdPeim_crc32_py"), + os.path.join("encode/encode_result","S3Resume2Pei_crc32_py") + ] + + + expected_output=[ + os.path.join("encode","demo_crc"), + os.path.join("encode","PcdPeim_crc32"), + os.path.join("encode","S3Resume2Pei_crc32") + ] + for index,o in enumerate(inputfile): + output=outputfile[index] + try: + Gen.CalculateCrc32(o,output) + status=filecmp.cmp(output,expected_output[index]) + except Exception as e: + self.assertTrue(False, msg="GenCrc32 encode function error") + self.assertEqual(status,1) + + + + def test_crc32decode(self): + inputfile=[ + os.path.join("decode","demo_crc"), + os.path.join("decode","PcdPeim_crc32"), + os.path.join("decode","S3Resume2Pei_crc32") + ] + + + outputfile=[ + os.path.join("decode/decode_result","demo_decode"), + os.path.join("decode/decode_result","PcdPeim_decode"), + os.path.join("decode/decode_result","S3Resume2Pei_decode") + ] + + expected_output=[ + os.path.join("decode","demo"), + os.path.join("decode","PcdPeim"), + os.path.join("decode","S3Resume2Pei") + ] + for index,o in enumerate(inputfile): + output=outputfile[index] + try: + Gen.VerifyCrc32(o,output) + status=filecmp.cmp(output,expected_output[index]) + except Exception as e: + self.assertTrue(False, msg="GenCrc32 decode function error") + self.assertEqual(status,1) + + + + + def test_CalculateCrc32_outputfile(self): + output=[ + "Binary1", + "Binary1.bin" + ] + + + expected_output=[ + os.path.join(os.getcwd(),"Binary1"), + os.path.join(os.getcwd(),"Binary1.bin") + ] + + for index,o in enumerate(output): + try: + Gen.CalculateCrc32(self.binary_file,o) + except Exception as e: + self.assertTrue(False,msg="GenCrc32 output file directory error") + self.assertTrue(os.path.exists(expected_output[index])) + + + + +if __name__=="__main__": + unittest.main() \ No newline at end of file -- 2.37.0.windows.1 -=-=-=-=-=-=-=-=-=-=-=- Groups.io Links: You receive all messages sent to this group. View/Reply Online (#93032): https://edk2.groups.io/g/devel/message/93032 Mute This Topic: https://groups.io/mt/93391061/21656 Group Owner: devel+ow...@edk2.groups.io Unsubscribe: https://edk2.groups.io/g/devel/unsub [arch...@mail-archive.com] -=-=-=-=-=-=-=-=-=-=-=-