AuthorMessage
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
Meka][Meka
Unstopable
Posts: 700

very nice.