Lord_Zero Ametuar Posts: 122
| Asm implementation of TTH algorithm is as follows (TTH.h):
Code: | ; TTH calculator, asm implementation written by Albu Cristian, 2007 ; ; This program is free software; you can redistribute it and/or modify ; it under the terms of the GNU General Public License as published by ; the Free Software Foundation. ; ; This program is distributed in the hope that it will be useful, ; but WITHOUT ANY WARRANTY; without even the implied warranty of ; MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the ; GNU General Public License for more details. ; ; You should have received a copy of the GNU General Public License ; along with this program; if not, write to the Free Software ; Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301 USA ; ; For more information send and e-mail to cristian.albu@gmail.com TTHstart PROTO TTHend PROTO :DWORD,:DWORD TTHNextBlock PROTO :DWORD,:DWORD,:DWORD tiger PROTO :DWORD,:DWORD tiger_compress PROTO :DWORD TIGERSIZE=24 BLOCKSIZE=1024 TTHcontext struct count dd ? leaf db (BLOCKSIZE+1) dup(?) node db TIGERSIZE*2+1 dup(?) index dd ? ptop dd ? ;char *top nodes db TIGERSIZE*56 dup(?) temp db 64 dup(?) _a dq ? _b dq ? _c dq ? x0 dq ? x1 dq ? x2 dq ? x3 dq ? x4 dq ? x5 dq ? x6 dq ? x7 dq ? tmp_ dq ? TTHcontext ends TTHtable dq 002AAB17CF7E90C5Eh,0AC424B03E243A8ECh,072CD5BE30DD5FCD3h,06D019B93F6F97F3Ah,0CD9978FFD21F9193h,07573A1C9708029E2h,0B164326B922A83C3h,046883EEE04915870h dq 0EAACE3057103ECE6h,0C54169B808A3535Ch,04CE754918DDEC47Ch,00AA2F4DFDC0DF40Ch,010B76F18A74DBEFAh,0C6CCB6235AD1AB6Ah,013726121572FE2FFh,01A488C6F199D921Eh dq 04BC9F9F4DA0007CAh,026F5E6F6E85241C7h,0859079DBEA5947B6h,04F1885C5C99E8C92h,0D78E761EA96F864Bh,08E36428C52B5C17Dh,069CF6827373063C1h,0B607C93D9BB4C56Eh dq 07D820E760E76B5EAh,0645C9CC6F07FDC42h,0BF38A078243342E0h,05F6B343C9D2E7D04h,0F2C28AEB600B0EC6h,06C0ED85F7254BCACh,071592281A4DB4FE5h,01967FA69CE0FED9Fh dq 0FD5293F8B96545DBh,0C879E9D7F2A7600Bh,0860248920193194Eh,0A4F9533B2D9CC0B3h,09053836C15957613h,0DB6DCF8AFC357BF1h,018BEEA7A7A370F57h,0037117CA50B99066h dq 06AB30A9774424A35h,0F4E92F02E325249Bh,07739DB07061CCAE1h,0D8F3B49CECA42A05h,0BD56BE3F51382F73h,045FAED5843B0BB28h,01C813D5C11BF1F83h,08AF0E4B6D75FA169h dq 033EE18A487AD9999h,03C26E8EAB1C94410h,0B510102BC0A822F9h,0141EEF310CE6123Bh,0FC65B90059DDB154h,0E0158640C5E0E607h,0884E079826C3A3CFh,0930D0D9523C535FDh dq 035638D754E9A2B00h,04085FCCF40469DD5h,0C4B17AD28BE23A4Ch,0CAB2F0FC6A3E6A2Eh,02860971A6B943FCDh,03DDE6EE212E30446h,06222F32AE01765AEh,05D550BB5478308FEh dq 0A9EFA98DA0EDA22Ah,0C351A71686C40DA7h,01105586D9C867C84h,0DCFFEE85FDA22853h,0CCFBD0262C5EEF76h,0BAF294CB8990D201h,0E69464F52AFAD975h,094B013AFDF133E14h dq 006A7D1A32823C958h,06F95FE5130F61119h,0D92AB34E462C06C0h,0ED7BDE33887C71D2h,079746D6E6518393Eh,05BA419385D713329h,07C1BA6B948A97564h,031987C197BFDAC67h dq 0DE6C23C44B053D02h,0581C49FED002D64Dh,0DD474D6338261571h,0AA4546C3E473D062h,0928FCE349455F860h,048161BBACAAB94D9h,063912430770E6F68h,06EC8A5E602C6641Ch dq 087282515337DDD2Bh,02CDA6B42034B701Bh,0B03D37C181CB096Dh,0E108438266C71C6Fh,02B3180C7EB51B255h,0DF92B82F96C08BBCh,05C68C8C0A632F3BAh,05504CC861C3D0556h dq 0ABBFA4E55FB26B8Fh,041848B0AB3BACEB4h,0B334A273AA445D32h,0BCA696F0A85AD881h,024F6EC65B528D56Ch,00CE1512E90F4524Ah,04E9DD79D5506D35Ah,0258905FAC6CE9779h dq 02019295B3E109B33h,0F8A9478B73A054CCh,02924F2F934417EB0h,03993357D536D1BC4h,038A81AC21DB6FF8Bh,047C4FBF17D6016BFh,01E0FAADD7667E3F5h,07ABCFF62938BEB96h dq 0A78DAD948FC179C9h,08F1F98B72911E50Dh,061E48EAE27121A91h,04D62F7AD31859808h,0ECEBA345EF5CEAEBh,0F5CEB25EBC9684CEh,0F633E20CB7F76221h,0A32CDF06AB8293E4h dq 0985A202CA5EE2CA4h,0CF0B8447CC8A8FB1h,09F765244979859A3h,0A8D516B1A1240017h,00BD7BA3EBB5DC726h,0E54BCA55B86ADB39h,01D7A3AFD6C478063h,0519EC608E7669EDDh dq 00E5715A2D149AA23h,0177D4571848FF194h,0EEB55F3241014C22h,00F5E5CA13A6E2EC2h,08029927B75F5C361h,0AD139FABC3D6E436h,00D5DF1A94CCF402Fh,03E8BD948BEA5DFC8h dq 0A5A0D357BD3FF77Eh,0A2D12E251F74F645h,066FD9E525E81A082h,02E0C90CE7F687A49h,0C2E8BCBEBA973BC5h,0000001BCE509745Fh,0423777BBE6DAB3D6h,0D1661C7EAEF06EB5h dq 0A1781F354DAACFD8h,02D11284A2B16AFFCh,0F1FC4F67FA891D1Fh,073ECC25DCB920ADAh,0AE610C22C2A12651h,096E0A810D356B78Ah,05A9A381F2FE7870Fh,0D5AD62EDE94E5530h dq 0D225E5E8368D1427h,065977B70C7AF4631h,099F889B2DE39D74Fh,0233F30BF54E1D143h,09A9675D3D9A63C97h,05470554FF334F9A8h,0166ACB744A4F5688h,070C74CAAB2E4AEADh dq 0F0D091646F294D12h,057B82A89684031D1h,0EFD95A5A61BE0B6Bh,02FBD12E969F2F29Ah,09BD37013FEFF9FE8h,03F9B0404D6085A06h,04940C1F3166CFE15h,009542C4DCDF3DEFBh dq 0B4C5218385CD5CE3h,0C935B7DC4462A641h,03417F8A68ED3B63Fh,0B80959295B215B40h,0F99CDAEF3B8C8572h,0018C0614F8FCB95Dh,01B14ACCD1A3ACDF3h,084D471F200BB732Dh dq 0C1A3110E95E8DA16h,0430A7220BF1A82B8h,0B77E090D39DF210Eh,05EF4BD9F3CD05E9Dh,09D4FF6DA7E57A444h,0DA1D60E183D4A5F8h,0B287C38417998E47h,0FE3EDC121BB31886h dq 0C7FE3CCC980CCBEFh,0E46FB590189BFD03h,03732FD469A4C57DCh,07EF700A07CF1AD65h,059C64468A31D8859h,0762FB0B4D45B61F6h,0155BAED099047718h,068755E4C3D50BAA6h dq 0E9214E7F22D8B4DFh,02ADDBF532EAC95F4h,032AE3909B4BD0109h,0834DF537B08E3450h,0FA209DA84220728Dh,09E691D9B9EFE23F7h,00446D288C4AE8D7Fh,07B4CC524E169785Bh dq 021D87F0135CA1385h,0CEBB400F137B8AA5h,0272E2B66580796BEh,03612264125C2B0DEh,0057702BDAD1EFBB2h,0D4BABB8EACF84BE9h,091583139641BC67Bh,08BDC2DE08036E024h dq 0603C8156F49F68EDh,0F7D236F7DBEF5111h,09727C4598AD21E80h,0A08A0896670A5FD7h,0CB4A8F4309EBA9CBh,081AF564B0F7036A1h,0C0B99AA778199ABDh,0959F1EC83FC8E952h dq 08C505077794A81B9h,03ACAAF8F056338F0h,007B43F50627A6778h,04A44AB49F5ECCC77h,03BC3D6E4B679EE98h,09CC0D4D1CF14108Ch,04406C00B206BC8A0h,082A18854C8D72D89h dq 067E366B35C3C432Ch,0B923DD61102B37F2h,056AB2779D884271Dh,0BE83E1B0FF1525AFh,0FB7C65D4217E49A9h,06BDBE0E76D48E7D4h,008DF828745D9179Eh,022EA6A9ADD53BD34h dq 0E36E141C5622200Ah,07F805D1B8CB750EEh,0AFE5C7A59F58E837h,0E27F996A4FB1C23Ch,0D3867DFB0775F0D0h,0D0E673DE6E88891Ah,0123AEB9EAFB86C25h,030F1D5D5C145B895h dq 0BB434A2DEE7269E7h,078CB67ECF931FA38h,0F33B0372323BBF9Ch,052D66336FB279C74h,0505F33AC0AFB4EAAh,0E8A5CD99A2CCE187h,0534974801E2D30BBh,08D2D5711D5876D90h dq 01F1A412891BC038Eh,0D6E2E71D82E56648h,074036C3A497732B7h,089B67ED96361F5ABh,0FFED95D8F1EA02A2h,0E72B3BD61464D43Dh,0A6300F170BDC4820h,0EBC18760ED78A77Ah dq 0E6A6BE5A05A12138h,0B5A122A5B4F87C98h,0563C6089140B6990h,04C46CB2E391F5DD5h,0D932ADDBC9B79434h,008EA70E42015AFF5h,0D765A6673E478CF1h,0C4FB757EAB278D99h dq 0DF11C6862D6E0692h,0DDEB84F10D7F3B16h,06F2EF604A665EA04h,04A8E0F0FF0E0DFB3h,0A5EDEEF83DBCBA51h,0FC4F0A2A0EA4371Eh,0E83E1DA85CB38429h,0DC8FF882BA1B1CE2h dq 0CD45505E8353E80Dh,018D19A00D4DB0717h,034A0CFEDA5F38101h,00BE77E518887CAF2h,01E341438B3C45136h,0E05797F49089CCF9h,0FFD23F9DF2591D14h,0543DDA228595C5CDh dq 0661F81FD99052A33h,08736E641DB0F7B76h,015227725418E5307h,0E25F7F46162EB2FAh,048A8B2126C13D9FEh,0AFDC541792E76EEAh,003D912BFC6D1898Fh,031B1AAFA1B83F51Bh dq 0F1AC2796E42AB7D9h,040A3A7D7FCD2EBACh,01056136D0AFBBCC5h,07889E1DD9A6D0C85h,0D33525782A7974AAh,0A7E25D09078AC09Bh,0BD4138B3EAC6EDD0h,0920ABFBE71EB9E70h dq 0A2A5D0F54FC2625Ch,0C054E36B0B1290A3h,0F6DD59FF62FE932Bh,03537354511A8AC7Dh,0CA845E9172FADCD4h,084F82B60329D20DCh,079C62CE1CD672F18h,08B09A2ADD124642Ch dq 0D0C1E96A19D9E726h,05A786A9B4BA9500Ch,00E020336634C43F3h,0C17B474AEB66D822h,06A731AE3EC9BAAC2h,08226667AE0840258h,067D4567691CAECA5h,01D94155C4875ADB5h dq 06D00FD985B813FDFh,051286EFCB774CD06h,05E8834471FA744AFh,0F72CA0AEE761AE2Eh,0BE40E4CDAEE8E09Ah,0E9970BBB5118F665h,0726E4BEB33DF1964h,0703B000729199762h dq 04631D816F5EF30A7h,0B880B5B51504A6BEh,0641793C37ED84B6Ch,07B21ED77F6E97D96h,0776306312EF96B73h,0AE528948E86FF3F4h,053DBD7F286A3F8F8h,016CADCE74CFC1063h dq 0005C19BDFA52C6DDh,068868F5D64D46AD3h,03A9D512CCF1E186Ah,0367E62C2385660AEh,0E359E7EA77DCB1D7h,0526C0773749ABE6Eh,0735AE5F9D09F734Bh,0493FC7CC8A558BA8h dq 0B0B9C1533041AB45h,0321958BA470A59BDh,0852DB00B5F46C393h,091209B2BD336B0E5h,06E604F7D659EF19Fh,0B99A8AE2782CCB24h,0CCF52AB6C814C4C7h,04727D9AFBE11727Bh dq 07E950D0C0121B34Dh,0756F435670AD471Fh,0F5ADD442615A6849h,04E87E09980B9957Ah,02ACFA1DF50AEE355h,0D898263AFD2FD556h,0C8F4924DD80C8FD6h,0CF99CA3D754A173Ah dq 0FE477BACAF91BF3Ch,0ED5371F6D690C12Dh,0831A5C285E687094h,0C5D3C90A3708A0A4h,00F7F903717D06580h,019F9BB13B8FDF27Fh,0B1BD6F1B4D502843h,01C761BA38FFF4012h dq 00D1530C4E2E21F3Bh,08943CE69A7372C8Ah,0E5184E11FEB5CE66h,0618BDB80BD736621h,07D29BAD68B574D0Bh,081BB613E25E6FE5Bh,0071C9C10BC07913Fh,0C7BEEB7909AC2D97h dq 0C3E58D353BC5D757h,0EB017892F38F61E8h,0D4EFFB9C9B1CC21Ah,099727D26F494F7ABh,0A3E063A2956B3E03h,09D4A8B9A4AA09C30h,03F6AB7D500090FB4h,09CC0F2A057268AC0h dq 03DEE9D2DEDBF42D1h,0330F49C87960A972h,0C6B2720287421B41h,00AC59EC07C00369Ch,0EF4EAC49CB353425h,0F450244EEF0129D8h,08ACC46E5CAF4DEB6h,02FFEAB63989263F7h dq 08F7CB9FE5D7A4578h,05BD8F7644E634635h,0427A7315BF2DC900h,017D0C4AA2125261Ch,03992486C93518E50h,0B4CBFEE0A2D7D4C3h,07C75D6202C5DDD8Dh,0DBC295D8E35B6C61h dq 060B369D302032B19h,0CE42685FDCE44132h,006F3DDB9DDF65610h,08EA4D21DB5E148F0h,020B0FCE62FCD496Fh,02C1B912358B0EE31h,0B28317B818F5A308h,0A89C1E189CA6D2CFh dq 00C6B18576AAADBC8h,0B65DEAA91299FAE3h,0FB2B794B7F1027E7h,004E4317F443B5BEBh,04B852D325939D0A6h,0D5AE6BEEFB207FFCh,0309682B281C7D374h,0BAE309A194C3B475h dq 08CC3F97B13B49F05h,098A9422FF8293967h,0244B16B01076FF7Ch,0F8BF571C663D67EEh,01F0D6758EEE30DA1h,0C9B611D97ADEB9B7h,0B7AFD5887B6C57A2h,06290AE846B984FE1h dq 094DF4CDEACC1A5FDh,0058A5BD1C5483AFFh,063166CC142BA3C37h,08DB8526EB2F76F40h,0E10880036F0D6D4Eh,09E0523C9971D311Dh,045EC2824CC7CD691h,0575B8359E62382C9h dq 0FA9E400DC4889995h,0D1823ECB45721568h,0DAFD983B8206082Fh,0AA7D29082386A8CBh,0269FCD4403B87588h,01B91F5F728BDD1E0h,0E4669F39040201F6h,07A1D7C218CF04ADEh dq 065623C29D79CE5CEh,02368449096C00BB1h,0AB9BF1879DA503BAh,0BC23ECB1A458058Eh,09A58DF01BB401ECCh,0A070E868A85F143Dh,04FF188307DF2239Eh,014D565B41A641183h dq 0EE13337452701602h,0950E3DCF3F285E09h,059930254B9C80953h,03BF299408930DA6Dh,0A955943F53691387h,0A15EDECAA9CB8784h,029142127352BE9A0h,076F0371FFF4E7AFBh dq 00239F450274F2228h,0BB073AF01D5E868Bh,0BFC80571C10E96C1h,0D267088568222E23h,09671A3D48E80B5B0h,055B5D38AE193BB81h,0693AE2D0A18B04B8h,05C48B4ECADD5335Fh dq 0FD743B194916A1CAh,02577018134BE98C4h,0E77987E83C54A4ADh,028E11014DA33E1B9h,0270CC59E226AA213h,071495F756D1A5F60h,09BE853FB60AFEF77h,0ADC786A7F7443DBFh dq 00904456173B29A82h,058BC7A66C232BD5Eh,0F306558C673AC8B2h,041F639C6B6C9772Ah,0216DEFE99FDA35DAh,011640CC71C7BE615h,093C43694565C5527h,0EA038E6246777839h dq 0F9ABF3CE5A3E2469h,0741E768D0FD312D2h,00144B883CED652C6h,0C20B5A5BA33F8552h,01AE69633C3435A9Dh,097A28CA4088CFDECh,08824A43C1E96F420h,037612FA66EEEA746h dq 06B4CB165F9CF0E5Ah,043AA1C06A0ABFB4Ah,07F4DC26FF162796Bh,06CBACC8E54ED9B0Fh,0A6B7FFEFD2BB253Eh,02E25BC95B0A29D4Fh,086D6A58BDEF1388Ch,0DED74AC576B6F054h dq 08030BDBC2B45805Dh,03C81AF70E94D9289h,03EFF6DDA9E3100DBh,0B38DC39FDFCC8847h,0123885528D17B87Eh,0F2DA0ED240B1B642h,044CEFADCD54BF9A9h,01312200E433C7EE6h dq 09FFCC84F3A78C748h,0F0CD1F72248576BBh,0EC6974053638CFE4h,02BA7B67C0CEC4E4Ch,0AC2F4DF3E5CE32EDh,0CB33D14326EA4C11h,0A4E9044CC77E58BCh,05F513293D934FCEFh dq 05DC9645506E55444h,050DE418F317DE40Ah,0388CB31A69DDE259h,02DB4A83455820A86h,09010A91E84711AE9h,04DF7F0B7B1498371h,0D62A2EABC0977179h,022FAC097AA8D5C0Eh dq 0F49FCC2FF1DAF39Bh,0487FD5C66FF29281h,0E8A30667FCDCA83Fh,02C9B4BE3D2FCCE63h,0DA3FF74B93FBBBC2h,02FA165D2FE70BA66h,0A103E279970E93D4h,0BECDEC77B0E45E71h dq 0CFB41E723985E497h,0B70AAA025EF75017h,0D42309F03840B8E0h,08EFC1AD035898579h,096C6920BE2B2ABC5h,066AF4163375A9172h,02174ABDCCA7127FBh,0B33CCEA64A72FF41h dq 0F04A4933083066A5h,08D970ACDD7289AF5h,08F96E8E031C8C25Eh,0F3FEC02276875D47h,0EC7BF310056190DDh,0F5ADB0AEBB0F1491h,09B50F8850FD58892h,04975488358B74DE8h dq 0A3354FF691531C61h,00702BBE481D2C6EEh,089FB24057DEDED98h,0AC3075138596E902h,01D2D3580172772EDh,0EB738FC28E6BC30Dh,05854EF8F63044326h,09E5C52325ADD3BBEh dq 090AA53CF325C4623h,0C1D24D51349DD067h,02051CFEEA69EA624h,013220F0A862E7E4Fh,0CE39399404E04864h,0D9C42CA47086FCB7h,0685AD2238A03E7CCh,0066484B2AB2FF1DBh dq 0FE9D5D70EFBF79ECh,05B13B9DD9C481854h,015F0D475ED1509ADh,00BEBCD060EC79851h,0D58C6791183AB7F8h,0D1187C5052F3EEE4h,0C95D1192E54E82FFh,086EEA14CB9AC6CA2h dq 03485BEB153677D5Dh,0DD191D781F8C492Ah,0F60866BAA784EBF9h,0518F643BA2D08C74h,08852E956E1087C22h,0A768CB8DC410AE8Dh,038047726BFEC8E1Ah,0A67738B4CD3B45AAh dq 0AD16691CEC0DDE19h,0C6D4319380462E07h,0C5A5876D0BA61938h,016B9FA1FA58FD840h,0188AB1173CA74F18h,0ABDA2F98C99C021Fh,03E0580AB134AE816h,05F3B05B773645ABBh dq 02501A2BE5575F2F6h,01B2F74004E7E8BA9h,01CD7580371E8D953h,07F6ED89562764E30h,0B15926FF596F003Dh,09F65293DA8C5D6B9h,06ECEF04DD690F84Ch,04782275FFF33AF88h dq 0E41433083F820801h,0FD0DFE409A1AF9B5h,04325A3342CDB396Bh,08AE77E62B301B252h,0C36F9E9F6655615Ah,085455A2D92D32C09h,0F2C7DEA949477485h,063CFB4C133A39EBAh dq 083B040CC6EBC5462h,03B9454C8FDB326B0h,056F56A9E87FFD78Ch,02DC2940D99F42BC6h,098F7DF096B096E2Dh,019A6E01E3AD852BFh,042A99CCBDBD4B40Bh,0A59998AF45E9C559h dq 0366295E807D93186h,06B48181BFAA1F773h,01FEC57E2157A0A1Dh,04667446AF6201AD5h,0E615EBCACFB0F075h,0B8F31F4F68290778h,022713ED6CE22D11Eh,03057C1A72EC3C93Bh dq 0CB46ACC37C3F1F2Fh,0DBB893FD02AAF50Eh,0331FD92E600B9FCFh,0A498F96148EA3AD6h,0A8D8426E8B6A83EAh,0A089B274B7735CDCh,087F6B3731E524A11h,0118808E5CBC96749h dq 09906E4C7B19BD394h,0AFED7F7E9B24A20Ch,06509EADEEB3644A7h,06C1EF1D3E8EF0EDEh,0B9C97D43E9798FB4h,0A2F2D784740C28A3h,07B8496476197566Fh,07A5BE3E6B65F069Dh dq 0F96330ED78BE6F10h,0EEE60DE77A076A15h,02B4BEE4AA08B9BD0h,06A56A63EC7B8894Eh,002121359BA34FEF4h,04CBF99F8283703FCh,0398071350CAF30C8h,0D0A77A89F017687Ah dq 0F1C1A9EB9E423569h,08C7976282DEE8199h,05D1737A5DD1F7ABDh,04F53433C09A9FA80h,0FA8B0C53DF7CA1D9h,03FD9DCBC886CCB77h,0C040917CA91B4720h,07DD00142F9D1DCDFh dq 08476FC1D4F387B58h,023F8E7C5F3316503h,0032A2244E7E37339h,05C87A5D750F5A74Bh,0082B4CC43698992Eh,0DF917BECB858F63Ch,03270B8FC5BF86DDAh,010AE72BB29B5DD76h dq 0576AC94E7700362Bh,01AD112DAC61EFB8Fh,0691BC30EC5FAA427h,0FF246311CC327143h,03142368E30E53206h,071380E31E02CA396h,0958D5C960AAD76F1h,0F8D6F430C16DA536h dq 0C8FFD13F1BE7E1D2h,07578AE66004DDBE1h,005833F01067BE646h,0BB34B5AD3BFE586Dh,0095F34C9A12B97F0h,0247AB64525D60CA8h,0DCDBC6F3017477D1h,04A2E14D4DECAD24Dh dq 0BDB5E6D9BE0A1EEBh,02A7E70F7794301ABh,0DEF42D8A270540FDh,001078EC0A34C22C1h,0E5DE511AF4C16387h,07EBB3A52BD9A330Ah,077697857AA7D6435h,0004E831603AE4C32h dq 0E7A21020AD78E312h,09D41A70C6AB420F2h,028E06C18EA1141E6h,0D2B28CBD984F6B28h,026B75F6C446E9D83h,0BA47568C4D418D7Fh,0D80BADBFE6183D8Eh,00E206D7F5F166044h dq 0E258A43911CBCA3Eh,0723A1746B21DC0BCh,0C7CAA854F5D7CDD3h,07CAC32883D261D9Ch,07690C26423BA942Ch,017E55524478042B8h,0E0BE477656A2389Fh,04D289B5E67AB2DA0h dq 044862B9C8FBBFD31h,0B47CC8049D141365h,0822C1B362B91C793h,04EB14655FB13DFD8h,01ECBBA0714E2A97Bh,06143459D5CDE5F14h,053A8FBF1D5F0AC89h,097EA04D81C5E5B00h dq 0622181A8D4FDB3F3h,0E9BCD341572A1208h,01411258643CCE58Ah,09144C5FEA4C6E0A4h,00D33D06565CF620Fh,054A48D489F219CA1h,0C43E5EAC6D63C821h,0A9728B3A72770DAFh dq 0D7934E7B20DF87EFh,0E35503B61A3E86E5h,0CAE321FBC819D504h,0129A50B3AC60BFA6h,0CD5E68EA7E9FB6C3h,0B01C90199483B1C7h,03DE93CD5C295376Ch,0AED52EDF2AB9AD13h dq 02E60F512C0A07884h,0BC3D86A3E36210C9h,035269D9B163951CEh,00C7D6E2AD0CDB5FAh,059E86297D87F5733h,0298EF221898DB0E7h,055000029D1A5AA7Eh,08BC08AE1B5061B45h dq 0C2C31C2B6C92703Ah,094CC596BAF25EF42h,00A1D73DB22540456h,004B6A0F9D9C4179Ah,0EFFDAFA2AE3D3C60h,0F7C8075BB49496C4h,09CC5C7141D1CD4E3h,078BD1638218E5534h dq 0B2F11568F850246Ah,0EDFABCFA9502BC29h,0796CE5F2DA23051Bh,0AAE128B0DC93537Ch,03A493DA0EE4B29AEh,0B5DF6B2C416895D7h,0FCABBD25122D7F37h,070810B58105DC4B1h dq 0E10FDD37F7882A90h,0524DCAB5518A3F5Ch,03C9E85878451255Bh,04029828119BD34E2h,074A05B6F5D3CECCBh,0B610021542E13ECAh,00FF979D12F59E2ACh,06037DA27E4F9CC50h dq 05E92975A0DF1847Dh,0D66DE190D3E623FEh,05032D6B87B568048h,09A36B7CE8235216Eh,080272A7A24F64B4Ah,093EFED8B8C6916F7h,037DDBFF44CCE1555h,04B95DB5D4B99BD25h dq 092D3FDA169812FC0h,0FB1A4A9A90660BB6h,0730C196946A4B9B2h,081E289AA7F49DA68h,064669A0F83B1A05Fh,027B3FF7D9644F48Bh,0CC6B615C8DB675B3h,0674F20B9BCEBBE95h dq 06F31238275655982h,05AE488713E45CF05h,0BF619F9954C21157h,0EABAC46040A8EAE9h,0454C6FE9F2C0C1CDh,0419CF6496412691Ch,0D3DC3BEF265B0F70h,06D0E60F5C3578A9Eh dq 05B0E608526323C55h,01A46C1A9FA1B59F5h,0A9E245A17C4C8FFAh,065CA5159DB2955D7h,005DB0A76CE35AFC2h,081EAC77EA9113D45h,0528EF88AB6AC0A0Dh,0A09EA253597BE3FFh dq 0430DDFB3AC48CD56h,0C4B3A67AF45CE46Fh,04ECECFD8FBE2D05Eh,03EF56F10B39935F0h,00B22D6829CD619C6h,017FD460A74DF2069h,06CF8CC8E8510ED40h,0D6C824BF3A6ECAA7h dq 061243D581A817049h,0048BACB6BBC163A2h,0D9A38AC27D44CC32h,07FDDFF5BAAF410ABh,0AD6D495AA804824Bh,0E1A6A74F2D8C9F94h,0D4F7851235DEE8E3h,0FD4B7F886540D893h dq 0247C20042AA4BFDAh,0096EA1C517D1327Ch,0D56966B4361A6685h,0277DA5C31221057Dh,094D59893A43ACFF7h,064F0C51CCDC02281h,03D33BCC4FF6189DBh,0E005CB184CE66AF1h dq 0FF5CCD1D1DB99BEAh,0B0B854A7FE42980Fh,07BD46A6A718D4B9Fh,0D10FA8CC22A5FD8Ch,0D31484952BE4BD31h,0C7FA975FCB243847h,04886ED1E5846C407h,028CDDB791EB70B04h dq 0C2B00BE2F573417Fh,05C9590452180F877h,07A6BDDFFF370EB00h,0CE509E38D6D9D6A4h,0EBEB0F00647FA702h,01DCC06CF76606F06h,0E4D9F28BA286FF0Ah,0D85A305DC918C262h dq 0475B1D8732225F54h,02D4FB51668CCB5FEh,0A679B9D9D72BBA20h,053841C0D912D43A5h,03B7EAA48BF12A4E8h,0781E0E47F22F1DDFh,0EFF20CE60AB50973h,020D261D19DFFB742h dq 016A12B03062A2E39h,01960EB2239650495h,0251C16FED50EB8B8h,09AC0C330F826016Eh,0ED152665953E7671h,002D63194A6369570h,05074F08394B1C987h,070BA598C90B25CE1h dq 0794A15810B9742F6h,00D5925E9FCAF8C6Ch,03067716CD868744Eh,0910AB077E8D7731Bh,06A61BBDB5AC42F61h,093513EFBF0851567h,0F494724B9E83E9D5h,0E887E1985C09648Dh dq 034B1D3C675370CFDh,0DC35E433BC0D255Dh,0D0AAB84234131BE0h,008042A50B48B7EAFh,09997C4EE44A3AB35h,0829A7B49201799D0h,0263B8307B7C54441h,0752F95F4FD6A6CA6h dq 0927217402C08C6E5h,02A8AB754A795D9EEh,0A442F7552F72943Dh,02C31334E19781208h,04FA98D7CEAEE6291h,055C3862F665DB309h,0BD0610175D53B1F3h,046FE6CB840413F27h dq 03FE03792DF0CFA59h,0CFE700372EB85E8Fh,0A7BE29E7ADBCE118h,0E544EE5CDE8431DDh,08A781B1B41F1873Eh,0A5C94C78A0D2F0E7h,039412E2877B60728h,0A1265EF3AFC9A62Ch dq 0BCC2770C6A2506C5h,03AB66DD5DCE1CE12h,0E65499D04A675B37h,07D8F523481BFD216h,00F6F64FCEC15F389h,074EFBE618B5B13C8h,0ACDC82B714273E1Dh,0DD40BFE003199D17h dq 037E99257E7E061F8h,0FA52626904775AAAh,08BBBF63A463D56F9h,0F0013F1543A26E64h,0A8307E9F879EC898h,0CC4C27A4150177CCh,01B432F2CCA1D3348h,0DE1D1F8F9F6FA013h dq 0606602A047A7DDD6h,0D237AB64CC1CB2C7h,09B938E7225FCD1D3h,0EC4E03708E0FF476h,0FEB2FBDA3D03C12Dh,0AE0BCED2EE43889Ah,022CB8923EBFB4F43h,069360D013CF7396Dh dq 0855E3602D2D4E022h,0073805BAD01F784Ch,033E17A133852F546h,0DF4874058AC7B638h,0BA92B29C678AA14Ah,00CE89FC76CFAADCDh,05F9D4E0908339E34h,0F1AFE9291F5923B9h dq 06E3480F60F4A265Fh,0EEBF3A2AB29B841Ch,0E21938A88F91B4ADh,057DFEFF845C6D3C3h,02F006B0BF62CAAF2h,062F479EF6F75EE78h,011A55AD41C8916A9h,0F229D29084FED453h dq 042F1C27B16B000E6h,02B1F76749823C074h,04B76ECA3C2745360h,08C98F463B91691BDh,014BCC93CF1ADE66Ah,08885213E6D458397h,08E177DF0274D4711h,0B49B73B5503F2951h dq 010168168C3F96B6Bh,00E3D963B63CAB0AEh,08DFC4B5655A1DB14h,0F789F1356E14DE5Ch,0683E68AF4E51DAC1h,0C9A84F9D8D4B0FD9h,03691E03F52A0F9D1h,05ED86E46E1878E80h dq 03C711A0E99D07150h,05A0865B20C4E9310h,056FBFC1FE4F0682Eh,0EA8D5DE3105EDF9Bh,071ABFDB12379187Ah,02EB99DE1BEE77B9Ch,021ECC0EA33CF4523h,059A4D7521805C7A1h dq 03896F5EB56AE7C72h,0AA638F3DB18F75DCh,09F39358DABE9808Eh,0B7DEFA91C00B72ACh,06B5541FD62492D92h,06DC6DEE8F92E4D5Bh,0353F57ABC4BEEA7Eh,0735769D6DA5690CEh dq 00A234AA642391484h,0F6F9508028F80D9Dh,0B8E319A27AB3F215h,031AD9C1151341A4Dh,0773C22A57BEF5805h,045C7561A07968633h,0F913DA9E249DBE36h,0DA652D9B78A64C68h dq 04C27A97F3BC334EFh,076621220E66B17F4h,0967743899ACD7D0Bh,0F3EE5BCAE0ED6782h,0409F753600C879FCh,006D09A39B5926DB6h,06F83AEB0317AC588h,001E6CA4A86381F21h dq 066FF3462D19F3025h,072207C24DDFD3BFBh,04AF6B6D3E2ECE2EBh,09C994DBEC7EA08DEh,049ACE597B09A8BC4h,0B38C4766CF0797BAh,0131B9373C57C2A75h,0B1822CCE61931E58h dq 09D7555B909BA1C0Ch,0127FAFDD937D11D2h,029DA3BADC66D92E4h,0A2C1D57154C2ECBCh,058C5134D82F6FE24h,01C3AE3515B62274Fh,0E907C82E01CB8126h,0F8ED091913E37FCBh dq 03249D8F9C80046C9h,080CF9BEDE388FB63h,01881539A116CF19Eh,05103F3F76BD52457h,015B7E6F5AE47F7A8h,0DBD7C6DED47E9CCFh,044E55C410228BB1Ah,0B647D4255EDB4E99h dq 05D11882BB8AAFC30h,0F5098BBB29D3212Ah,08FB5EA14E90296B3h,0677B942157DD025Ah,0FB58E7C0A390ACB5h,089D3674C83BD4A01h,09E2DA4DF4BF3B93Bh,0FCC41E328CAB4829h dq 003F38C96BA582C52h,0CAD1BDBD7FD85DB2h,0BBB442C16082AE83h,0B95FE86BA5DA9AB0h,0B22E04673771A93Fh,0845358C9493152D8h,0BE2A488697B4541Eh,095A2DC2DD38E6966h dq 0C02C11AC923C852Bh,02388B1990DF2A87Bh,07C8008FA1B4F37BEh,01F70D0C84D54E503h,05490ADEC7ECE57D4h,0002B3C27D9063A3Ah,07EAEA3848030A2BFh,0C602326DED2003C0h dq 083A7287D69A94086h,0C57A5FCB30F57A8Ah,0B56844E479EBE779h,0A373B40F05DCBCE9h,0D71A786E88570EE2h,0879CBACDBDE8F6A0h,0976AD1BCC164A32Fh,0AB21E25E9666D78Bh dq 0901063AAE5E5C33Ch,09818B34448698D90h,0E36487AE3E1E8ABBh,0AFBDF931893BDCB4h,06345A0DC5FBBD519h,08628FE269B9465CAh,01E5D01603F9C51ECh,04DE44006A15049B7h dq 0BF6C70E5F776CBB1h,0411218F2EF552BEDh,0CB0C0708705A36A3h,0E74D14754F986044h,0CD56D9430EA8280Eh,0C12591D7535F5065h,0C83223F1720AEF96h,0C3A0396F7363A51Fh tigerInit dq 00123456789ABCDEFh,0FEDCBA9876543210h,0F096A5B4C3B2E187h mov64 macro m,n push dword ptr n pop dword ptr m push dword ptr n[4] pop dword ptr m[4] endm xchg64 macro m,n xchg eax,dword ptr m xchg eax,dword ptr n xchg eax,dword ptr m xchg eax,dword ptr m[4] xchg eax,dword ptr n[4] xchg eax,dword ptr m[4] endm xor64 macro m,n mov eax,dword ptr n xor dword ptr m,eax mov eax,dword ptr n[4] xor dword ptr m[4],eax endm add64 macro m,n mov eax,dword ptr n add dword ptr m,eax mov eax,dword ptr n[4] adc dword ptr m[4],eax endm sub64 macro m,n mov eax,dword ptr n sub dword ptr m,eax mov eax,dword ptr n[4] sbb dword ptr m[4],eax endm assume ebx:ptr TTHcontext TTHtbl macro ar,br,cr,xr xor64 cr,xr movzx edx,byte ptr cr[2] mov64 [ebx].tmp_,TTHtable[256*8+edx*8] movzx edx,byte ptr cr xor64 [ebx].tmp_,TTHtable[edx*8] movzx edx,byte ptr cr[4] xor64 [ebx].tmp_,TTHtable[edx*8+256*8*2] movzx edx,byte ptr cr[6] xor64 [ebx].tmp_,TTHtable[edx*8+256*8*3] sub64 ar,[ebx].tmp_ movzx edx,byte ptr cr[1] mov64 [ebx].tmp_,TTHtable[edx*8+256*8*3] movzx edx,byte ptr cr[3] xor64 [ebx].tmp_,TTHtable[edx*8+256*8*2] movzx edx,byte ptr cr[5] xor64 [ebx].tmp_,TTHtable[edx*8+256*8] movzx edx,byte ptr cr[7] xor64 [ebx].tmp_,TTHtable[edx*8] add64 br,[ebx].tmp_ xor edx,edx mov eax,dword ptr br[4] mul ecx mov dword ptr br[4],eax xor edx,edx mov eax,dword ptr br mul ecx mov dword ptr br,eax add dword ptr br[4],edx endm TTHstart PROC invoke GlobalAlloc,GPTR,sizeof TTHcontext assume eax:ptr TTHcontext mov dword ptr [eax].count,0 mov [eax].leaf[0],0 mov [eax].node[0],1 mov [eax].index,0 lea edx,[eax].nodes mov [eax].ptop,edx assume eax:nothing ret TTHstart ENDP TTHend PROC uses esi edi ebx TTH_context:DWORD,lpBuf:DWORD mov ebx,TTH_context lea eax,[ebx].nodes .if ([ebx].index>0)||(eax==[ebx].ptop) call TTHblock .endif .while 1 mov eax,[ebx].ptop sub eax,TIGERSIZE lea edx,[ebx].nodes .break .if eax<=edx call TTHblock1 .endw lea esi,[ebx].nodes lea edi,hash mov ecx,TIGERSIZE/4 rep movsd invoke GlobalFree,TTH_context ret TTHend ENDP TTHNextBlock PROC uses esi edi ebx TTH_context:DWORD,lpbuf:DWORD,buffersize:DWORD mov ebx,TTH_context .if [ebx].index mov eax,BLOCKSIZE sub eax,[ebx].index lea edi,[ebx].leaf[1] add edi,[ebx].index mov esi,lpbuf mov ecx,buffersize rep movsb .if buffersize<eax mov eax,buffersize add [ebx].index,eax ret .else push eax mov [ebx].index,BLOCKSIZE call TTHblock pop eax add lpbuf,eax sub buffersize,eax .endif .endif .while buffersize>=BLOCKSIZE lea edi,[ebx].leaf[1] mov esi,lpbuf mov ecx,BLOCKSIZE/4 rep movsd mov [ebx].index,BLOCKSIZE call TTHblock add lpbuf,BLOCKSIZE sub buffersize,BLOCKSIZE .endw mov eax,buffersize mov [ebx].index,eax .if eax lea edi,[ebx].leaf[1] mov esi,lpbuf mov ecx,BLOCKSIZE/4 rep movsd .endif ret TTHNextBlock ENDP TTHblock: mov eax,[ebx].index inc eax invoke tiger,addr [ebx].leaf,eax add [ebx].ptop,TIGERSIZE inc [ebx].count mov eax,[ebx].count .while (!(eax&1)) push eax call TTHblock1 pop eax shr eax,1 .endw ret TTHblock1: lea edi,[ebx].node[1] mov esi,[ebx].ptop mov ecx,TIGERSIZE/2 sub esi,TIGERSIZE*2 push esi rep movsd invoke tiger,addr [ebx].node,TIGERSIZE*2+1 pop edi mov esi,[ebx].ptop mov ecx,TIGERSIZE/4 rep movsd sub [ebx].ptop,TIGERSIZE ret tiger PROC uses esi edi lpbuf:DWORD,bufsize:DWORD mov edi,[ebx].ptop lea esi,tigerInit mov ecx,2*3 rep movsd mov ecx,bufsize .while ecx>=64 push ecx invoke tiger_compress,lpbuf add lpbuf,8*8 pop ecx sub ecx,64 .endw mov edx,ecx mov esi,lpbuf lea edi,[ebx].temp rep movsb mov al,1 stosb inc edx mov al,0 .while dl&7 stosb inc edx .endw .if dl>56 .if dl<64 mov ecx,64 sub ecx,edx rep stosb .endif invoke tiger_compress,addr [ebx].temp xor edx,edx .endif .while dl<56 mov [ebx].temp[edx],0 inc edx .endw mov eax,bufsize xor edx,edx shld edx,eax,3 shl eax,3 mov dword ptr [ebx].temp[56],eax mov dword ptr [ebx].temp[60],edx invoke tiger_compress,addr [ebx].temp ret tiger ENDP tiger_compress PROC uses esi edi lpbuf:DWORD local tmp_a[3]:QWORD mov esi,[ebx].ptop lea edi,[ebx]._a mov ecx,3*2 rep movsd mov esi,lpbuf lea edi,[ebx].x0 mov ecx,16 rep movsd lea esi,[ebx]._a lea edi,tmp_a mov ecx,3*2 rep movsd xor ecx,ecx .while ecx<3 .if ecx mov eax,dword ptr [ebx].x7 mov edx,dword ptr [ebx].x7[4] xor eax,0A5A5A5A5h xor edx,0A5A5A5A5h sub dword ptr [ebx].x0,eax sbb dword ptr [ebx].x0[4],edx xor64 [ebx].x1,[ebx].x0 add64 [ebx].x2,[ebx].x1 mov eax,dword ptr [ebx].x1 mov edx,dword ptr [ebx].x1[4] not eax not edx shld edx,eax,19 shl eax,19 xor eax,dword ptr [ebx].x2 xor edx,dword ptr [ebx].x2[4] sub dword ptr [ebx].x3,eax sbb dword ptr [ebx].x3[4],edx xor64 [ebx].x4,[ebx].x3 add64 [ebx].x5,[ebx].x4 mov eax,dword ptr [ebx].x4 mov edx,dword ptr [ebx].x4[4] not eax not edx shrd eax,edx,23 shr edx,23 xor eax,dword ptr [ebx].x5 xor edx,dword ptr [ebx].x5[4] sub dword ptr [ebx].x6,eax sbb dword ptr [ebx].x6[4],edx xor64 [ebx].x7,[ebx].x6 add64 [ebx].x0,[ebx].x7 mov eax,dword ptr [ebx].x7 mov edx,dword ptr [ebx].x7[4] not eax not edx shld edx,eax,19 shl eax,19 xor eax,dword ptr [ebx].x0 xor edx,dword ptr [ebx].x0[4] sub dword ptr [ebx].x1,eax sbb dword ptr [ebx].x1[4],edx xor64 [ebx].x2,[ebx].x1 add64 [ebx].x3,[ebx].x2 mov eax,dword ptr [ebx].x2 mov edx,dword ptr [ebx].x2[4] not eax not edx shrd eax,edx,23 shr edx,23 xor eax,dword ptr [ebx].x3 xor edx,dword ptr [ebx].x3[4] sub dword ptr [ebx].x4,eax sbb dword ptr [ebx].x4[4],edx xor64 [ebx].x5,[ebx].x4 add64 [ebx].x6,[ebx].x5 mov eax,dword ptr [ebx].x6 mov edx,dword ptr [ebx].x6[4] xor edx,01234567h xor eax,89ABCDEFh sub dword ptr [ebx].x7,eax sbb dword ptr [ebx].x7[4],edx .endif push ecx lea ecx,[ecx*2+5] TTHtbl [ebx]._a,[ebx]._b,[ebx]._c,[ebx].x0 TTHtbl [ebx]._b,[ebx]._c,[ebx]._a,[ebx].x1 TTHtbl [ebx]._c,[ebx]._a,[ebx]._b,[ebx].x2 TTHtbl [ebx]._a,[ebx]._b,[ebx]._c,[ebx].x3 TTHtbl [ebx]._b,[ebx]._c,[ebx]._a,[ebx].x4 TTHtbl [ebx]._c,[ebx]._a,[ebx]._b,[ebx].x5 TTHtbl [ebx]._a,[ebx]._b,[ebx]._c,[ebx].x6 TTHtbl [ebx]._b,[ebx]._c,[ebx]._a,[ebx].x7 xchg64 [ebx]._a,[ebx]._c xchg64 [ebx]._c,[ebx]._b pop ecx inc ecx .endw xor64 [ebx]._a,tmp_a sub64 [ebx]._b,tmp_a[8] add64 [ebx]._c,tmp_a[16] mov edi,[ebx].ptop lea esi,[ebx]._a mov ecx,2*3 rep movsd ret tiger_compress ENDP | A small program that calculates the TTH of a file (TTH.asm) would be:
Code: | .386 .model flat,stdcall option casemap:none include \masm32\include\windows.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc include \masm32\include\comdlg32.inc includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib includelib \masm32\lib\comdlg32.lib .data? ofn OPENFILENAME <> fname db 8192 dup(?) hFile dd ? bRead dd ? hash db 25 dup(?) .code _TTH db 'TTH',0 include TTH.h start: lea edi,ofn mov ecx,sizeof ofn+1 xor eax,eax rep stosb invoke GetModuleHandle,0 mov ofn.hInstance,eax mov ofn.lStructSize,sizeof OPENFILENAME mov ofn.lpstrFile,offset fname mov ofn.nMaxFile,8192 invoke GetOpenFileName,addr ofn .if eax invoke CreateFile,addr fname,GENERIC_READ,FILE_SHARE_READ,0,OPEN_EXISTING,0,0 .if eax!=INVALID_HANDLE_VALUE mov hFile,eax call TTHstart mov esi,eax .while 1 invoke ReadFile,hFile,addr fname,8192,addr bRead,0 .break .if bRead==0 invoke TTHNextBlock,esi,addr fname,bRead .endw invoke TTHend,esi,addr hash invoke CloseHandle,hFile lea edi,fname lea esi,hash mov eax,':XEH' stosd mov al,32 stosb xor ecx,ecx .while ecx<24 lodsb mov ah,al shr al,4 and ax,0f0fh or ax,3030h .if al>'9' add al,7 .endif .if ah>'9' add ah,7 .endif stosw inc ecx .endw mov ax,0a0dh stosw mov eax,'esaB' stosd mov eax,' :23' stosd xor ebx,ebx xor ecx,ecx mov hash[24],0 .while ebx<24 .if cl>3 mov ax,word ptr hash[ebx] add cl,5 and cl,7 shl al,cl push ecx mov ch,8 sub ch,cl mov cl,ch shr ah,cl or al,ah pop ecx inc ebx .else mov ch,3 sub ch,cl push ecx mov cl,ch mov al,hash[ebx] shr al,cl pop ecx add cl,5 and cl,7 .if cl==0 inc ebx .endif .endif and al,1fh .if al>25 sub al,24+17 .endif add al,'A' stosb .endw mov al,0 stosb invoke MessageBox,0,addr fname,addr _TTH,0 .endif .endif invoke ExitProcess,0 ret end start | Source code for this program and also a compiled executable can be found here: http://downloads.sourceforge.net/hexhub/TTH.ZIP
|