Closed ShowKnight closed 3 years ago
Am Samstag, 3. Juli 2021, 06:58:11 CEST schrieb Knight:
Hi Knight,
I used openssl to generate responses but the results are not matching with the expected values : Some one test like this one:
"algorithm": "SHA-1", "revision": "1.0", "isSample": true, "testGroups": [ { "tgId": 1, "testType": "AFT", "tests": [ { "tcId": 1, "msg": "F6EB4374909131CCCAA2D690D74BE58A11EF7E59B593A83B1212208680", "len": 226 },
Except: { "tcId": 1, "md": "41CF7C313415517A0A7BEE598C18193E6EC75A91" }
Generated by the acvpparser:
{"tcId":1, "md":"d75d30056f682760c88d0310596cad8c11c547fa" },
I use commandline to test:its like this echo F6EB4374909131CCCAA2D690D74BE58A11EF7E59B593A83B1212208680 | xxd -r -ps| openssl sha1 (stdin)= d75d30056f682760c88d0310596cad8c11c547fa
Is it about len issue?
In all OpenSSL hash tests that I conducted with the parser, I have had no issues - it always reported the expected response.
Ciao Stephan
-- You are receiving this because you are subscribed to this thread. Reply to this email directly or view it on GitHub: https://github.com/smuellerDD/acvpparser/issues/31
Ciao Stephan
Hi we try servel times and found: For SHA test,use test case,len is little than the msg len,it test faild, but if len is same as the msg len,it passed,How to calculate the excepted len? Its about the len problem for SHA test
Can you give us a clue or patch?
https://pages.nist.gov/ACVP/draft-celi-acvp-sha.html#name-sha-requirements-covered
Test case: SHA1 "vsId": 627946, "algorithm": "SHA-1", "revision": "1.0", "isSample": false, "testGroups": [ { "tgId": 1, "testType": "AFT", "tests": [ { "tcId": 1, "msg": "", "len": 0 }, { "tcId": 2, "msg": "BE368ED9AD921E640F892BF7314CE23548FECFB20F920A89ADC11B8A521A427EB21E38F7DFEB9312C4F81C8CC5F53E9223F3B763B0", "len": 420 }, { "tcId": 3, "msg": "6CD3C2189CB3DC2B5B6E724F59BAD85FF967F8C167ACFB5B310F9576E7A9EBF701CB8C6817DBCF8B923706BC7B90C53544C8B3C6C3FB7EFB3BDBF26A3F6E60622AEFE01CF01D28AB2EBCBAE6A63735257BD2E7460A14E4E3E67C874084FC464F1DAEF3B0B43F082A10BFDBA8DD6779C31A796685BD7C111C9E965BF8493B690865984C1FF8519CE256A4C41D3385784276CE7BEE06ABE76BCCEA0053215ED0D6DB0F2E57A9EE9194696F31A4E7DE08A0E97D591810441793F1F60C8BE604518649ADFB3A2463C1CFE88A321E3FD761DB75E65772E71A82D64952B969BC78209B8D717C49BB7C8740F03E32951A60E6A961C90406A1DEF9C7F5B4B6ADA2B00E1B1F4E7F2680C1A479EEF951DEE0788B00005C1BCA9541EA0C97FF095FF67438401F150FA560E9057B9599468BEB91C6FF12AF23DAF22D2E2CF3E00F863B381335833D70A9799FAF22370DF9C56EDDECA787429609ABBB7D8FBC8745100B3C878D5CB569D8374C43AAB6CD966FBCECB438F01AC4C0C56FEAED15A7F5BB4A65EFCF7DB6B02316DEC04A055D7996A69337B0408F75FB0A03420ED87EB6F99847062E623F02F49CF4C86615D0C2077CC36BCCA18E005294520C7EAB4F17E144D41CC964F65A125FD73E40E20A4F1681ED5DEE61FBCFB50E6B24BE5160CDDD37AA7062E945F4DAB3CBC66F4310BDB9125DE1772A4F8BB539040D59D10FDE264683539FC561746164883DEBB106B91DC4F5CC31891260894A35C25FA75B62F1B77977FC2C82AEDE8F688B8CD6D7EAFD63B2B53201979FBC7F7E22723E05C9F01514C19A021CD07A27CDC728CEE0096EA80263714B760679157A18FCFED6AC56915A6CDE4492FFC52200A8060EB536987D234AEC5A5B4A81F5062D03E1F47CD1D3D7DC07788691F2EEBDCA97F7FB7F427DFAF37BA67E2C6D61E766D485EE82EE96A0038FF7B4956E9CF36C88C6AA675BDCB2F264E31371D765D3BA0DF72EE45B4693405F575BF5705FD48F1857923F1BF55C056A4BC981D8FF58E9EB24F3452C0BC21B07C65CB9E01D3E2C62EC71304DBEE1013A5AEE1D619908BA0F3A12B08C397D8987E1FDFAF6985E58692B18E1BB6825FFD5817EA99349FB05C353504077A7597DCE2A9873BCB682B90283675C9CCA0D617A8857E5B74BB21E53BAB3795362DBCE87B7ADC6C9A0882D6735F347684EBE74CAA3A35377DF357BF3621244E3E9EEF7C8CFAB5B3ED6031FDDCFC4EAC7A582660197614058A49C3312EA9ECCBE65FD2C20BAECEAB4BE0A2DE5FDF6141246669230D2AAE11411B0B5BA601B4905E71BD3E5D9332C39B33AAA7677520B5858952C33A2B5DA39E10555E7249FF16880A33609506CA7749834E4AEE2C0196799D8585183C9A71F2324507EA9C66C97E98D368EB9A532B0E6B1FD4BD2FF5C3185FFAF9337D8F7B933EFAC851D8C269780B9AC3EF39D65476D8E2A7B82D90ED1A96E0CD05FEF5197CC2A2C1CEAA041112B7E22E3CF07A190CE0D80876EC3E35E0C99255E9F5217A39B7D44932E3352EC179B3D64391D68CECCAA227590EB1312BF5A503F8C56AA68E45BFF39D46C3CF081137081D4A2BA5ED6B3B549BAFDFF98B51B016B25D5FF861D1208F57A418081F5DF739083C62DC0C776158DDEC77AEF4F797954EE30D1F2A3F448026383D4EA3F921137EB4F122E6FF19DF7C8A37C65146A77512DBE1407175CE197F69DB2636DDC2F5B2C9159C6CAA7150439E751858C409E15E742C86EEF3FC94515DCD584F5D5DF182708A5B4805C93F42D0346DEA1F774CC20A8394AF65665D245D8235E9D42077EC7F37B010CC0BC1E8FBEC553120F1F393D72C6FD52A50DA00BB2753C7D23B4F25658EFBF2EB03EE7A58DF003F87184BB169E8050345FD7B5B2A9B34BA863AC81C0BDC298C835D9BFC4FB5D2A5ABE4BBEFC1DA029A377B01AF1B7F5087003E302B64CC0422E82D8B6C825C9E478C76DA7B0234F8B6462CC8301F31BA2ECA1E38CE1D7F3C665FDE04BA9048C6FF8B00C0B58E1A85390C2D8AA13243E0ECE83BD5493C09486D2C6895A76DE4E3F0EE1A73E01E824A9F4774D745CC68EED56592BF9459B4FA1F00FF57F8B9EC8DE393770A2139667F87B00EFE3608694C84414F93FBC89747F83BAD669E29FAAE458AFFCF38ED5005196E680B81AD15AC679D81F3685238C342B017715E7FEE0FDBB0AB4BD4D0EA0654B7E634ABDA17EF8D0BC68C59D67F10D6D480231384DCFFA333E5B9BCA2D84E29DBA9C742EF97E2D30AF63B7F9143A14A47EE8D1F13E1FE7F290443DCCB1A8327263D9D77C958C541BF3715635C28A777A264D725FF7447792190BBB4F981EA2059778858BB63CF1F348C937B7B000FE4D93D5ED53ADC9ECE9658FB9877F9CE329270834C2D80B5013A12029E42FDB21D2933AEC7D49C90FCA3B5F950850911370AD6590D3D391888053351CBD942848F8960818930F908EB9DA0854608BA348BDDDBC0C76D5B9DAABCDFA0DD682E9D291C020AB994EF12CB9DA668BAE3D547A5F0DA1A568B8091943A369823A486B1E67B693B70602545F8324C47FEEFB7E1550365641A34F8B237726ADEFAC72537E5A55872C52A6B2B54D42F4F3DB7E41F19117F68DC6C575ECE4E45DB8B7A3A076189FFE2EED112B48C41D07173C6E07D4DF65914EEA6A1C5A84723D7DEF76D2525A3163E1551F552266E2F9E51FF86120624D2F89F7FCA97C81554E4033902BBC0225119D9068200CED874B95E69FAFD2B4710E1932D4796DCEF44B772C42ABB276E084CFCD15937066605E6F687870CCCA7C84DF42A29C86F4DEB325DA886F4DF6B40C596A784F394E52BDD15D6E4A801825FF9D8EA2668539EF481C4EE3C52233BBDDB2FA8AF2C8181381AB29D4763CFB00079FAAA307D46908E25D42694CCFFDE5A7D3AB478221C5A83E9676CF8C1C4C8A859BB3C109D98F88F87CAAB67258ABF67AB7F0C2C9809DB960B27A975D63858F15B6C1F8C6769B989672C61FD9245CBB2FD23313AB604347927839A57027FDC09A85DCD113D9CAADC99C250AC82E339A59EABF59222012F089D5D093246534BD7F8E4E0AC0B4A5ED2D5533BC52CB1D650B5C08A4E57B50E8909D87B9C4F802FB5877D7E5953EF66091A2D47308A38E0F8D978B27608F335573E34BB717378E03C83C61E0DAA8FA9685693218D0C2CDDA549EEF54FBCD39BA56B08E91D57DC9C5BBA737D67DE2AC7AEC86F298498A0600752134E0FB4BA90012DFC38925E91F76017DA2D6C540FB897FE89EA4CD4C981A39B278F4F5CB415E7DFD19796C2C658B2DBFE4E1A43FB4EC1428AC3AA826FD2C572FB58B724B37E65D49147A2F0FB02A2346CBCA78EF49ED3DED3E2BB39CA7927946871E5686D3F98A5DD0EE2CF2D952545FD74FBB7672DC4C0C104642C0422C39436F06620489FA968740EDCD97FB4E3382EDF5CADED5E64EE922E0816A7ECB499C8626430CD54055A22E8F5EC3C770EE93B0C18D8DCABF69B0153946DF9CC5149FAF9508E9E3E2427B83959E3F9862206BC01E31956AF9318F0E24EF19BDD737CCCEF727E9DCAEB1E054F886FA4C79D7025102B6D493E596D57CE59693C499720891EAB77166736E76F2C37903CEAE74A6B8B3B12FE1C9B984688C5B4B25A2A3CDFA55AAC32091B60032969C4B6A0163D830BC3666656C5E3AAFD6011E75A10F8F0EE3033086A564F11A169C3E02675C6BAACEEC3533B2B0FD8631668580D218D0D69EB2C66B0EA91CF1681B166BE46C145D83F08C71E42DC1A96C3F31C25659352D08226E7DB9ED9D5D5E195F74586BC76328DDDA0945D8FB0F2E7E56AA047B0AC98F6ED5ABCF3F395DF9D04AE13CF029C4EB363F6322C49DDFCE3FBCF14B952FA8F89C64822EB099683EFCCDE1B6C94EEB71A03F32220565F3F1045A68A7765AC7B201A88BDD9B672A68636688B88EE428A66469A45CE1A8A326421D97DB03CBA587846E9AF3F54FDB469C15CCA88C360E9A356A711DE24A229C9C812D74ADC67E2E0F16EE9D7E5E10D58786A904473FA96F9043A181F9B49C730C1B50062560CF451813E837A79EDFD4EA6AD280BF2EB7EC8752D57D0B9643F94C943C5E34FD4058096634FD2C2EC267C0AB183DAFEB094879850567BAD6AD4D1116646806A08004A6806BC87931738CBA9055B6E5530FB2FC42FEB503E8DA7330AC2EA1BD7CF81461FD8EBD9C078D783A0750974BDDFB3FB623E6FEB4E202373E09CE06A9AF940B279F92DE92C7D4E343B5970420187CFEB2D65151881FB5F4DC218372EAD12DD30D70B1C6DCAE1607736F1E68D6E058C17CB8D7D780A17DD7646F8EA8CD4852601E6FE478DBF9B98AAFD1F305F718626ACA50BD3D314A40F3EB8BBE9438C5D9667315833B4B231239F40923C39567632505C76EA6B0C577A1A9319DEC33AF93D195866D583F683238F76C02A8EDEA238979F243CC976CECE06DC2A37F5C09A7F8B00FADB6F0DB17499204159FA5E3644CAEF9F7D9A643E1433F5C3356B1C43D0D0BA88A5036D2836FCBEA0E76B02C3C9F1B55439916B3A13A61E48B7248E333A27AC5CBE2827FA1F2930C8D497E4127C8CE7C3BE568B7D0D78B0CD1D8C5147C57338EB7D7F50D1D5538AA50E9892C4933BD5088C73A6733309DC0EF9FD4D89EE3F41475C972E5195943744A9BE86E967AACA6B163F8706DA7582ABD0E645ECB8544395621A6F7D86EB48337A80E8B5D58D153FE9E5DE51D4C361ABF4D53CDDA7B1C5B2547C967CEAD450F4917BCA3C219760EDC3ED9E9DE6B7F1F8975A31F7FFD98F44DD0A2D569AD92D8863C4E9C6BBF8E626AD1CB736F682DC81B31156185CD4D97B42863507BE2E0A7B249520A339A509CD528EACB934F1CAF231EB64A554521DA488238BC5C658B579D5CC28C194EE6D37B6AA6A7A79419ECE4BFB607387C0474D56B5B1A6FCC077BCE9261AD3C036CDB27F0C65BB9F745A39CA68863E15BE9FD0BFE9184280CC443C45E9CED39B6956F239963227B107364F185273211CDDA6D7F9963D1728E728913416A2D5C3528C5D89831BDC969946FCE02149C97D785308BFB20607A6E0953552A8A0F7E43690421BF0B94FE6666A1FBDE3F7BE3C9B39F50EA6EC53B4882E22F2E222E09904C0F7FF8644974D61CF8BE5DAAFD503683795893A1CC50E6FC8606806B1B6124FDA4DD91B265410C32F0B8C1AA39D08B629A49855507352BA1305DA757A7C8D5BA68957D88B4D0CCFCAF9AD4F7F2175A2F5E2833EF1B8F9320644685323FBBCDC7B0B3C39201E98ACC389EE498578FE7B591E711758E846C2C297D70419F079D92332A87D9CCEA16719DC27587BDBA9FD6862239DB4DFEF2368D8E7E1659268EAE26A054F7646FD9C9C05F7280BCF9BAA995CB682FB5C2328621EC49A4B5D6CF0E433081786435A1F051ED9F80871424D53535EF2836D3DEA818B92B065E2BB761E1F994E1CEF1DF84F39F03926C4B414CF2A9CE6D38AF09D810506843B8959155800BCDC661197F03A127D940ADF0F880FCE39DEF7F376DADC1F7F94DF380AACCDFAF8564CC3C308E974DA4A45CC9D00B9C5DC2656071030570980291A8145145CC34087DFC96DCBF48FC5E803CDC47C489A16244C67902E82D81FDAAFD798CF7CFE380A28C59AB00A088DC655930876C44FE0B350C21294ED896D7A9997F482763B9B2C44A8AC294D67065EFC7DB8105299528459EEEB182A7CD2F50EE83710676A43EDA35B1036D45AA25BFA3CF1A07E9C42B0885C0CBA095E8754DF8083EFC2E09BCE3E36ACB549FAC046891456B1B1B275B2D7FA10E358620470105A11B4A14B7050CEA372F42F3AAAB95F451C2DAE978EF135253B53316A71910AFBCFF4943FABA54205294083AAD8134D424DA9F32F4BC02E85D44CF0D25617E4169F072DF7FB8D0EEF5D1A77DD9709722C058762758789E31DEC6FCCBAB4BF1F811E3AD42A3F52E9D03F9AB94EFE1B1580E7857175B8E23153314D2AC57D2E6A164955D8ACAA79B1771D1B77D8FD344B175529E93EB568D6F6C77E83F0A9E6CB9753966349326ACAD0A406DE6FF918D1D53DF4CC48A5DDACAC9F0B17754A759DFB8B50D1AF09890C0172AEFC42157601FEF3CE4647E276C805456CD25E6C3D9FA068F3E5FAF7A5A3843CAEBF8DC2F239716963B2CA1606EF714BC974CD2D48B0325CDF544EC76B42A6B87C4ED1E833EEBA59FF873C6FDC7FDD42AD665A4C5BE08B6087C1B18C73711080028675C4323EB203A1292DD430DA1E90E0C2387BE2A93EF2330406C6127B630D7B4D29DAF0BE24E5C25D157AF2BE84AE87C3E7D67E6BED2C41668257049460D6A40072B568A654E8B8B6E7EFF56058B57B2B7A7332072DEE02926125A6DD9CCA2CEAFB4B53FFDA023739FDAC79EFDEA28C2934815EADC19F4BC6B522A86C02964341FFD422E4FE8FACB900F38679D4D7D509B1A953E00C2CDF1E30528F86BB580D64062EA7B3CC5DF268616ADA809D9C3944C963C40FFA6990A767EF42F1182E23FB7423F5EE1CBE6D75D94E49BCD4270D7323A7D4FF5361A81C3CC45259B3CBD6CB07AEC7AB0F7CEC9E431791A285AD6BBA48F6BCEF194BAA3BCF054B093CD06D4AF0CF4A5FE15669E096CE2AFD9D770167CD6F2A2136C79A71EEA8E1795D834C8DF52F19873559297317D3B6B3DD98E4B07EA8AC897E627A0A767F992AA981D44D61E876622780107A18888390D210F187F38B1B11F0CE966BB1412725D341FBBB6488A4AF20D83B99BA9D57F4CE0B4B9DA56C6C853D38D606B7B75A6319CAF7707D51BC1D8EB6F44010384AA6D52E02EBA44110CAB2590D2086336635384BD205242D22F116EFDED6373EDE2A797C5A1DCC72AECBF03B9D8022D30D6D6D2B7EEE62C4032F4BCF5E732CE0E64FF94FF3B3A0D340B75A54C9477C6EA075430BB73D6ED79A6D101AF12D09E900B962FA0EE32870792468EDA61D31332A3D1C685C2DBA6949E8531C043A17C984E051FA7A86ABDCDDBF5951A6B8BFCD691434E8F68EE952B3FD80BADFE60FB2960F8645CABA475F25F31745804E46CA83130213ECADD92B461C94A1E5D1CFF4E4D9A00D8322C08B2801B6CFDA4F6F28BF668C8FFB148C361D29888B456F60DCC2D194EF7706510F831D0878C3F654EE87DA3146AE92C699C93713D4524388509A9AC62F3DF702D0CD3B02A18E754D311DFAEEEDC01B5788E0B2E699F71E4AA5BE96EE312752C996A81162063BA72CCFB0EAF2BCE946E788CBED62076DCAE22F413E68DB451E1BF097F834A784039662DA7444D94DABC", "len": 40991 }, { "tcId": 4, "msg": "EF8D662FABB9E5C1483E4B192D79EBB6296FD5A4EE09812510744115F5287A4CA4D55C30DE3E58F0B3E390AA1F07B5BED610712198E3700BBE442DC4AA59A4D8A8AA20A2F881C65A916E885E553F693E38EB6F5A0122F6857854B2E458EA5F3C01E5E98805AEAA05AA72048FA8E8A0316886AEC955E6FE92326651A287B08C95FE3146F570D1C4A7F48500FFB528EBC9F73A9525405D2D88DB1A5A0A565E8AEB31F9B854F2976BFDEC2F26436F99AC8C70E7C1529BFE8FB686398CDC8FB0971B08B05961B51CB1F88D30E40FD3B38267F729BB2DB9D35B8B5B6DB16450392ED03F3A36F201A3B5EBD5BB263749EAE4775DDCD5BE40D6153F625B056B0847B3B3682DFAB7EB2044CCA83BC3CF12FDE66098F9EBC3EC573E39B2221246705E27D94A3935700B7D3149E081D57ECFC761B4E1B5893060FDEC5D9E06351C6A654EBDBAD39674B2C7D6622A0CC198B49C7FE73EBCEBBEDBA2ED20ADA83821DF1B56E21A8A1B0FEEA031CD74A4D30DDE99C59667D437C147A907962384D4A4D50AC6FD1AE032BA72A7FB76BE33282378D0A5824D0D2CA618B1824D044DF7A9D6AFC09C880C1E841C52E354BA10B2C9F64BE3DB2EEB5495A78F0939644ECD163CB587313D1EAF1CEBD46DE1E2D47521EB269C1163F41F5DE13DBB7768CA588A348668EF729E30929D07CF4E4975D362C67203BCD9019C6564F9CF2DB10C64BB22F717B6373B942EE37552C0198457B02B6C438D857B414C3C602AC68CD407F0082912A0E5FE80", "len": 4370 }, { "tcId": 5, "msg": "EF9DC18CB9AE20A4A27C8A6526840B26B949005AC85459F00724FA2233565B7DFAF92C1B797283BEEE8DE55137437F92549E6B364E1B231DB93B013B6F0F3089CFC1A8A61861C522815075ED72132B085E693165DE293FA39F467B3C97031164795762624BDFFB84024B618FBEC2623277963E7E73ABDF3025F48415E5C76FE0DE32AFD447A29E9EE7A50FBF5B6396255A610406E5EF99272DA804EA7CE329120ABAF354E7BC957B9D226C0AD10CDA28DF02F90ED97A9DD1899592DB1C3DC355AFE0CC358C77265371DD8181BF20BABE8523283E38D8F2D8F07FCC0E1005591EA42B2D8DCD5F4A094331E9CC538C4F57A3A4E0755C6780DD6C9992D87E6B835BA9D30C0E785E65659884A7B9B65F7085584C79936102F3B23BA7EC30C2E28DE8E9A02DC211A9A41B3841784E19BA8358C857BD0C526AFBD5971FB61C7B9DA510D2C1723BB83ADB155ACDFE5AD888D1F3C467CC69F360A85DDBE5FEECBEFEE7369C50D8EBAC47C096BFB06EFCC8D7BB960C751D62D44161ABAB20837AD39AC7C9C8C9329220DC66E1CAA0AB550C557E5F60D08984C6B001CEE2F9C815298B396B057B5247351C6895FBE412D41042A57537AB060B05CB431B0E67B0897262C5DF74BB99B1CAB40868DD8F4E0BCD0E3695813A77ED6AAE249D2D1CFB3F8544234BF1E1E446D826B1AF9870B92A6870380BA535CD95ACB5BF590071D87A63A2D994B9B67C051BDBC94ED024A32809270D05995EE05ED8DD026DE4FE20A17581D23D98C0517575D16A8592A470AF21A25923134DFC37DE72550B2DF1D484615DF540D3C4CA60481E519596BED12FE62E5DB98483FF68C2A40065229B95C765014465D458DD7F5DDFA510B4C0DBDED777A4C3B93B87A5C3C999B144283FEF310654709FA8A78CF014F50C27C3305C55448D6088C6CDBB73E20E7BE5CF9450EBCCD3E71D312564D82F8884F6FB87D0457F7ED8792BBC04EF73A3C50F81BA7A9BEA07AF9377DBD41F068A46CBBD2F15A71DFD9E4A303CF17C675CF905446D64745442240F2EEC411DCB08B61B386A4C6CA9097AE42ECEDC1014DE7FB6F99F29BEA77F36099DBCB096E1CF190E4F065AE715F2A46C2A0BF58A4BC3CDDF8322ECE21705219553605F4D77A4F0245B29D3E2BC02DBE48340C3C9148969FB0A263BD3F3723622EB18EBEFD727ACEDD50815B3BCD807BEF4DE564D260AAC3D5036752292C52C6EDD90BAC3C3D0C4D98DEBD5C0C6BA31814ACC9921E313B3A5DCADBE9A013AD9A8CADA6FEE59508D8E003B60DBB088E910D0765F6A6FF94B4B8114144F5EC514EEC7864BAFCB03F9AA3907192E5D32BBF0FB1D5F16299F2F168A38F050FAC4951969BC0E6C7BE42C318E890B9D0FD78273671113F3DC7EAAD5F2C795F933863344A22705DFA621020F113D94D47521DC1E3025D92E0939406F9DB48F7DF53F6F235D80BEEDF7B2973E3F1D2B1EEC468A80458936A0A98EC56312FB923F61412C3C5C811AFFA223A966C680BECE9A55692FF3EEBF217DCBA47880630F9F1B5FBEFDEDC77257747E6F04AAB26C4C0945C42298AD9D203F1A05CED8917C1326521B32CEC614607603DB910EFC3D81987D0BFE7435F136928FC20227E85B500F7E00E63204C913443A588BE231AE011C2BB933E38D9327384F3997DB589ACE8DBFC0BCFF59AB53AEEF8A075D2985CC259D5CC2B8E911D03CFE3FDF587600CE43B7B369FDD39E78EC701AF55DCE27782E900FDC28DC844129BE909FD299C5C9E2E9D584A1B25C357B859F3F28398ECD9C10791C41E5B6173A551C5A0919FC8DB1432EEA9BC58AA7AE51C1E0F5C09644189BB7D127750D13D4714A2A5A0C853B6492FFC07FA76755E39E914CF78A88868176668E55631EAF05AC92031B6C463F9EB96D7C4717BC7F280D32442410BE66726598A24A25F4D01146D83A268F6315E4B55FB7F2FCEA181AB0B2483531F7DDE6B8927C802AF4FC6F5E793331D731DA5769761BECA72104E21ACF3F2064308A780811586BB87F5AD14C5D1403CE32E9F1D4AE67BA71E5F810FC370187C44ACC727B0364BF23AF05CF308BD2A132031B1A55056B32A5077B6CD07A1ABE4E8D5D1EFE4604EB4D3CF741E10CC1EB52C88D16F74E132169CABA81ECB3FC1AEEE4DBF2772569BF1A12686826D4FD6187681ECC9509A5287FD24466071EFDB7A71C14DE6C4953739720209A7892F5AE32C3A0E869A33705C3483BCA9900E13AACE2FB1A8330232650886FCC0F6872BB9CDD66E85BAA98A038980E8F6FA5FA04EE3004EB4C908B9BABFA930245719DD3D7AB6E9305D16AB1CC49AD0ECDCF22E58CB33DAD3C48650B706CBBC65A66E9E5A8DC5E928988B82DDD4135B19DFC0865C2EF692D5546B0343DF61BBFFD49F301F9490AD634E5D2F7E092F3EC7EA3038C2CB70E4F68E32EB5B293765A7E9AC0CF2FB454A188371CD33CD21085FA64C7B252985ABC1920B44FE8950D51B711C9F318EC5346575626877527701D311748C1E32D6C468FD9BD80FAABF7AEBC93FAACEF439D4324AAE1C0E0E897D4A3B0F9E045C9E5B1BEB936B43179F33717076E0AFC13CE2AF98C8BC6DF2AFFC48DEEF8EFE10CB62C9EF6C0BF6C94D1B073BEEBDEAD23C39C9EDAECFBF682A87F76A349032866F602E41D2EC1AE6F05E486804B87AA7469D4F02354D90F9C49CDB8712E70795630BD46965514F8B5BFF5B3FC963E5060F0A515C25959223C993B3227756E62B7E31CBE9BE69B1B7D974B7A7917A8D77BF52FDF91285C74EF572D336E9291FF3A6CC9A76DB8458ED0363C1ECE487B6BCAABC4B774A8D1818A8A78DF756B53BBB619C4F481758140ACA28862A9E6FF6836A29EC04E4618FF614B1AECFAF031589AE607CFB2B20E696A14FF8DA832CCA77773D1A6C5ECA3BFE977A691DEED55AA2E3295748E76DA084B62ACF006007709DCFBD84E9C618D2E5C96468EBA59CC1905058E213AA9A151C06C08511AFE542E0462E9AB045AB1BE53D01E2FC89C7653B5C9F05A307D6AC4A6DEA94C1FE1007AC40F2B30AB81E2F761BE9CA76E48306BBA26301D7B1A3D3195952CE950117CEE798C77F9083079E7E76D766DAD005BD5C7FB5F9ACF7A093C0635632569CA62D62A49A9C81DF6651BC3019782584364F6BA94B3B2E9A938215495F16D4A3CE77EEFCEB113F9146A7BAC4944099B5DD1F7A2AF60514950A6DD5DA0DE86721363070B32E02A3B09A61CE5FB058E8497C0351A6380AF43F2B3D1F8EA1B9F335076B3D9CA9F5D92EC59235EA443FB209FC7793E11D6E8C53AD1AA907316922B04C129F6262E4C0F0044F34A45E8159D4243117E46A5F2786CD80616AC5DD9E1A56946B9DF3D65AF45BFE20451579F40E856EC4AF837944D7B09358DDF93CCE44B42A1E52AFDF4308E09B5DCF16F81A267E5AA7B422322474E73B7D56DF5B8FB9AD573D0F8052692D2306E1C7CE2C130DCA381968F69B9BD159BEA538EC660FE2432BFB09E5E45E97C39E4FDE039E138C7469DCEF3DF2C5A8612313FEEA2CAB72C4E545E1D867778707577BBC441CF44D9D8F65B7F8D4C7A90DD3917D8B65CF3F5AB3DAF7EB913BDA01B5C4059BF39BF2809F44B96BE6069FFD3172F421795CCB7CF7AFFFEF94ECC248D19E1F74A4DA80C7B2F6E8512C16EA93CA6CD873648B9FD538CA76744385776795E582D0BA4A4A09E678CD193204274E244394EC74784E546EB9DF0EE467407FF01A5553650ED75F794CCBD2E00E6F17D95AFBA4056781CB58E7FF71A9A356B22BAD27A11BE0A91FE7BA741623875C6E2B68D23B398C2D37BB51540E0EBF19CD430F5A3C7CBA608B961530529F5D3CAD160E30A39099A185E9845B9C8C3F1517ECF3536054527C5C2C42D4FB1236DC16EDE04D23D6E6A0966FAE8EF8F6ACEE4AF022695B540A8D4331E7AA51303134789D52299A89E55A564EA76AC195AE43D693E50C468F5949377AD729315CEF5DFA7024875A83824FFC891894BD21E81A7B18E7206E0BA4BD248CCD1CF9E1E34EC344ACC9B0097CDDD473380B2C7DD5E477B12B148BD2828759D4B0B74176C334B4251273267FCB862D931310B31E71D5442E73BD369793F5D7D3297B8F8A50E763EB09BE531A12EB4E418C3FA87A7A63504041B25E271FDDE3458D394B39C7D9D2DB6B2D81C23585C0D1E43655973B650C94B5774403A2CF188B6068BFF3BD5277E1D6E3DF8717E5B7A5D60116184963AE4D0CE86C3FBB89DF2AB499A7CD4B96D31A4EBEFAE9B2397D01B71FAD6219AD052835EB6A704CA6A0B1CD91A075076EA563832FC56EABE4589778B8E67C5BACBC550ECF3BF11A562A142D86EDEAB0F5DA9D7BE92ED60213F771FC84C676DAEE58BB9C516AC20C214CB1E5E7828376351C3F2FC14AB46858A67991283266E8301BD02A443FCD150A7EC69D970EC88D88BA2EEBCE86D6BE831FBC3E7FEC6AE7EA2914B0102C306407EDD6B7E93767F4E4F99DB33A513124CBE0767483D502C116AFD4FF03AD67066D695CFFAB829F1994401382CD61B7DF28187D97529DCD44CD825A8850FC54F87C4B14F210593D2977A9127139F063515805FB7885C371625B6D38E8CBF6A286D12D7330B2EFC50371035AA3E008B2066B069EF3630605EF7BC7E1F55C8E2CD24CF279CC16CE57D7197E7EABB2CD4A3D629576F8A90F992AF969FF0AC6DE61EFAF0D714A4614BBE21F27E31C511F597AD2A8D3DE9DFBDFDE3CDFE0B2B0571EFC7ACFCB0C481CC6365414D488CDD5EADA3CAF41C5DADCDF9A39B9472C4B0FF6D3D0B0D25BF9762A346EAEBB5D75F99783EC2BA2A72ACFAD2D2BA482723154E50F524A824559F705DF568C956809EB5EBC2B9861301F293E53160C32FF5560A10436A528B495A33C4D5BA1D04922C3597EA3D7F2F2591BB47AFF38087644618126F5D84B4349E2741E6ADA2BB3A43D8B3E827760D6A796DC620892B709A1872787757486ADE1FBF604AE9A89357DBD0DB621CA1D6BE916BB7C862D3F2007229913EFA970B1D3ACE8BFE369ED431362AF47D2DE2C5ABB3750E6267A7AEA9BD96E9BDD9C982CE4C0746E04B88359FCC1D6E117DAF995BE56B087D67572483AED7866A3CA04EA63C702AC73EA914BBF275BB8A295F7F4203265E2871BF4078CC87896044261589A9996EFCF39C8243937A3CA7D1F3093837CA92522BF63FAD6D1E63C2ECA6342F1D8B7D3297B70C9578881EB16AAD972E4876067A57311326CA06B20031FACBB02BA755672351B03E44E9833D1F0BB4211E93BFB85861D670F2A08249F7537EFBC73DBB1ECEB7C2062E60DA2DA007C74E50AB53B0F690EFE6C6221CE559DEA11F172542E45A04CA7044B44B48469C931185DA26967094210A221723992606BC79AB20CA35174D2A7741C245179B13FDE9BB44EC14564A3FE1585A33867A0C328BCDE65A44864E5473F07EE2B0777964559F9FA75A90885E056550836BBF1CF62274BC9101679D89609F7E9CB651A533DDC5F0A37030A9465EE7C3E00FB0F3F08D353257A9552846430FD603D8E745C9475E325FB1A82D56CA65E629AFDE9938A35785FC1AEC901025A24D9D8773AC451173C0A6E9954613334D423B654DE890AD5F75852C553D08071DF4F9BD5EA20CA14D779671449616DAB25357F4992C189A0AFA2B804D90870A33ED81AC22C584A338D29366829BA988F5D0BCDC473BF29DA31A82E3474773DEDC1B0AEE1F0CAD6F2F9D308BCBBBB68FDF70C7BF7165273CDB9EBACE34B240695C5D203B2986F9BB902E416C78CC3C5DEAB99787AED03DFE56347718C83D9F7109A9580617A14774F6748FAD637D7350B9830DD2234812B66539DC70FDF03021DBA4E9EC1EF5E0F68DBAD1C186A33632A7730AFA5D7915F39578FDF699D52FC83616509BAE1AC5C47F694D393DA62F632E74462DBA68362C3E9806E4BA5E61DAF20D69B60466A8EF9EC56493A7548B9C5DB654FBB023D7A1CC570057086489E3FCF48FC9448B1B8571F64F900A04833EEF114942405CCF83D6AE431FEA18E7EE576E9828957AAFA4FA97587FA5AC4E0F74EC6FF052DF50951D2343F230141CC877F53C5A15F82D5F019A2392F3ECA51AA0733408E15DE393C8AC20C0DBAF411E284A6C4AC6F082AAF5514C36731B433FE41FA371324514E440054A96A320B04FD296AC352C8B3843E4684DF44225971542C5E18BFF13B4D68198D5FF34671343478E5A0A308403C5A9A084E91D967F160280FDB463F7DE2CA0DEBB2E4EE1E469536B8CC13B9B9640784581DD4057B73CC924E118D064ACD25195A5C6C67C0B2B7FC540D2D3463CE59BCC1B0EC82FC246A783AC580B622E923C5E07767F300E95544A0D029E5CBE757EEC7CFEF8EB32570C24F8D5135F758AC9DF2F93BDBBD016CD13FBFA86CE6DA056BFB980ECF8736DF1C5325148DBA94E4693D30BFD1735366F6BF76A57241C3E7443B0BAADBC1E9CE92CA8F2F23F80C47E531EA30EE1E2097A653F0B955A9A9AB6248ECB9E27A16736E1EBE11EB19DAC758CC6F3BED465050F50E24D25557ED50DC9A28FEBF6514544DF7973E4F15A5EB062611231A6645AB47AC3F16CE446AE55D0D07B0E4E0ED69EF698232F1B7FD14051316A05D2A7DE42B0DFFACCEE3DDD02A68D62C29AAFE3CC64E6D784A70D92758EDFA8C14954E1359515BC31DD3B85CE1ECA3AADF36021F9F2B35AB5DB73586F0FD608740BFDCCE13B5622BCA7D681C19AB0F8017AA24D9955B2BF16361C8DB9D264065CFB207F16CBB55040F977ACB1CB90D2672B2AD3163505968B1298968D971C3252884B526D18252A4FBA809CEA3DD1B0CEA822D404B88EA64F8F973BF6050AC19661E8837A617A8A01318DA6DD5324224E909B9658B4943D0BC5B3E9A2245DDB615DF00E5E20416A407D8898F79A6C01773B6053E06C1F867048A5BBCBBB078BCA834349529B5DAEE27A02763D0487AF817DA4A9AE265EA2A742ABBDD125E442F3C79F7D4BED7D1BE30E783F0EC4CB1A0474DFB1FFF95168008D36D1B740BF5CBB133B061E8C245F2DA2A3018E5F31DC1460FC9082A1562ECDBC0B704CA8BE8610089C40A0E17B0105605156261F240BFD837A75C6CF675755DBE79B8F2BC17CFACB1EB4692F5F8ED4C361E9F8AA08B557989A0E27B9512EBD0771FE6E51C4674A480030D27DA49991A02F17FE225EC5DA57EB53910BC4FAFBF3320FC8F13105DB5E0A576FE50D42EC2D1BECB44D21EF1538EF9F559FC5549F7015E1C090C4AB8EE3631E1375FCCBF740F35660646B11D2F29E8D9CBFE73E7E1FCB6CAF0283E1837A53215EF4E3B5C68C5F3CDC45726ADCC4E242704827E202C012F529C356567DD19BD4D149D6B7370ED7C2A3EA009312F5300758FFB11F51246935AA18C49C4F0328DCD6875E0ECC3D42236779066DF7BF0DEC61A759A4AE725A3156A2F279303F3DA859F65020E191ACB2A46191AD55C1D89E91F6DB8AAB80D528A6419E7AEFE882F9245A2FD05D9FE33B320327859B0270F71DE263B536600287C6ADBEC4CCDEB5CDE52CAFC6B8F680F3AA13ECAE089DD665046D59A5B66627D420E6C6DE938D4F1EB13021716977647788181B5E36256E8F8A50501DFF66FC049E193C1D6E0B0DC57022D3772B60B75689590CB26AC5ED5F0236E99F52C14384A74CD21ECDEDD094CC8622258470C475F1A4DD42EDA55170360A093EA1D84D944657E9F1D6A8FB649BF859BC3625690D7589779E558BDC913CA8C7C9526C8F24445A48ED7E3BFD694530CCC8348E1AFFD35BAD2EFE91EE9145662BD2103E9568C28E4A53253C6922B87630421D23F7687CD807E9D553B28EAD6E29E75CB7DF7574E9EC2DF699D9DB458282B1209BFF6F4D888BEFB20A52AEBA42EAFD17ACA53B2750DE1A9144F106C9BBF228026ED3966B419201F106C453047D70E9A0A19737AA8521F2326AB0E1887AF6785D592C2D2A8B9CACE24FBE4943108740247B83BE344F812E9BFC2209EE7651AF4E09638BBF9763225FCB872DB3BDEE54729F57DA2A4483C0E2EDC28DAFFC78697B72053364FBE17C55AC02B610641C5E8BD00468DFCB23533CC887A115B8CE60839791D01A7A24790637A54D99BE896A8ED8447C5EFDFF0D421FAD8972E9B5FAF99C769BCEAB36D04C6364DED86572EA53F888C9B3C9FEF831607D534A72DC6D167FB30CA8DD6317A1F8445DF4306DC170F9FC4F54CA78AAA9217733C2D6C892BF5B114424E5E24E49DF922C72A619A6923E2A13079DC627C3D7F08D2BACF73424B9020FD6FFFF9B0B03ED1CF03C8299ACA0E0BA0CEF4DC368E6442480EF5034FA8468F741C64772FA3700535F2F0E09FC717A7DE3F3BA8FAE45D41E72FBD20D574A4A0044810B271CC2ADC77CFC073D06B91E52FAA7814686AF764AED6437A7FE7F51666C14C11CC475256338413D2690C184A8A1D08AA6B2B817059FCF9C4027E608B82297FE8D61C023874E33FE9DB3141A89A65D8C073775FE6CA220DEE9FA739738DCF03CAB4B2B042FD7C21AB124B9267CB798B5BF1EE5A861434BB867F1FB4968E32554DB92D2225A1AACECE1D541B65A88CEE345DC7A5C33CDCF7F6F8720DCC2A5EFF2DD13B14D9ADC90397D19742EC0B93F88CCBFED58D600668CDE6CFEEA542A045602027198119DA13335505E9A58AFEC6C737506C8FBF3F54CABC2EB3A0FC78BDBB3CEDCAF27B0FFD586E94CCB4F124FCBA90EB3DE05B824DEB3994B1173261A801DADAEA679957D25550C8120D2A6E7F6D25C622A49A98960755444A4D654E0060A1F72350B20260B3AFB878F189A34F63C2164532E24A191E2B9C89FA0B81EDC9D9BBD079D221836B19050E9396C183FF3E55CF5317DA1C72511592358D79D8DE2C0FD32DA28DB9B1697D0CFEBC4A13DDB21753C44039F98CC972E78BF30CC80603CADDAA9F5616923A0F8D1166E5C538A18522559FDC8909BA5283B91FF3C0F66E73E48182D542F46CF380C92393FF6D0C077FB4033699E84C607FE24A6365DAF8B0854652D1402139258C19A4F56A1A54CE1C85AEB9A6F3BA3772C2F67C39F8ED45DEADAE345B088D2E4DAA2A541FDF23567E645C7300B77E337A8DF9CD4F86EFB64DC4B4AD70B35278F8AF71052714C54CB045E3098F3B0A737B1EC78D6185DDBECF7148C50BF3BC418DEB8E0B2AD952223B7B732D25BF07B689C0A10CF4C04486DA9BDE9956E0C8237328C8B6F1B4341C2BBC4DC62CB85A8DEABFC5D4170F8A56A27FBF7ED59DFE6921BFC5804D12564FB4B83C9F16E70699FA9437354A09C338A915A92803E8B4485B64CD5332352201D52FDDFA28534C4BA7A34769E639CDEEF2F7B58F140B7F929264D24352CE3D221E1D4F3818D6307E84DD53837B46AD2DA800014F77403F2447F6B078B1D128FB26A2D0B347960F14472CCF534FC76942DD84349BA963E4EEB0B6CE07CA77AB5410834AC4896AB1FCBBAAD37C2ECFFB35FE9AD07D25597E91677A1E1992AADF3A891E032B1D47DD8DE179D508156C48CED040D2A992547233AE682C6718B35690D2E8C8779EAB76D12462B1976D0CF9B3C136CCC93BB2037175A1D674190210B2F142350F0009E59D2A0E5BB5A5C7D564FC4569094647D30817E881842880DF6038777F4291F5F94A4013310EDA3B5A1725FF14F882290A70A4C6E4F95425B05B1D15D11FDF1B63F13DEB3270D897EEFCC1D5C9D8FBFC95E9975E7E15C717357283E9A6A9383BCD0FD810D51812A1AF02DCC", "len": 54807 }, { "tcId": 6, "msg": "72DC2D30E9499093015F66B3DC0928E3D1B492F46B93790A00917A55B0D06FF992B0F34D34C36DEEF2D9C75A9C1B0A3657BE862F74FC88652961F45637836CC9B903CEE63F7FA157E306F1F4F8A36CF4E7B2D81C9A28FC619733CDD51B50F5E4CDC0FD090FF1E92FDB2057705E2099F6370FA72D673A8AB60CDED829AF7C783B774F14929AA3038FE03F5724DF083F705C7C51938C6D33E25297AC1380C96F324536799D90F57388A2339A9B1CDD4DB8F159F21EAEBD72F1EDA5870D2CA6C27ADA73022CC131C94F9B0050FE5E2088DAA4D8BA43444AA647633BCE5A440E88F332F9BBA5B7F291AB9D37695404D52DBC00CC1BB59AF4739619B91F53DD6786045454D48BDC89A6C08E5438B8E1BF01838FABC2CA12DD480684982E5EB32000D5EF4A140558BC68C2972E92E2FBF82F4718D273DD3C764E685A2D48454C3DEF213733B0100719550389FE406146A233CCDD7A9CA2413809A05B1B1EAEBFF1C1D890D9852FC50DC2B574B5164516AA8479DB07370D167FFABD62761EC9CECAB89F44570CCB1B0FD41588B2213CF56C1679E5ED787891052F9CA4A13E99224A6796F10CB22D2469665480C813451C9F5FA10F41143661A9ACF6843034826354DE9BF83EDB540D26BBFA24DA213DFCB4CDD924A2EE00E660D4CC61BF53DF638B2EA20610FAE9798343FD41FB9635760DB6D810980D92F6E4ABF22754D85124FCF5BA10984BB28DDD723235E4E59253FC21391078DC58453E3A52C288C6EBB678E2278DE9329846C750ECF153D131376E7BEE408ECA062482A44231917ADEC9638606151C00CEEA62C8DA7E00DBEA806CE33C66904F3C7FF8448DB81CFA0FA2CFEDCC3E529D1AABE17E8FCB49FF68105D5E2CA11CAEB630C458B337ACAF68F193247E68EB47DF98845914478001D8AB7B3A6785ECA3C64D56B88631359F04F5C510CC21ABE34AC4E31844E2FC0DE94B8AE9D7B1A52E026045294C360CC3B1C93B1054694C629452EB0DB4EE030C77A2EE93F4E66840061A791984403635D2970747EF73AFD8DE7FD040F1AC497B7AC969836CDF5BB9102A8304412BE16593DDB9FD6A7ED6E0265A72509F796B8A1EBB4566A5C9138C9472C6C554D63250CF70BA5D366737BF2F0E4D7F6BF02BD7F0D7DA747CB1D54D3AF064A23E06EF74D9DD40CB505B62F930C1177A164D7CF91504CB434A0C2E0F3B0AB898616881478864CCE7EA41DBBB1B2581AAC01058F289C60ABF4D78D8A6C42A0C2C167D1FB16CD88A6F4005C020C318BB23B3F3394837CF16801AED1F13D30CECAA619FD4D749349DFA598FC29F4724AC6D8BACB2B1D46DCBEB5468E609D2E4FE02A50744708647CF65A40EB602BA6BE900F7F2F7D10E91B2A50F5A1E199A42080F917D0B3025A460837EC1438613DA457381804BDBF3907FB0386A14E6CB4D27E894C9DD00DF6B8143CEEB628E42EA0F2440EA67C22A9DD96F7EEB9CA6E72E6FE050867023FF865EE8427679CCFFFE9CD410FB143A2E786E05EDDC873D54C4B947B8618CDEBE20205525953A98A3C64C0629F06AA0752742DD642F441FDC837E7D0E1C934C04C5C47B9C8A617055D23531FB64C1D241C8634BAE90A3839CBCE087058F6BD8F8486AEAC2AC68D972F06E08B3E0DBBC0A840D79F48B946EAF87270564D460C3DBE812D721CB564E4158D742FF530AC4C1445B665347C00A1F8BB519FAAA3149326D5BBDA49D0165EA60C0B596B3FA65A022AF961E933137A5B774223141AF020D6DF5F9B8AAE771DB79FA857E66C294AEE75AA9AD3FB7286714688C0FDCDFE4E53F1B5848A84CFACC5DD5D5BB994C0D4384FF1126944228C63EA105A5B4CFB04EB51ECA740518ADF8803EF0687D6609190D40DE8D2E9A030A8F5D6155447B0B4D3D5221A2651B83628C3FC0984DB8249FF74920BF1DEEA1D7C0308F887B3A3741D73D20A10500632DFFFB7CCF71C43A1FE6DC8F7CBCE38B5EF327A3C849835E090F325D88D80A7B87C6DDA3A84D95FE63F9D90CD943467334C5F9AC8187290BA2A4C964702834F8F3B5D3C330185157A0A82AF2542602D373A285BCD1FE315A890DBBF9A535A68EEB2D32DC16BA16BA81CAAAB2E2B3185E9E6F9A17B620262592E97D46D2D3224A5A0DA66C84A1420EB93BDCF723C34307548ECDC780019B929AB77D58C9D0F65EC1CE7626BB6DEC6B371A1952B2C0DC10424717C831E418D13361DA710C7929D38D8EB700D4864E6B57FEAB99D3CEF474288AD2F2A384ED78CE4AAC0AD84369E3B3EC20A634059A1439BA4D1E5CE71BDF6CB2B5765CDDBFAE35EB066E9B8826A41C0880EEAE6027DD012FCF62322264D4B94792FFE886EC34DBCF065BE39C44081D7F40C1BCD527FEB19DFD48119A7E3C47E90ADF9043245DCA3DC3D65ED87BFE78E0FDB15EABBEC42723420CE4B6719FA565345E9ABCE91A319F6D7A994E21F4A9E1FF833924A17B47A59B7A5D55FC37B75D2580CD25E0776436D500270669C39DA062E0EE29FCCAE601837B344E50069F94800211BF940BC2EDAD35EF887DCB20CFC8AE5C9CCB386036406231A265116CC488A4D18A92664EBE7DB9615C012764B51D9960BDCB2838528DA425E3CA3FA70E91F0AFE1803E69286B27C4048AEDDB6645FBE10C20FDB5388552C9FC8EBAE541BEEC49DD8DA9B0FFA580BA8061BDA557A0B49DB08165FBDBCE3D8B313E0EA926A826C22F447C1AE3AB62711CD983751084070A38E08E67801C8E59A88D5B62169C9404D6CE295EABEC7E3EE9E5176A27E5188DA02546BAADFD9059A3270762E94B563343AB5A2911A7307E9B3B6410753181AFF045AE6DD0D8AF31F73A06DB6B1A794DF58C9CA89408D24E9316935C2E8794A903727D63994CBFE053EF32E3F6C3952F98939809DB84226DA848BA8FB80321291EFC9E014912E18D95772CB7767B964DA64B6050B1B2A5A274C6757BDA555780A6A85F8D103C7AF8E449BC812696341EC494E50F84C8D17E8AAF3DC40AC6D752F8524DAA995BE18C5BE41883303051B18B8041B1A74FD3F452F9E8F2C8D6DDFCCCEDB17847BF9E05458D5F57BC247772A2069AE8C2A43FA9CB956A3861271ABB3CD4A8A8A2F4B726680455E7F99E89BD314919E2911AD17495536CFFE5070A9A7559F645E1A8BCBCE82C039418D4FD37944F3F6BC28F14331A8A505EB0A0526C986EBCF7D61E0C71B5DB72A64EEBFFE6B21D9F3773A3093150CC63EE1971985AD2517F18BBB0543487B30FCBC065007E796ACF49FB24BD188677A72B529424C4A7320B4E69785182669A5B31BC8FA9F8F7B6833E363F8DDD9FE9900C32BBCFE3E4CB5A695EF834FCA9058888015D021684DAE621770990019C69469E74FA88EF235D8EBFA62DD2DED7FA47C6412947E6870407BAAAF340728B009730D60BF7F0CCCAB249438A1B8C949014B87C1B02349A1CA96BEB55B9D6A7D149C1BA676EEBB2C3E2445DE2023170F30F63C9E844D5C2519845F7AAB4AF0E102C45BC8C7FA4F4DEA0C0F0C5853361A015A004C7E7D317064D390C63C95384D309E31564D28693132BB1BB5CDB108BA4A8C1FD398218F441A98E1213B8208F5B1CCBD610D70A6212D986E0DB15C1945F4CC58459AEA19FE0F4ED6E34986D9A0C8DD01D6F70D76A2D1AACDA21F8E82F18C3AA80532C1C2C3A3B46E841377CBFB4A7D8C444D9580ACC18B175DBDBDA27DC2FA5B1572141E45115F7C87BA482DE8F87B6FB1FC55EBD7402A194116E413104C28CC4150C466AA3F889A397CD0D6EADC2E31D0DDEE969F3BBBE9E8CE4DDDBB88E9588132FA173A4C3DA082E527932A12E79EF49FABF994BA0F4B680EB2E7E01B8F51000AF9C26B22D17CD783409E8723E8ABA63DF94AE9F9538B05653A1BC90533D383AEB712BE8DCCEDDA85F2F83504A0921A7BED13EF030FC71DA8503800BC02CA7B75A327B5F3178341D84DF9B06123559D3AC7CBDFAF4926D67D05D6110EB6287FA359686A4DDCD247CCB32839E634238E6146C6E4727DD4DE0D7592D55F4FF50077DFE484B1B6E401AC4E4D7417244C0FEB356103C6A05F97EE1A1121DE8E860A374F5E32340EC3C25A8D84D215B2E81E976153E55A2C5FD612289375793E9F311053370F42E3714F1ABB30168661C0719F9A506DBFA66D6E5EA125B54DEE7D8AA40B43D63487B8F7DF138BC79AAE7737EDD153F6C9334C54397B86FBEB4052A682CAC4FD99AE52E39119A0FC0AA6D9E5AD0105908500557908ED84977B4A11800F866E64941438E371E8F71EBC4531BE030245FCC0623CE13F6911D281D4DC98385D414C54DCE7E30DD602B1E184D22AB0166C47D249DD50C2C3418C0746B974AAE8A39E7FF1C46F4A2846ADB30FA470E529194B497770DBEBB13E294C220B5483B5C19605B743D951B5BF5325C91200EC9DBE129B3D3A6C8EA955C3DB2614F98B7C76C510910E933BB48873D40F753185194F612B86C0FA8AD237045A8F8DDA299362AB0A971A3BFED9A95C37B53EC5BDA04368F04E9CEE17816C3ADD0D7CD510B03912C532E1C8724FBFC874D88BE70D1411C7549E9A52B637DDFC5F9C8BBEA21E34B3AC4BD9CF67A7F79AA14315E57DBBC758BC1EF34573D55EAEF2596079EA510B9ACDF9A2C47CDDE657E41E2804D6D045C006660FBDA8F2BD4F0046AD5DFFEBA8D957FCB5C38BCDCECBCCAC4831246EF5AFA76055832A639783CD2E823BA9B2F42C4F5C73DC7FED205BE93A1130867A7D92824700F407F825CBD935A0BC29B805EDECCEBB920177E6B8546D7B502F60B96DEABBE3AF90D0FB0AEE755456A584C9648A40A13FE8584E75F6A1D4F2F304312D9C5630E31C903E8E0EA3FA4FEDDD5A29607E64608E45C41B9F003FDF6EF9BEE8B53233FFBE29E2EEB12F85BC73DD76367133FCA1FCF66FC045EF0D0F8EEFBD94506E2D6403DB6D5D205166EE160A0AAC0FBECF1C8E0F46E2A647CB1B870330281DABB67E8985F530507AB133E90618110A9402BF17CB4016ECA6FA090BBDD7E1855FE43E2B0530127DD6E7CE2633999040D6D95EF4C57801E9E183B9A873073848E76772A668F7D3F307849FCD29F86060927C12E620C8FCD29A9712E9231A0266A4F81E93FA32BCF9CF8FBDC24A9C80F46CECC2757DDD30F60B7CD925E19372B556EA59BAFCDD4D64E190C361CF084F63CD048C95DF69410EA31B614797AE8A92E17CDA99F04E08E982A1DEBEDBE4117CC470D47C265432217459F8F5B6C006C05FAF45D07503E49180B2FA118AC558AC012817AE7EEA32275D4FADE4DF89AC8CB3698434801294DC1F4356688B8F71223ED88F634CCA29D3E3C5F319E003D4E71B85910BE79774908B6468A8BE15FD40599DE8B470C80254656BDC04B3204087EC148E88DFDAB0279CF02B5F1E9F3FBFDAA63A208BB0FBAA1E60D6A7BF1190A6C37737EDD5C7F693CE74756C6210C54C038B1643D7040F14025450C66E8E9C026C8D7FD3DB434AE0FA01348AD4FE0E6F2745265B140D34335B133110B8E0A4F30F4A6A608FFC8139E62A510B375A37337509A703719B5CD6FE0FC06C7D211B4B1C6BE51C317378DE5897E660D422332B7FAE41C43BB16EE4669BE408CAD9C1DC9B252D7A75B6E1B6CDD2B4E08FB372D2089B464EFDA67039E66AC3133A46B11D88762446F43BB6C5FD4F7AABEB454F29BF1E4F8BF74A42CF7C21A63C7CDEF6388EA025DEED21F048173D994075EC6B8C974FE2308F3FCDAE451168F483DDF3868FE09856D1E679A15EDECBB4F887D0E5263A1A70658629270707B556C35F16D2E291D846D181C6A1B057B6A866C4B60A682C43AAB0E618582769E8989829F915772279BE82491169D4CB568DDE4080EFA05D80BC649DF56C406A8FE2FB9B7D16D594F8E7B45657F8E8A838B64268B2B74CD4340530CEBA701A3E04EA31FA120D71A8E69107DDC3D452C18B2F0E0FAA4544C1DD0DA8EEBFBC35F0C5882AAABA63C746C5ECADF78929E1DCF3E08AE060DFB63F84FC5DE944379594988107A5A146B2060F7EEF5084D9BE2AE6FD264540CE81DD2DDBF16C69D6B5A54D32D14754C8CA1A35CBBEF2BCE41B8658B7B009ECD2C769C85C7E7B60E7D1BE71AC44905016E2A6F7132818285A29AC5762443B95275191C3215E477FC13D5DE3E75CD68062F8ACF355313E749A9B2693FE3CAE35B5A5CE72C4F348C3E60C28519CA2C380CD9A840089E13AE5C466C67A222D8BF98EEA86AADDA41AF6F936D4901702DB511558C17A262D103C409C26EFEA41FACA9C4F546803D8D99F04BA2D9A2D7B81FB46B0CC1CE82838E3428A73B7332FA126C1021BA90E1211D175B9926F0052C6B4436A0F9B78CBCCB7F8628A15BA4F4897293DFCE43FD555565C34E8B4D03145CC902DF68BB6DA54CDE64B8E63786E165E6E62A0462F56E249E5C675CD89B30376C5F273C09DB709C9841C4B122F4B2CC2026267D3A80BCF03EE9432B0A3D8EA316DADAE952018C0D6365851EE6AD0EE188719A663E461246497A3D96E8D3011D60AB5E30D53A3DBA8D65C44DC6056A7C7F2BFF0B5AEE4E750BAF2490BC1A7227B24B2351298D0C887DF5558DBC1DF66D0AFAB05BFBB46983FC88BEE2C3BBB0E3F2806BBC7375772F86FBBFC4724BFEC992E74B6DFD65A81D0897C7A1BD93833CB9C7D8BAE788555667ADC1A3D1711AC42A7C7646F86AABCB3B5245C8CCDFDD489E91358D0F2846082E44D7A830E3704E5F93809BDB22CEEF55E8E32E90839A3E56F18641C07A58AA185268C65900B31E80D64C671D343925D3F60867D25E5A960A30A8E402F124ABFA9ED01547A1E55D50B68CEB1AA56FFFD68933E4265248E868B0673F5D04D40DC2660C8D3310AE06DA2EBA1B47C247717006E8D6FFE612062B0426F6A7C08B0BD1D4AE6116DF05BF5F32CB395974EC8EA70FFFE90FA6E270C8236D39D00E38A567148F3451EE806FEFF87CE157DB29983DF604DF66F3206008FF50974FF4B7DC132214830C2A84ACEF66DC2F06EA7019BABC2E87EB4BC87C989B5ED69A6FD6CB2783CBC7F4E4556B7EF02B2E6FB8FC66D6EB0725C0DF60DFEA08686196039C1A944CE803514604C2E2EE674B2BB28401FDF4D9368A6A180F871C0EF8A7375AE53B56E1F4B9FA5BAF229290D8EFE8FCF8011099F0E8D7717641A2FEACF6265572C7563327AB851197E4C20EFCE159B185C9051FFDAA213C6F7E8C7ACB924071308F7232A16DC5FD200D44112547EF03BB6D90EC6857E5E4FAF8A1ECA9A61EDBF6E756ECE4151F16B66D76E28F1B34116A3621EA6D3659877C5648C0837B6B97EFD32D59585A39DC57FD23C1DE613B42B82568143D0EAE2340AF471EF27713D92F5543CB5DEC36D34B5EF91C5A9936C3753A3797559AED339E8B468F2D843B511A7D5B1524B17DF0BDBEAF2A424DAE863E75A32EC82E578A6B687CDADDF391FA893B6A09207538196800C6AC24589B1B662383BF7EC48C84867C8A5DCAE5F0836BD383DD6814AAC13422F354B2DD06F5C646C0CE77FCCD0C19D21DCB366D3B5B54788A2B4E626126F2FABB4CD1A557A447C1CB054145FBF6FFD140CA3B9CBBF06FC4F909824EB7914C021372F2CDDD599D5968F25DAA204E820D7905F3AE29066DAE1AAFFEF4FDAFB428B062937E0378", "len": 43008 },
Test case results: 2: Digests do not match 3: Digests do not match 4: Digests do not match 5: Digests do not match 7: Digests do not match
Am Dienstag, 24. August 2021, 11:28:26 CEST schrieb Knight:
Hi Knight,
Hi we try servel times and found: For SHA* test,use test case,len is little than the msg len,it test faild, but if len is same as the msg len,it passed,How to calculate the excepted len?
I am not sure I understand: For the SHA tests, the input as provided by the test vector is to be used. The parser provides a msg buffer which has msg->buf with the actual data and msg->len with the byte length. You should not change, pad or do anything to that input. Simply provide that to your hash implementation.
For the output, the message digest output size is to be used, e.g. 160 bits for SHA-1.
So I am not sure where do you think some lengths are needed to be calculated.
Ciao Stephan
Am Dienstag, 24. August 2021, 11:28:26 CEST schrieb Knight: Hi Knight, Hi we try servel times and found: For SHA* test,use test case,len is little than the msg len,it test faild, but if len is same as the msg len,it passed,How to calculate the excepted len? I am not sure I understand: For the SHA tests, the input as provided by the test vector is to be used. The parser provides a msg buffer which has msg->buf with the actual data and msg->len with the byte length. You should not change, pad or do anything to that input. Simply provide that to your hash implementation. For the output, the message digest output size is to be used, e.g. 160 bits for SHA-1. So I am not sure where do you think some lengths are needed to be calculated. Ciao Stephan
I found for the sha* tests, they should be calcuted by bit then the response can be match. The msg lenth of input is bit length,not byte length. Its the problem
Am Dienstag, 24. August 2021, 11:28:26 CEST schrieb Knight: Hi Knight, Hi we try servel times and found: For SHA* test,use test case,len is little than the msg len,it test faild, but if len is same as the msg len,it passed,How to calculate the excepted len? I am not sure I understand: For the SHA tests, the input as provided by the test vector is to be used. The parser provides a msg buffer which has msg->buf with the actual data and msg->len with the byte length. You should not change, pad or do anything to that input. Simply provide that to your hash implementation. For the output, the message digest output size is to be used, e.g. 160 bits for SHA-1. So I am not sure where do you think some lengths are needed to be calculated. Ciao Stephan
Hi smuellerDD,
I am workmate of Knight. I do some code test with this issue. I think I found the root cause is the bit length in the acvp.
We reviewed the "ACVP Secure Hash Algorithm (SHA) JSON Specification" (https://pages.nist.gov/ACVP/draft-celi-acvp-sha.txt), found that the problem might be related with the length of SHA* message. For instance, in one of the testcases in SHA-1 AFT:
request.json:
{
"tcId": 1,
"msg": "F6EB4374909131CCCAA2D690D74BE58A11EF7E59B593A83B1212208680",
"len": 226
},
expected.json:
{
"tcId": 1,
"md": "41CF7C313415517A0A7BEE598C18193E6EC75A91"
},
No matter how to run SHA1, only get D75D30056F682760C88D0310596CAD8C11C547FA, does not match the expected md. From the draft-celi-acvp-sha.txt, it defines the 'len' value is the message lengths in bits, the given value is 226 bits in above case. However, the 'msg' contains 58 big-endian hex data, which convert to bits length is 232 bits which doesn't match the given 'len = 226'.
So, we reviewed the SHA-1 algorithm implementation(https://www.ietf.org/rfc/rfc3174.txt), found out in the RFC, the SHA1 algorithm defines how to caculate message less then 512 bits.
4. Message Padding
SHA-1 is used to compute a message digest for a message or data file
that is provided as input. The message or data file should be
considered to be a bit string. The length of the message is the
number of bits in the message (the empty message has length 0). If
the number of bits in a message is a multiple of 8, for compactness
we can represent the message in hex. The purpose of message padding
is to make the total length of a padded message a multiple of 512.
SHA-1 sequentially processes blocks of 512 bits when computing the
message digest. The following specifies how this padding shall be
performed. As a summary, a "1" followed by m "0"s followed by a 64-
bit integer are appended to the end of the message to produce a
padded message of length 512 * n. The 64-bit integer is the length
of the original message. The padded message is then processed by the
SHA-1 as n 512-bit blocks.
So, we wrote some test code with based on a SHA1 C source (https://github.com/jaden1q84/sha1 which is forked from https://github.com/clibs/sha1) by adding functions SHA1Update_Bits and SHA1Final_Bits.
You could review the code I modified if you want (https://github.com/jaden1q84/sha1/commit/a3668dd49c2dc619dedfb7cadb007ffb4bef30d8).
/**
* @brief If bitlen is NOT 8 bits aligned, SHA1Update_Bits only update to the data[bitlen>>3], then return the last char byte and bits left.
* eg:
* data(in hex string) = 0xF6EB4374909131CCCAA2D690D74BE58A11EF7E59B593A83B1212208680
* binlen = 226
* The require binlen is 226, and data is 232 bits(29 Bytes). SHA1Update_Bits only caculates 0xF6EB...2086, leaves the last 0x80 byte,
* return in the lastchar and lastcharbitlen will be 6 bits (232-226). The lastchar and lastcharbitlen is needed in SHA1Final_Bits,
* to do the message padding and finish final caculation.
*
* In the example above, will get SHA1 41CF7C313415517A0A7BEE598C18193E6EC75A91.
* If do with SHA1Update with length 232 bits(29 Bytes), will get D75D30056F682760C88D0310596CAD8C11C547FA.
*
* @param context Same with SHA1Update
* @param data Same with SHA1Update
* @param bitlen in bits length of data
* @param lastchar return the last byte if bitlen is not multiple with 8, which is needed in SHA1Final_Bits
* @param lastcharbitlen return the bits length of left
*/
void SHA1Update_Bits(
SHA1_CTX *context,
const unsigned char *data,
uint32_t bitlen,
unsigned char *lastchar,
uint32_t *lastcharbitlen);
/**
* @brief Finial finish the caculation with last byte and last bitlen.
*
* @param digest Same with SHA1Final
* @param context Same with SHA1Final
* @param lastchar from SHA1Update_Bits
* @param lastcharbitlen from SHA1Update_Bits
*/
void SHA1Final_Bits(
unsigned char digest[20],
SHA1_CTX *context,
unsigned char lastchar,
uint32_t lastcharbitlen);
With the above bit caculation, we finally got SHA1 41CF7C313415517A0A7BEE598C18193E6EC75A91, the same with the expected json.
In summary, the problem is the openssl only support do digest in bytes length.
Am Freitag, dem 27.08.2021 um 00:44 -0700 schrieb Jaden Liang:
Am Dienstag, 24. August 2021, 11:28:26 CEST schrieb Knight: Hi Knight, Hi we try servel times and found: For SHA* test,use test case,len is little than the msg len,it test faild, but if len is same as the msg len,it passed,How to calculate the excepted len? I am not sure I understand: For the SHA tests, the input as provided by the test vector is to be used. The parser provides a msg buffer which has msg->buf with the actual data and msg->len with the byte length. You should not change, pad or do anything to that input. Simply provide that to your hash implementation. For the output, the message digest output size is to be used, e.g. 160 bits for SHA-1. So I am not sure where do you think some lengths are needed to be calculated. Ciao Stephan
Hi smuellerDD,
I am workmate of Knight. I do some code test with this issue. I think I found the root cause is the bit length in the acvp.
We reviewed the "ACVP Secure Hash Algorithm (SHA) JSON Specification" ( https://pages.nist.gov/ACVP/draft-celi-acvp-sha.txt), found that the problem might be related with the length of SHA* message. For instance, in one of the testcases in SHA-1 AFT:
request.json: { "tcId": 1, "msg": "F6EB4374909131CCCAA2D690D74BE58A11EF7E59B593A83B1212208680" , "len": 226
Here is the root cause of the problem - you have a bit aligned input stream. But OpenSSL only processes byte aligned input data.
So, 226 % 8 != 0 !!!
It is natural that you get the wrong output.
In summary, the problem is the openssl only support do digest in bytes length.
Precisely. So, you need to ask your vector provider to provide byte-aligned vectors. ACVP will provide them to you, if you ask it nicely :-)
Ciao Stephan
-- You are receiving this because you commented. Reply to this email directly or view it on GitHub: https://github.com/smuellerDD/acvpparser/issues/31#issuecomment-906999014
I used openssl to generate responses but the results are not matching with the expected values : Some one test like this one:
"algorithm": "SHA-1", "revision": "1.0", "isSample": true, "testGroups": [ { "tgId": 1, "testType": "AFT", "tests": [ { "tcId": 1, "msg": "F6EB4374909131CCCAA2D690D74BE58A11EF7E59B593A83B1212208680", "len": 226 },
Except: { "tcId": 1, "md": "41CF7C313415517A0A7BEE598C18193E6EC75A91" }
Generated by the acvpparser:
{"tcId":1, "md":"d75d30056f682760c88d0310596cad8c11c547fa" },
I use commandline to test:its like this echo F6EB4374909131CCCAA2D690D74BE58A11EF7E59B593A83B1212208680 | xxd -r -ps| openssl sha1 (stdin)= d75d30056f682760c88d0310596cad8c11c547fa
Is it about len issue?