; block 16 bytes ; keylen 16,24,32 bytes TwofishInit PROTO :DWORD,:DWORD TwofishEncrypt PROTO :DWORD,:DWORD TwofishDecrypt PROTO :DWORD,:DWORD .data align 16 q_tab label byte;[2][256] db 0A9h,067h,0B3h,0E8h,004h,0FDh,0A3h,076h,09Ah,092h,080h,078h,0E4h,0DDh,0D1h,038h db 00Dh,0C6h,035h,098h,018h,0F7h,0ECh,06Ch,043h,075h,037h,026h,0FAh,013h,094h,048h db 0F2h,0D0h,08Bh,030h,084h,054h,0DFh,023h,019h,05Bh,03Dh,059h,0F3h,0AEh,0A2h,082h db 063h,001h,083h,02Eh,0D9h,051h,09Bh,07Ch,0A6h,0EBh,0A5h,0BEh,016h,00Ch,0E3h,061h db 0C0h,08Ch,03Ah,0F5h,073h,02Ch,025h,00Bh,0BBh,04Eh,089h,06Bh,053h,06Ah,0B4h,0F1h db 0E1h,0E6h,0BDh,045h,0E2h,0F4h,0B6h,066h,0CCh,095h,003h,056h,0D4h,01Ch,01Eh,0D7h db 0FBh,0C3h,08Eh,0B5h,0E9h,0CFh,0BFh,0BAh,0EAh,077h,039h,0AFh,033h,0C9h,062h,071h db 081h,079h,009h,0ADh,024h,0CDh,0F9h,0D8h,0E5h,0C5h,0B9h,04Dh,044h,008h,086h,0E7h db 0A1h,01Dh,0AAh,0EDh,006h,070h,0B2h,0D2h,041h,07Bh,0A0h,011h,031h,0C2h,027h,090h db 020h,0F6h,060h,0FFh,096h,05Ch,0B1h,0ABh,09Eh,09Ch,052h,01Bh,05Fh,093h,00Ah,0EFh db 091h,085h,049h,0EEh,02Dh,04Fh,08Fh,03Bh,047h,087h,06Dh,046h,0D6h,03Eh,069h,064h db 02Ah,0CEh,0CBh,02Fh,0FCh,097h,005h,07Ah,0ACh,07Fh,0D5h,01Ah,04Bh,00Eh,0A7h,05Ah db 028h,014h,03Fh,029h,088h,03Ch,04Ch,002h,0B8h,0DAh,0B0h,017h,055h,01Fh,08Ah,07Dh db 057h,0C7h,08Dh,074h,0B7h,0C4h,09Fh,072h,07Eh,015h,022h,012h,058h,007h,099h,034h db 06Eh,050h,0DEh,068h,065h,0BCh,0DBh,0F8h,0C8h,0A8h,02Bh,040h,0DCh,0FEh,032h,0A4h db 0CAh,010h,021h,0F0h,0D3h,05Dh,00Fh,000h,06Fh,09Dh,036h,042h,04Ah,05Eh,0C1h,0E0h db 075h,0F3h,0C6h,0F4h,0DBh,07Bh,0FBh,0C8h,04Ah,0D3h,0E6h,06Bh,045h,07Dh,0E8h,04Bh db 0D6h,032h,0D8h,0FDh,037h,071h,0F1h,0E1h,030h,00Fh,0F8h,01Bh,087h,0FAh,006h,03Fh db 05Eh,0BAh,0AEh,05Bh,08Ah,000h,0BCh,09Dh,06Dh,0C1h,0B1h,00Eh,080h,05Dh,0D2h,0D5h db 0A0h,084h,007h,014h,0B5h,090h,02Ch,0A3h,0B2h,073h,04Ch,054h,092h,074h,036h,051h db 038h,0B0h,0BDh,05Ah,0FCh,060h,062h,096h,06Ch,042h,0F7h,010h,07Ch,028h,027h,08Ch db 013h,095h,09Ch,0C7h,024h,046h,03Bh,070h,0CAh,0E3h,085h,0CBh,011h,0D0h,093h,0B8h db 0A6h,083h,020h,0FFh,09Fh,077h,0C3h,0CCh,003h,06Fh,008h,0BFh,040h,0E7h,02Bh,0E2h db 079h,00Ch,0AAh,082h,041h,03Ah,0EAh,0B9h,0E4h,09Ah,0A4h,097h,07Eh,0DAh,07Ah,017h db 066h,094h,0A1h,01Dh,03Dh,0F0h,0DEh,0B3h,00Bh,072h,0A7h,01Ch,0EFh,0D1h,053h,03Eh db 08Fh,033h,026h,05Fh,0ECh,076h,02Ah,049h,081h,088h,0EEh,021h,0C4h,01Ah,0EBh,0D9h db 0C5h,039h,099h,0CDh,0ADh,031h,08Bh,001h,018h,023h,0DDh,01Fh,04Eh,02Dh,0F9h,048h db 04Fh,0F2h,065h,08Eh,078h,05Ch,058h,019h,08Dh,0E5h,098h,057h,067h,07Fh,005h,064h db 0AFh,063h,0B6h,0FEh,0F5h,0B7h,03Ch,0A5h,0CEh,0E9h,068h,044h,0E0h,04Dh,043h,069h db 029h,02Eh,0ACh,015h,059h,0A8h,00Ah,09Eh,06Eh,047h,0DFh,034h,035h,06Ah,0CFh,0DCh db 022h,0C9h,0C0h,09Bh,089h,0D4h,0EDh,0ABh,012h,0A2h,00Dh,052h,0BBh,002h,02Fh,0A9h db 0D7h,061h,01Eh,0B4h,050h,004h,0F6h,0C2h,016h,025h,086h,056h,055h,009h,0BEh,091h align 16 m_tab label dword;[4][256] dd 00BCBC3275h,0ECEC21F3h,0202043C6h,0B3B3C9F4h,0DADA03DBh,002028B7Bh,0E2E22BFBh,09E9EFAC8h dd 00C9C9EC4Ah,0D4D409D3h,018186BE6h,01E1E9F6Bh,098980E45h,0B2B2387Dh,0A6A6D2E8h,02626B74Bh dd 003C3C57D6h,093938A32h,08282EED8h,0525298FDh,07B7BD437h,0BBBB3771h,05B5B97F1h,0474783E1h dd 0024243C30h,05151E20Fh,0BABAC6F8h,04A4AF31Bh,0BFBF4887h,00D0D70FAh,0B0B0B306h,07575DE3Fh dd 00D2D2FD5Eh,07D7D20BAh,0666631AEh,03A3AA35Bh,059591C8Ah,000000000h,0CDCD93BCh,01A1AE09Dh dd 00AEAE2C6Dh,07F7FABC1h,02B2BC7B1h,0BEBEB90Eh,0E0E0A080h,08A8A105Dh,03B3B52D2h,06464BAD5h dd 00D8D888A0h,0E7E7A584h,05F5FE807h,01B1B1114h,02C2CC2B5h,0FCFCB490h,03131272Ch,0808065A3h dd 0073732AB2h,00C0C8173h,079795F4Ch,06B6B4154h,04B4B0292h,053536974h,094948F36h,083831F51h dd 002A2A3638h,0C4C49CB0h,02222C8BDh,0D5D5F85Ah,0BDBDC3FCh,048487860h,0FFFFCE62h,04C4C0796h dd 004141776Ch,0C7C7E642h,0EBEB24F7h,01C1C1410h,05D5D637Ch,036362228h,06767C027h,0E9E9AF8Ch dd 004444F913h,01414EA95h,0F5F5BB9Ch,0CFCF18C7h,03F3F2D24h,0C0C0E346h,07272DB3Bh,054546C70h dd 0029294CCAh,0F0F035E3h,00808FE85h,0C6C617CBh,0F3F34F11h,08C8CE4D0h,0A4A45993h,0CACA96B8h dd 0068683BA6h,0B8B84D83h,038382820h,0E5E52EFFh,0ADAD569Fh,00B0B8477h,0C8C81DC3h,09999FFCCh dd 005858ED03h,019199A6Fh,00E0E0A08h,095957EBFh,070705040h,0F7F730E7h,06E6ECF2Bh,01F1F6EE2h dd 00B5B53D79h,009090F0Ch,0616134AAh,057571682h,09F9F0B41h,09D9D803Ah,0111164EAh,02525CDB9h dd 00AFAFDDE4h,04545089Ah,0DFDF8DA4h,0A3A35C97h,0EAEAD57Eh,0353558DAh,0EDEDD07Ah,04343FC17h dd 00F8F8CB66h,0FBFBB194h,03737D3A1h,0FAFA401Dh,0C2C2683Dh,0B4B4CCF0h,032325DDEh,09C9C71B3h dd 005656E70Bh,0E3E3DA72h,0878760A7h,015151B1Ch,0F9F93AEFh,06363BFD1h,03434A953h,09A9A853Eh dd 00B1B1428Fh,07C7CD133h,088889B26h,03D3DA65Fh,0A1A1D7ECh,0E4E4DF76h,08181942Ah,091910149h dd 000F0FFB81h,0EEEEAA88h,0161661EEh,0D7D77321h,09797F5C4h,0A5A5A81Ah,0FEFE3FEBh,06D6DB5D9h dd 007878AEC5h,0C5C56D39h,01D1DE599h,07676A4CDh,03E3EDCADh,0CBCB6731h,0B6B6478Bh,0EFEF5B01h dd 0012121E18h,06060C523h,06A6AB0DDh,04D4DF61Fh,0CECEE94Eh,0DEDE7C2Dh,055559DF9h,07E7E5A48h dd 002121B24Fh,003037AF2h,0A0A02665h,05E5E198Eh,05A5A6678h,065654B5Ch,062624E58h,0FDFD4519h dd 000606F48Dh,0404086E5h,0F2F2BE98h,03333AC57h,017179067h,005058E7Fh,0E8E85E05h,04F4F7D64h dd 0089896AAFh,010109563h,074742FB6h,00A0A75FEh,05C5C92F5h,09B9B74B7h,02D2D333Ch,03030D6A5h dd 002E2E49CEh,0494989E9h,046467268h,077775544h,0A8A8D8E0h,09696044Dh,02828BD43h,0A9A92969h dd 00D9D97929h,08686912Eh,0D1D187ACh,0F4F44A15h,08D8D1559h,0D6D682A8h,0B9B9BC0Ah,042420D9Eh dd 00F6F6C16Eh,02F2FB847h,0DDDD06DFh,023233934h,0CCCC6235h,0F1F1C46Ah,0C1C112CFh,08585EBDCh dd 008F8F9E22h,07171A1C9h,09090F0C0h,0AAAA539Bh,00101F189h,08B8BE1D4h,04E4E8CEDh,08E8E6FABh dd 00ABABA212h,06F6F3EA2h,0E6E6540Dh,0DBDBF252h,092927BBBh,0B7B7B602h,06969CA2Fh,03939D9A9h dd 00D3D30CD7h,0A7A72361h,0A2A2AD1Eh,0C3C399B4h,06C6C4450h,007070504h,004047FF6h,0272746C2h dd 00ACACA716h,0D0D07625h,050501386h,0DCDCF756h,084841A55h,0E1E15109h,07A7A25BEh,01313EF91h dd 00A9D93939h,067901717h,0B3719C9Ch,0E8D2A6A6h,004050707h,0FD985252h,0A3658080h,076DFE4E4h dd 009A084545h,092024B4Bh,080A0E0E0h,078665A5Ah,0E4DDAFAFh,0DDB06A6Ah,0D1BF6363h,038362A2Ah dd 000D54E6E6h,0C6432020h,03562CCCCh,098BEF2F2h,0181E1212h,0F724EBEBh,0ECD7A1A1h,06C774141h dd 0043BD2828h,07532BCBCh,037D47B7Bh,0269B8888h,0FA700D0Dh,013F94444h,094B1FBFBh,0485A7E7Eh dd 00F27A0303h,0D0E48C8Ch,08B47B6B6h,0303C2424h,084A5E7E7h,054416B6Bh,0DF06DDDDh,023C56060h dd 001945FDFDh,05BA33A3Ah,03D68C2C2h,059158D8Dh,0F321ECECh,0AE316666h,0A23E6F6Fh,082165757h dd 0063951010h,0015BEFEFh,0834DB8B8h,02E918686h,0D9B56D6Dh,0511F8383h,09B53AAAAh,07C635D5Dh dd 00A63B6868h,0EB3FFEFEh,0A5D63030h,0BE257A7Ah,016A7ACACh,00C0F0909h,0E335F0F0h,06123A7A7h dd 00C0F09090h,08CAFE9E9h,03A809D9Dh,0F5925C5Ch,073810C0Ch,02C273131h,02576D0D0h,00BE75656h dd 00BB7B9292h,04EE9CECEh,089F10101h,06B9F1E1Eh,053A93434h,06AC4F1F1h,0B499C3C3h,0F1975B5Bh dd 00E1834747h,0E66B1818h,0BDC82222h,0450E9898h,0E26E1F1Fh,0F4C9B3B3h,0B62F7474h,066CBF8F8h dd 00CCFF9999h,095EA1414h,003ED5858h,056F7DCDCh,0D4E18B8Bh,01C1B1515h,01EADA2A2h,0D70CD3D3h dd 00FB2BE2E2h,0C31DC8C8h,08E195E5Eh,0B5C22C2Ch,0E9894949h,0CF12C1C1h,0BF7E9595h,0BA207D7Dh dd 00EA641111h,077840B0Bh,0396DC5C5h,0AF6A8989h,033D17C7Ch,0C9A17171h,062CEFFFFh,07137BBBBh dd 0081FB0F0Fh,0793DB5B5h,00951E1E1h,0ADDC3E3Eh,0242D3F3Fh,0CDA47676h,0F99D5555h,0D8EE8282h dd 00E5864040h,0C5AE7878h,0B9CD2525h,04D049696h,044557777h,0080A0E0Eh,086135050h,0E730F7F7h dd 00A1D33737h,01D40FAFAh,0AA346161h,0ED8C4E4Eh,006B3B0B0h,0706C5454h,0B22A7373h,0D2523B3Bh dd 00410B9F9Fh,07B8B0202h,0A088D8D8h,0114FF3F3h,03167CBCBh,0C2462727h,027C06767h,090B4FCFCh dd 0020283838h,0F67F0404h,060784848h,0FF2EE5E5h,096074C4Ch,05C4B6565h,0B1C72B2Bh,0AB6F8E8Eh dd 009E0D4242h,09CBBF5F5h,052F2DBDBh,01BF34A4Ah,05FA63D3Dh,09359A4A4h,00ABCB9B9h,0EF3AF9F9h dd 0091EF1313h,085FE0808h,049019191h,0EE611616h,02D7CDEDEh,04FB22121h,08F42B1B1h,03BDB7272h dd 0047B82F2Fh,08748BFBFh,06D2CAEAEh,046E3C0C0h,0D6573C3Ch,03E859A9Ah,06929A9A9h,0647D4F4Fh dd 002A948181h,0CE492E2Eh,0CB17C6C6h,02FCA6969h,0FCC3BDBDh,0975CA3A3h,0055EE8E8h,07AD0EDEDh dd 00AC87D1D1h,07F8E0505h,0D5BA6464h,01AA8A5A5h,04BB72626h,00EB9BEBEh,0A7608787h,05AF8D5D5h dd 0028223636h,014111B1Bh,03FDE7575h,02979D9D9h,088AAEEEEh,03C332D2Dh,04C5F7979h,002B6B7B7h dd 00B896CACAh,0DA583535h,0B09CC4C4h,017FC4343h,0551A8484h,01FF64D4Dh,08A1C5959h,07D38B2B2h dd 0057AC3333h,0C718CFCFh,08DF40606h,074695353h,0B7749B9Bh,0C4F59797h,09F56ADADh,072DAE3E3h dd 007ED5EAEAh,0154AF4F4h,0229E8F8Fh,012A2ABABh,0584E6262h,007E85F5Fh,099E51D1Dh,034392323h dd 006EC1F6F6h,050446C6Ch,0DE5D3232h,068724646h,06526A0A0h,0BC93CDCDh,0DB03DADAh,0F8C6BABAh dd 00C8FA9E9Eh,0A882D6D6h,02BCF6E6Eh,040507070h,0DCEB8585h,0FE750A0Ah,0328A9393h,0A48DDFDFh dd 00CA4C2929h,010141C1Ch,02173D7D7h,0F0CCB4B4h,0D309D4D4h,05D108A8Ah,00FE25151h,000000000h dd 006F9A1919h,09DE01A1Ah,0368F9494h,042E6C7C7h,04AECC9C9h,05EFDD2D2h,0C1AB7F7Fh,0E0D8A8A8h dd 00BC75BC32h,0ECF3EC21h,020C62043h,0B3F4B3C9h,0DADBDA03h,0027B028Bh,0E2FBE22Bh,09EC89EFAh dd 00C94AC9ECh,0D4D3D409h,018E6186Bh,01E6B1E9Fh,09845980Eh,0B27DB238h,0A6E8A6D2h,0264B26B7h dd 003CD63C57h,09332938Ah,082D882EEh,052FD5298h,07B377BD4h,0BB71BB37h,05BF15B97h,047E14783h dd 002430243Ch,0510F51E2h,0BAF8BAC6h,04A1B4AF3h,0BF87BF48h,00DFA0D70h,0B006B0B3h,0753F75DEh dd 00D25ED2FDh,07DBA7D20h,066AE6631h,03A5B3AA3h,0598A591Ch,000000000h,0CDBCCD93h,01A9D1AE0h dd 00AE6DAE2Ch,07FC17FABh,02BB12BC7h,0BE0EBEB9h,0E080E0A0h,08A5D8A10h,03BD23B52h,064D564BAh dd 00D8A0D888h,0E784E7A5h,05F075FE8h,01B141B11h,02CB52CC2h,0FC90FCB4h,0312C3127h,080A38065h dd 0073B2732Ah,00C730C81h,0794C795Fh,06B546B41h,04B924B02h,053745369h,09436948Fh,08351831Fh dd 002A382A36h,0C4B0C49Ch,022BD22C8h,0D55AD5F8h,0BDFCBDC3h,048604878h,0FF62FFCEh,04C964C07h dd 00416C4177h,0C742C7E6h,0EBF7EB24h,01C101C14h,05D7C5D63h,036283622h,0672767C0h,0E98CE9AFh dd 00441344F9h,0149514EAh,0F59CF5BBh,0CFC7CF18h,03F243F2Dh,0C046C0E3h,0723B72DBh,05470546Ch dd 0029CA294Ch,0F0E3F035h,0088508FEh,0C6CBC617h,0F311F34Fh,08CD08CE4h,0A493A459h,0CAB8CA96h dd 0068A6683Bh,0B883B84Dh,038203828h,0E5FFE52Eh,0AD9FAD56h,00B770B84h,0C8C3C81Dh,099CC99FFh dd 00580358EDh,0196F199Ah,00E080E0Ah,095BF957Eh,070407050h,0F7E7F730h,06E2B6ECFh,01FE21F6Eh dd 00B579B53Dh,0090C090Fh,061AA6134h,057825716h,09F419F0Bh,09D3A9D80h,011EA1164h,025B925CDh dd 00AFE4AFDDh,0459A4508h,0DFA4DF8Dh,0A397A35Ch,0EA7EEAD5h,035DA3558h,0ED7AEDD0h,0431743FCh dd 00F866F8CBh,0FB94FBB1h,037A137D3h,0FA1DFA40h,0C23DC268h,0B4F0B4CCh,032DE325Dh,09CB39C71h dd 00560B56E7h,0E372E3DAh,087A78760h,0151C151Bh,0F9EFF93Ah,063D163BFh,0345334A9h,09A3E9A85h dd 00B18FB142h,07C337CD1h,08826889Bh,03D5F3DA6h,0A1ECA1D7h,0E476E4DFh,0812A8194h,091499101h dd 000F810FFBh,0EE88EEAAh,016EE1661h,0D721D773h,097C497F5h,0A51AA5A8h,0FEEBFE3Fh,06DD96DB5h dd 0078C578AEh,0C539C56Dh,01D991DE5h,076CD76A4h,03EAD3EDCh,0CB31CB67h,0B68BB647h,0EF01EF5Bh dd 001218121Eh,0602360C5h,06ADD6AB0h,04D1F4DF6h,0CE4ECEE9h,0DE2DDE7Ch,055F9559Dh,07E487E5Ah dd 00214F21B2h,003F2037Ah,0A065A026h,05E8E5E19h,05A785A66h,0655C654Bh,06258624Eh,0FD19FD45h dd 00068D06F4h,040E54086h,0F298F2BEh,0335733ACh,017671790h,0057F058Eh,0E805E85Eh,04F644F7Dh dd 0089AF896Ah,010631095h,074B6742Fh,00AFE0A75h,05CF55C92h,09BB79B74h,02D3C2D33h,030A530D6h dd 002ECE2E49h,049E94989h,046684672h,077447755h,0A8E0A8D8h,0964D9604h,0284328BDh,0A969A929h dd 00D929D979h,0862E8691h,0D1ACD187h,0F415F44Ah,08D598D15h,0D6A8D682h,0B90AB9BCh,0429E420Dh dd 00F66EF6C1h,02F472FB8h,0DDDFDD06h,023342339h,0CC35CC62h,0F16AF1C4h,0C1CFC112h,085DC85EBh dd 008F228F9Eh,071C971A1h,090C090F0h,0AA9BAA53h,0018901F1h,08BD48BE1h,04EED4E8Ch,08EAB8E6Fh dd 00AB12ABA2h,06FA26F3Eh,0E60DE654h,0DB52DBF2h,092BB927Bh,0B702B7B6h,0692F69CAh,039A939D9h dd 00D3D7D30Ch,0A761A723h,0A21EA2ADh,0C3B4C399h,06C506C44h,007040705h,004F6047Fh,027C22746h dd 00AC16ACA7h,0D025D076h,050865013h,0DC56DCF7h,08455841Ah,0E109E151h,07ABE7A25h,0139113EFh dd 00D939A9D9h,090176790h,0719CB371h,0D2A6E8D2h,005070405h,09852FD98h,06580A365h,0DFE476DFh dd 0008459A08h,0024B9202h,0A0E080A0h,0665A7866h,0DDAFE4DDh,0B06ADDB0h,0BF63D1BFh,0362A3836h dd 0054E60D54h,04320C643h,062CC3562h,0BEF298BEh,01E12181Eh,024EBF724h,0D7A1ECD7h,077416C77h dd 00BD2843BDh,032BC7532h,0D47B37D4h,09B88269Bh,0700DFA70h,0F94413F9h,0B1FB94B1h,05A7E485Ah dd 007A03F27Ah,0E48CD0E4h,047B68B47h,03C24303Ch,0A5E784A5h,0416B5441h,006DDDF06h,0C56023C5h dd 0045FD1945h,0A33A5BA3h,068C23D68h,0158D5915h,021ECF321h,03166AE31h,03E6FA23Eh,016578216h dd 0095106395h,05BEF015Bh,04DB8834Dh,091862E91h,0B56DD9B5h,01F83511Fh,053AA9B53h,0635D7C63h dd 003B68A63Bh,03FFEEB3Fh,0D630A5D6h,0257ABE25h,0A7AC16A7h,00F090C0Fh,035F0E335h,023A76123h dd 00F090C0F0h,0AFE98CAFh,0809D3A80h,0925CF592h,0810C7381h,027312C27h,076D02576h,0E7560BE7h dd 007B92BB7Bh,0E9CE4EE9h,0F10189F1h,09F1E6B9Fh,0A93453A9h,0C4F16AC4h,099C3B499h,0975BF197h dd 008347E183h,06B18E66Bh,0C822BDC8h,00E98450Eh,06E1FE26Eh,0C9B3F4C9h,02F74B62Fh,0CBF866CBh dd 00FF99CCFFh,0EA1495EAh,0ED5803EDh,0F7DC56F7h,0E18BD4E1h,01B151C1Bh,0ADA21EADh,00CD3D70Ch dd 002BE2FB2Bh,01DC8C31Dh,0195E8E19h,0C22CB5C2h,08949E989h,012C1CF12h,07E95BF7Eh,0207DBA20h dd 006411EA64h,0840B7784h,06DC5396Dh,06A89AF6Ah,0D17C33D1h,0A171C9A1h,0CEFF62CEh,037BB7137h dd 00FB0F81FBh,03DB5793Dh,051E10951h,0DC3EADDCh,02D3F242Dh,0A476CDA4h,09D55F99Dh,0EE82D8EEh dd 008640E586h,0AE78C5AEh,0CD25B9CDh,004964D04h,055774455h,00A0E080Ah,013508613h,030F7E730h dd 00D337A1D3h,040FA1D40h,03461AA34h,08C4EED8Ch,0B3B006B3h,06C54706Ch,02A73B22Ah,0523BD252h dd 000B9F410Bh,08B027B8Bh,088D8A088h,04FF3114Fh,067CB3167h,04627C246h,0C06727C0h,0B4FC90B4h dd 0028382028h,07F04F67Fh,078486078h,02EE5FF2Eh,0074C9607h,04B655C4Bh,0C72BB1C7h,06F8EAB6Fh dd 000D429E0Dh,0BBF59CBBh,0F2DB52F2h,0F34A1BF3h,0A63D5FA6h,059A49359h,0BCB90ABCh,03AF9EF3Ah dd 00EF1391EFh,0FE0885FEh,001914901h,06116EE61h,07CDE2D7Ch,0B2214FB2h,042B18F42h,0DB723BDBh dd 00B82F47B8h,048BF8748h,02CAE6D2Ch,0E3C046E3h,0573CD657h,0859A3E85h,029A96929h,07D4F647Dh dd 0094812A94h,0492ECE49h,017C6CB17h,0CA692FCAh,0C3BDFCC3h,05CA3975Ch,05EE8055Eh,0D0ED7AD0h dd 0087D1AC87h,08E057F8Eh,0BA64D5BAh,0A8A51AA8h,0B7264BB7h,0B9BE0EB9h,06087A760h,0F8D55AF8h dd 0022362822h,0111B1411h,0DE753FDEh,079D92979h,0AAEE88AAh,0332D3C33h,05F794C5Fh,0B6B702B6h dd 0096CAB896h,05835DA58h,09CC4B09Ch,0FC4317FCh,01A84551Ah,0F64D1FF6h,01C598A1Ch,038B27D38h dd 00AC3357ACh,018CFC718h,0F4068DF4h,069537469h,0749BB774h,0F597C4F5h,056AD9F56h,0DAE372DAh dd 00D5EA7ED5h,04AF4154Ah,09E8F229Eh,0A2AB12A2h,04E62584Eh,0E85F07E8h,0E51D99E5h,039233439h dd 00C1F66EC1h,0446C5044h,05D32DE5Dh,072466872h,026A06526h,093CDBC93h,003DADB03h,0C6BAF8C6h dd 00FA9EC8FAh,082D6A882h,0CF6E2BCFh,050704050h,0EB85DCEBh,0750AFE75h,08A93328Ah,08DDFA48Dh dd 004C29CA4Ch,0141C1014h,073D72173h,0CCB4F0CCh,009D4D309h,0108A5D10h,0E2510FE2h,000000000h dd 009A196F9Ah,0E01A9DE0h,08F94368Fh,0E6C742E6h,0ECC94AECh,0FDD25EFDh,0AB7FC1ABh,0D8A8E0D8h align 16 mk_tab label dword;[4][256] dd 003C3C57D6h,04D4DF61Fh,02828BD43h,0C0C0E346h,07B7BD437h,04141776Ch,0878760A7h,0BDBDC3FCh dd 00FCFCB490h,0B2B2387Dh,03131272Ch,03030D6A5h,0E6E6540Dh,0202043C6h,0E9E9AF8Ch,009090F0Ch dd 007F7FABC1h,0B1B1428Fh,046467268h,0C4C49CB0h,09999FFCCh,053536974h,09696044Dh,03B3B52D2h dd 007878AEC5h,0272746C2h,05F5FE807h,0F1F1C46Ah,0FEFE3FEBh,05B5B97F1h,03E3EDCADh,0BFBF4887h dd 00404086E5h,09D9D803Ah,0F7F730E7h,094948F36h,017179067h,0CACA96B8h,0E0E0A080h,000000000h dd 000A0A75FEh,00101F189h,02222C8BDh,04A4AF31Bh,0B0B0B306h,0B6B6478Bh,06F6F3EA2h,0F6F6C16Eh dd 00DDDD06DFh,02F2FB847h,01313EF91h,0C2C2683Dh,07E7E5A48h,0C3C399B4h,070705040h,007070504h dd 002121B24Fh,03939D9A9h,03333AC57h,06C6C4450h,01C1C1410h,0474783E1h,0A8A8D8E0h,08585EBDCh dd 0012121E18h,019199A6Fh,005058E7Fh,00F0FFB81h,074742FB6h,04C4C0796h,0D2D2FD5Eh,05858ED03h dd 000E0E0A08h,079795F4Ch,0B5B53D79h,0EEEEAA88h,04545089Ah,07C7CD133h,0E1E15109h,03434A953h dd 00111164EAh,054546C70h,0BCBC3275h,0DBDBF252h,057571682h,05A5A6678h,029294CCAh,048487860h dd 0088889B26h,0DFDF8DA4h,0E2E22BFBh,068683BA6h,0CFCF18C7h,04343FC17h,0D1D187ACh,0E7E7A584h dd 00D8D888A0h,0BABAC6F8h,09E9EFAC8h,02626B74Bh,0EBEB24F7h,0C7C7E642h,06B6B4154h,0D0D07625h dd 00EAEAD57Eh,004047FF6h,0D3D30CD7h,0D9D97929h,06E6ECF2Bh,0C6C617CBh,0666631AEh,03A3AA35Bh dd 00AAAA539Bh,0FAFA401Dh,03737D3A1h,0A2A2AD1Eh,0B4B4CCF0h,0C1C112CFh,06767C027h,06A6AB0DDh dd 001A1AE09Dh,05151E20Fh,062624E58h,003037AF2h,0CBCB6731h,0B8B84D83h,050501386h,065654B5Ch dd 0091910149h,0F0F035E3h,01B1B1114h,0CDCD93BCh,084841A55h,00C0C8173h,0D7D77321h,04F4F7D64h dd 00A0A02665h,002028B7Bh,07A7A25BEh,0616134AAh,00606F48Dh,02D2D333Ch,08282EED8h,04B4B0292h dd 0077775544h,06363BFD1h,07676A4CDh,0D5D5F85Ah,05E5E198Eh,042420D9Eh,032325DDEh,0F4F44A15h dd 006060C523h,0B7B7B602h,0ACACA716h,0ABABA212h,093938A32h,02C2CC2B5h,0F2F2BE98h,0C8C81DC3h dd 0059591C8Ah,0A5A5A81Ah,08C8CE4D0h,08D8D1559h,0DCDCF756h,0D4D409D3h,0FFFFCE62h,095957EBFh dd 000D0D70FAh,07272DB3Bh,018186BE6h,0F9F93AEFh,0FBFBB194h,08A8A105Dh,05D5D637Ch,0161661EEh dd 00A3A35C97h,0A6A6D2E8h,03F3F2D24h,0ECEC21F3h,083831F51h,02B2BC7B1h,04444F913h,08686912Eh dd 003D3DA65Fh,0E3E3DA72h,0353558DAh,0BBBB3771h,036362228h,08B8BE1D4h,01E1E9F6Bh,0BEBEB90Eh dd 0092927BBBh,09C9C71B3h,0808065A3h,038382820h,07575DE3Fh,0F5F5BB9Ch,02A2A3638h,09797F5C4h dd 00A9A92969h,0A7A72361h,0E4E4DF76h,055559DF9h,0A4A45993h,09090F0C0h,0E8E85E05h,09F9F0B41h dd 005C5C92F5h,08F8F9E22h,0F8F8CB66h,09A9A853Eh,05656E70Bh,04E4E8CEDh,0ADAD569Fh,0DADA03DBh dd 001414EA95h,02525CDB9h,0B3B3C9F4h,0C5C56D39h,0D6D682A8h,0C9C9EC4Ah,07D7D20BAh,0525298FDh dd 00F3F34F11h,0AFAFDDE4h,073732AB2h,01D1DE599h,010109563h,0B9B9BC0Ah,0A1A1D7ECh,07171A1C9h dd 006D6DB5D9h,01F1F6EE2h,0DEDE7C2Dh,06969CA2Fh,02E2E49CEh,06464BAD5h,0CCCC6235h,0FDFD4519h dd 00CECEE94Eh,089896AAFh,023233934h,08E8E6FABh,00B0B8477h,0EDEDD07Ah,08181942Ah,09B9B74B7h dd 000808FE85h,015151B1Ch,098980E45h,0EFEF5B01h,0494989E9h,0AEAE2C6Dh,024243C30h,0E5E52EFFh dd 0042E6C7C7h,0A23E6F6Fh,010141C1Ch,0D70CD3D3h,095EA1414h,0E5864040h,0706C5454h,08DF40606h dd 00F27A0303h,0E1834747h,0A1D33737h,03E859A9Ah,0647D4F4Fh,091EF1313h,0C1AB7F7Fh,06AC4F1F1h dd 00181E1212h,01D40FAFAh,0D0E48C8Ch,04FB22121h,05AF8D5D5h,0C5AE7878h,06123A7A7h,0DE5D3232h dd 0084A5E7E7h,089F10101h,037D47B7Bh,0EB3FFEFEh,07137BBBBh,07C635D5Dh,099E51D1Dh,0834DB8B8h dd 0062CEFFFFh,047B82F2Fh,06B9F1E1Eh,0B7749B9Bh,0DDB06A6Ah,09DE01A1Ah,0FE750A0Ah,02BCF6E6Eh dd 00FB2BE2E2h,0368F9494h,0E8D2A6A6h,094B1FBFBh,0E26E1F1Fh,0511F8383h,020283838h,03C332D2Dh dd 00A9D93939h,0F5925C5Ch,07ED5EAEAh,0E9894949h,0C8FA9E9Eh,0CA4C2929h,052F2DBDBh,01AA8A5A5h dd 00AC87D1D1h,090B4FCFCh,0242D3F3Fh,0D5BA6464h,0F67F0404h,0A088D8D8h,09CBBF5F5h,09359A4A4h dd 003167CBCBh,09A084545h,03A809D9Dh,07532BCBCh,0A3658080h,0F321ECECh,01EADA2A2h,02E918686h dd 004AECC9C9h,049019191h,067901717h,01FF64D4Dh,034392323h,08B47B6B6h,08748BFBFh,0A7608787h dd 00D2523B3Bh,08E195E5Eh,088AAEEEEh,080A0E0E0h,0C0F09090h,017FC4343h,033D17C7Ch,073810C0Ch dd 00B5C22C2Ch,0114FF3F3h,057AC3333h,0ED8C4E4Eh,0D6573C3Ch,00D54E6E6h,0793DB5B5h,0D1BF6363h dd 007F8E0505h,077840B0Bh,059158D8Dh,04BB72626h,027C06767h,007E85F5Fh,0BF7E9595h,0485A7E7Eh dd 00ADDC3E3Eh,016A7ACACh,07AD0EDEDh,00EB9BEBEh,0EA641111h,05BA33A3Ah,0AB6F8E8Eh,003ED5858h dd 00EE611616h,0CDA47676h,002B6B7B7h,0FCC3BDBDh,0CF12C1C1h,0DB03DADAh,0A48DDFDFh,063951010h dd 0066CBF8F8h,098BEF2F2h,0A882D6D6h,0F4C9B3B3h,056F7DCDCh,0FA700D0Dh,023C56060h,0F1975B5Bh dd 0043BD2828h,01C1B1515h,0396DC5C5h,085FE0808h,0975CA3A3h,0551A8484h,0328A9393h,00BE75656h dd 00CCFF9999h,0FD985252h,0ECD7A1A1h,0269B8888h,00951E1E1h,0BA207D7Dh,0E335F0F0h,0C718CFCFh dd 00154AF4F4h,0584E6262h,014111B1Bh,02A948181h,02979D9D9h,08CAFE9E9h,0C31DC8C8h,05D108A8Ah dd 002FCA6969h,0E730F7F7h,028223636h,082165757h,02D7CDEDEh,0B09CC4C4h,08A1C5959h,06929A9A9h dd 00BE257A7Ah,013F94444h,0B22A7373h,0D4E18B8Bh,0E0D8A8A8h,0015BEFEFh,0303C2424h,0055EE8E8h dd 006526A0A0h,01945FDFDh,086135050h,0F99D5555h,0BC93CDCDh,0229E8F8Fh,092024B4Bh,0F0CCB4B4h dd 009B53AAAAh,006B3B0B0h,0B3719C9Ch,046E3C0C0h,0080A0E0Eh,004050707h,096074C4Ch,0D8EE8282h dd 005C4B6565h,072DAE3E3h,053A93434h,0F724EBEBh,044557777h,0AF6A8989h,076DFE4E4h,000000000h dd 00E66B1818h,0410B9F9Fh,00C0F0909h,0B1C72B2Bh,02173D7D7h,0CB17C6C6h,0DCEB8585h,0E4DDAFAFh dd 004EE9CECEh,0C6432020h,06F9A1919h,0BB7B9292h,074695353h,02C273131h,0A5D63030h,0DA583535h dd 003D68C2C2h,012A2ABABh,0AA346161h,0B499C3C3h,0CE492E2Eh,06C774141h,0450E9898h,0A63B6868h dd 00C9A17171h,0D9B56D6Dh,0B62F7474h,02576D0D0h,07B8B0202h,05FA63D3Dh,078665A5Ah,09F56ADADh dd 00AE316666h,09E0D4242h,0B896CACAh,0C2462727h,081FB0F0Fh,0EF3AF9F9h,054416B6Bh,0F8C6BABAh dd 00B9CD2525h,0FF2EE5E5h,0C4F59797h,0DF06DDDDh,03BDB7272h,05EFDD2D2h,06EC1F6F6h,060784848h dd 000FE25151h,050446C6Ch,03562CCCCh,08F42B1B1h,00ABCB9B9h,04D049696h,07D38B2B2h,01BF34A4Ah dd 003FDE7575h,038362A2Ah,06D2CAEAEh,0BDC82222h,0D309D4D4h,068724646h,04C5F7979h,040507070h dd 008D598D15h,0139113EFh,0BE0EBEB9h,06B546B41h,0CFC7CF18h,0FF62FFCEh,0D55AD5F8h,0D025D076h dd 009D3A9D80h,0312C3127h,025B925CDh,0A6E8A6D2h,09EC89EFAh,02ECE2E49h,05BF15B97h,049E94989h dd 006E2B6ECFh,077447755h,0862E8691h,0C6CBC617h,0DC56DCF7h,0DFA4DF8Dh,0AC16ACA7h,0B18FB142h dd 00BB71BB37h,0AE6DAE2Ch,020C62043h,029CA294Ch,0F0E3F035h,0264B26B7h,09F419F0Bh,095BF957Eh dd 00B006B0B3h,030A530D6h,02A382A36h,0794C795Fh,01B141B11h,0BC75BC32h,0692F69CAh,004F6047Fh dd 00F7E7F730h,038203828h,082D882EEh,00B770B84h,0459A4508h,0E805E85Eh,08351831Fh,01E6B1E9Fh dd 00C94AC9ECh,0A1ECA1D7h,0672767C0h,099CC99FFh,04EED4E8Ch,0335733ACh,0C539C56Dh,00C730C81h dd 002CB52CC2h,08CD08CE4h,078C578AEh,08A5D8A10h,03A5B3AA3h,01FE21F6Eh,0D1ACD187h,0E476E4DFh dd 0071C971A1h,02430243Ch,035DA3558h,0E98CE9AFh,00AFE0A75h,0F298F2BEh,06FA26F3Eh,02D3C2D33h dd 00BF87BF48h,0284328BDh,0598A591Ch,0F9EFF93Ah,0149514EAh,09CB39C71h,0088508FEh,0510F51E2h dd 008455841Ah,0E109E151h,0602360C5h,00DFA0D70h,07B377BD4h,0753F75DEh,085DC85EBh,00E080E0Ah dd 00B90AB9BCh,0A065A026h,0196F199Ah,05E8E5E19h,0018901F1h,03EAD3EDCh,0FEEBFE3Fh,0D721D773h dd 00812A8194h,0DB52DBF2h,05A785A66h,0AA9BAA53h,03D5F3DA6h,0C046C0E3h,061AA6134h,016EE1661h dd 00ECF3EC21h,08826889Bh,023342339h,09436948Fh,04D1F4DF6h,09332938Ah,040E54086h,0EA7EEAD5h dd 007DBA7D20h,08EAB8E6Fh,0F16AF1C4h,0C742C7E6h,08F228F9Eh,0A969A929h,097C497F5h,0B4F0B4CCh dd 00B702B7B6h,07E487E5Ah,076CD76A4h,07FC17FABh,03BD23B52h,0580358EDh,0EE88EEAAh,0345334A9h dd 001A9D1AE0h,0FB94FBB1h,063D163BFh,022BD22C8h,0E372E3DAh,0AB12ABA2h,032DE325Dh,0431743FCh dd 00A397A35Ch,017671790h,092BB927Bh,0CE4ECEE9h,0CAB8CA96h,0964D9604h,048604878h,068A6683Bh dd 00BAF8BAC6h,03CD63C57h,0416C4177h,0A21EA2ADh,0C1CFC112h,053745369h,0DADBDA03h,0A51AA5A8h dd 007C337CD1h,05CF55C92h,0E2FBE22Bh,0CB31CB67h,057825716h,0F59CF5BBh,089AF896Ah,07ABE7A25h dd 00D25ED2FDh,0DDDFDD06h,0151C151Bh,0F311F34Fh,0ED7AEDD0h,0BDFCBDC3h,06DD96DB5h,070407050h dd 00AFE4AFDDh,0441344F9h,0D3D7D30Ch,0560B56E7h,074B6742Fh,064D564BAh,0B883B84Dh,0057F058Eh dd 0080A38065h,011EA1164h,073B2732Ah,0B68BB647h,00F810FFBh,09845980Eh,0A493A459h,0AD9FAD56h dd 00F66EF6C1h,05470546Ch,000000000h,03F243F2Dh,066AE6631h,050865013h,09BB79B74h,007040705h dd 00EBF7EB24h,0B27DB238h,05D7C5D63h,0090C090Fh,0A8E0A8D8h,039A939D9h,02F472FB8h,0CDBCCD93h dd 00068D06F4h,06C506C44h,0EF01EF5Bh,0723B72DBh,090C090F0h,018E6186Bh,046684672h,01C101C14h dd 00CC35CC62h,091499101h,04B924B02h,01D991DE5h,0D4D3D409h,0FD19FD45h,01218121Eh,0F866F8CBh dd 009A3E9A85h,0429E420Dh,04F644F7Dh,0D8A0D888h,0E080E0A0h,0FC90FCB4h,010631095h,0E60DE654h dd 0036283622h,052FD5298h,0E5FFE52Eh,04A1B4AF3h,0C23DC268h,0D6A8D682h,0FA1DFA40h,0C8C3C81Dh dd 00C3B4C399h,087A78760h,027C22746h,0027B028Bh,0214F21B2h,0DE2DDE7Ch,06ADD6AB0h,047E14783h dd 0037A137D3h,06258624Eh,05F075FE8h,0F415F44Ah,0E784E7A5h,0655C654Bh,0C4B0C49Ch,02BB12BC7h dd 0055F9559Dh,003F2037Ah,04C964C07h,0A761A723h,0B579B53Dh,0D929D979h,08BD48BE1h,0B3F4B3C9h dd 000D429E0Dh,009D4D309h,0E51D99E5h,032BC7532h,0EB85DCEBh,053AA9B53h,095106395h,0DAE372DAh dd 0000000000h,006DDDF06h,0A93453A9h,0AFE98CAFh,0B3B006B3h,094812A94h,0810C7381h,072466872h dd 00975BF197h,055774455h,06E1FE26Eh,022362822h,00F090C0Fh,0A33A5BA3h,0FB0F81FBh,0B7264BB7h dd 004DB8834Dh,08347E183h,093CDBC93h,01E12181Eh,0F7DC56F7h,0D47B37D4h,0207DBA20h,09852FD98h dd 0016578216h,037BB7137h,09A196F9Ah,02D3F242Dh,056AD9F56h,0DDAFE4DDh,09E8F229Eh,0A63D5FA6h dd 008640E586h,0A5E784A5h,0D0ED7AD0h,0E2510FE2h,0E7560BE7h,0111B1411h,00E98450Eh,07B92BB7Bh dd 00D337A1D3h,0EF1391EFh,045FD1945h,029A96929h,0D2A6E8D2h,00B9F410Bh,027312C27h,0E85F07E8h dd 00ADA21EADh,07CDE2D7Ch,0E9CE4EE9h,09D55F99Dh,035F0E335h,0F4068DF4h,01DC8C31Dh,067CB3167h dd 00F10189F1h,0E01A9DE0h,0A476CDA4h,04E62584Eh,026A06526h,0573CD657h,096CAB896h,0D630A5D6h dd 00A7AC16A7h,03AF9EF3Ah,0AB7FC1ABh,06DC5396Dh,0F597C4F5h,0CA692FCAh,06411EA64h,0809D3A80h dd 00108A5D10h,0DC3EADDCh,0074C9607h,0C9B3F4C9h,0B56DD9B5h,0840B7784h,078486078h,0F090C0F0h dd 003461AA34h,0EE82D8EEh,069537469h,04B655C4Bh,0E3C046E3h,01F83511Fh,087D1AC87h,0BEF298BEh dd 00750AFE75h,012C1CF12h,03E6FA23Eh,0719CB371h,06C54706Ch,09B88269Bh,08A93328Ah,08F94368Fh dd 0050704050h,06087A760h,0DB723BDBh,0925CF592h,0CEFF62CEh,09F1E6B9Fh,040FA1D40h,0B6B702B6h dd 0017C6CB17h,0D17C33D1h,024EBF724h,01C598A1Ch,00CD3D70Ch,0446C5044h,048BF8748h,005070405h dd 009CC4B09Ch,0141C1014h,0859A3E85h,0B82F47B8h,0C56023C5h,00A0E080Ah,001914901h,03B68A63Bh dd 00D5EA7ED5h,0ECC94AECh,0C06727C0h,068C23D68h,079D92979h,023A76123h,0ED5803EDh,0F2DB52F2h dd 00362A3836h,0A2AB12A2h,07E95BF7Eh,018CFC718h,05835DA58h,04C29CA4Ch,0BF63D1BFh,004964D04h dd 001B151C1Bh,03DB5793Dh,003DADB03h,0749BB774h,013508613h,047B68B47h,0AE78C5AEh,08B027B8Bh dd 004320C643h,0DFE476DFh,090176790h,0B06ADDB0h,0B4FC90B4h,0AAEE88AAh,05F794C5Fh,028382028h dd 00700DFA70h,0F34A1BF3h,04AF4154Ah,042B18F42h,0FC4317FCh,0492ECE49h,0BCB90ABCh,0A0E080A0h dd 008C4EED8Ch,076D02576h,0C22CB5C2h,0FDD25EFDh,0C822BDC8h,02EE5FF2Eh,0BD2843BDh,054E60D54h dd 00024B9202h,0665A7866h,05BEF015Bh,0E6C742E6h,021ECF321h,0E18BD4E1h,091862E91h,06580A365h dd 005D32DE5Dh,082D6A882h,051E10951h,0A171C9A1h,03FFEEB3Fh,08E057F8Eh,0F8D55AF8h,077416C77h dd 00C3BDFCC3h,05CA3975Ch,0DE753FDEh,0A8A51AA8h,02CAE6D2Ch,06116EE61h,030F7E730h,0CBF866CBh dd 00C4F16AC4h,0CCB4F0CCh,06F8EAB6Fh,02F74B62Fh,088D8A088h,059A49359h,07A03F27Ah,099C3B499h dd 0039233439h,0195E8E19h,073D72173h,06B18E66Bh,038B27D38h,03C24303Ch,08DDFA48Dh,07D4F647Dh dd 00635D7C63h,06A89AF6Ah,01A84551Ah,062CC3562h,0C1F66EC1h,0F94413F9h,0158D5915h,05EE8055Eh dd 00D939A9D9h,0CF6E2BCFh,0FE0885FEh,04FF3114Fh,0B1FB94B1h,0D7A1ECD7h,0B9BE0EB9h,0FA9EC8FAh dd 00B2214FB2h,07F04F67Fh,0E48CD0E4h,0CD25B9CDh,08949E989h,0BA64D5BAh,04627C246h,0EA1495EAh dd 00416B5441h,0C6BAF8C6h,0332D3C33h,0257ABE25h,02BE2FB2Bh,0F64D1FF6h,0FF99CCFFh,0AC3357ACh dd 005A7E485Ah,02A73B22Ah,008459A08h,0C72BB1C7h,0BBF59CBBh,03166AE31h,0523BD252h,0D8A8E0D8h .data? align 16 l_key DD 40 DUP(?) k_len DD ? .code ;*************************************************************************************** ;Start Twofish Handler functions ;*************************************************************************************** TWOFISH_ENC_RT proc uses esi edx ecx _Input:dword,_Output:dword,_len:dword call EnableKeyEdit invoke lstrlen, addr sKeyIn .IF (EAX < 1) || (EAX > 128) invoke SetDlgItemText, hWindow, IDC_INFO,addr sErrorLen1128 invoke SetDlgItemText, hWindow, IDC_OUTPUT,NULL mov eax, FALSE .ELSE push eax push offset sKeyIn call TwofishInit invoke RtlZeroMemory,offset bf_tempbuf,sizeof bf_tempbuf-1 mov esi,_Input mov ebx,_len ;part into multiples of 16 EncryptLoop: push esi ;source mov eax,ebx ;length mov ecx,16 xor edx,edx div ecx .if eax == 0 mov eax,edx .else mov eax,16 .endif push eax push esi Call Bit16Prepare .if bCipherMode == 1 push 16 push offset bf_encryptbuf call CipherXor .endif INVOKE TwofishEncrypt,offset bf_encryptbuf,offset bf_tempbuf ;convert output to hex string mov eax,dword ptr[bf_tempbuf+4*0] mov edi,dword ptr[bf_tempbuf+4*1] mov ecx,dword ptr[bf_tempbuf+4*2] mov edx,dword ptr[bf_tempbuf+4*3] bswap eax bswap edx bswap ecx bswap edi invoke wsprintf,addr bf_tempbufout,addr sFormat1,eax,edi,ecx,edx invoke lstrcat,_Output,addr bf_tempbufout pop esi add esi,16 sub ebx,16 cmp ebx,0 jg EncryptLoop INVOKE lstrlen,_Output HexLen .ENDIF ret TWOFISH_ENC_RT endp TWOFISH_DEC_RT proc uses esi edx ecx _Input:dword,_Output:dword,_len:dword call EnableKeyEdit invoke lstrlen, addr sKeyIn .IF (EAX < 1) || (EAX > 128) invoke SetDlgItemText, hWindow, IDC_INFO,addr sErrorLen1128 invoke SetDlgItemText, hWindow, IDC_OUTPUT,NULL mov eax, FALSE .ELSE INVOKE TwofishInit,addr sKeyIn,eax ; mov bPassedRound,0 mov eax, [_len] cmp eax, 2 jl @inputError mov ecx,32 xor edx,edx div ecx cmp edx,0 jne @inputError invoke RtlZeroMemory,offset bf_decryptbuf,sizeof bf_decryptbuf-1 ;convert hex to chars push _len push offset bf_decryptbuf push _Input call HEX2CHR_RT mov ebx,eax ;length .if eax != -1 ; all chars are ok mov esi,offset bf_decryptbuf mov edi,_Output ;destination ;now we do similar as encryption DecryptLoop: push esi push 16 push esi call Bit16Prepare INVOKE TwofishDecrypt,offset bf_encryptbuf,offset bf_tempbuf DecryptEnd 16 mov eax,dword ptr[esi] mov edx,dword ptr[esi+4] mov dword ptr[edi+4*0],eax mov dword ptr[edi+4*1],edx mov eax,dword ptr[esi+4*2] mov edx,dword ptr[esi+4*3] mov dword ptr[edi+4*2],eax mov dword ptr[edi+4*3],edx add edi,16 pop esi add esi,16 sub ebx,16 cmp ebx,0 jg DecryptLoop ;now we need to clean it up :) INVOKE lstrlen,_Output mov edi,_Output movzx ebx,byte ptr[edi+eax-1];get last char .if ebx < 16 ;padding chars are 1-8 sub eax,ebx ;fix up length mov byte ptr[edi+eax],0 ;clear it up :) .endif .elseif invoke SetDlgItemText, hWindow, IDC_INFO, addr sErrorMsgHex mov eax,FALSE .endif jmp @endGenerate @inputError: invoke SetDlgItemText, hWindow, IDC_INFO, addr sError128b mov eax, FALSE @endGenerate: .ENDIF ret TWOFISH_DEC_RT endp OPTION PROLOGUE:NONE OPTION EPILOGUE:NONE h_fun_load macro xa,xb,xc,xd mov al,byte ptr[ebp+xa*256+eax] mov bl,byte ptr[ebp+xb*256+ebx] mov cl,byte ptr[ebp+xc*256+ecx] mov dl,byte ptr[ebp+xd*256+edx] endm h_fun_xor_with_key macro xa,xb,xc,xd xor al,[esi+xa] xor bl,[esi+xb] xor cl,[esi+xc] xor dl,[esi+xd] endm ;align 16 h_fun proc x,key push ebp push edi push esi push ebx movzx eax,byte ptr [4*4][esp+1*4][0] movzx ebx,byte ptr [4*4][esp+1*4][1] movzx ecx,byte ptr [4*4][esp+1*4][2] movzx edx,byte ptr [4*4][esp+1*4][3] mov ebp,offset q_tab mov edi,k_len mov esi,[4*4][esp+2*4];key cmp edi,4 je k_len_4 cmp edi,3 je k_len_3 cmp edi,2 je k_len_2 align 16 k_len_4: h_fun_load 1,0,0,1 h_fun_xor_with_key 12,13,14,15 k_len_3: h_fun_load 1,1,0,0 h_fun_xor_with_key 8,9,10,11 k_len_2: h_fun_load 0,1,0,1 h_fun_xor_with_key 4,5,6,7 h_fun_load 0,0,1,1 mov edi,offset m_tab h_fun_xor_with_key 0,1,2,3 mov eax,[edi+0*4*256+eax*4] xor eax,[edi+1*4*256+ebx*4] xor eax,[edi+2*4*256+ecx*4] xor eax,[edi+3*4*256+edx*4] pop ebx pop esi pop edi pop ebp ret 2*4 h_fun endp copy_key macro i mov eax,dword ptr[esi+i*8+0] mov edx,dword ptr[esi+i*8+4] mov me_key[i*4],eax mov mo_key[i*4],edx endm ; 3390 clk align 16 TwofishInit proc in_key,key_len push ebp push edi push esi push ebx twofish_set_key_locals equ 4*4+4*4 sub esp,twofish_set_key_locals me_key equ [esp+0*4] mo_key equ [esp+4*4] mov ebp,[esp+2*4][4*4+twofish_set_key_locals];key_len mov esi,[esp+1*4][4*4+twofish_set_key_locals];in_key shr ebp,3 mov k_len,ebp copy_key 0 copy_key 1 sub ebp,2 jz copy_key_done copy_key 2 dec ebp jz copy_key_done copy_key 3 copy_key_done: mov ebp,offset l_key mov edi,-40*4 xor ebx,ebx .repeat invoke h_fun,ebx,addr me_key mov esi,eax add ebx,001010101h invoke h_fun,ebx,addr mo_key rol eax,8 add ebx,001010101h lea ecx,[esi+eax] lea edx,[esi+eax*2] rol edx,9 mov [ebp+40*4+edi+0],ecx; = a + b; mov [ebp+40*4+edi+4],edx; = rotl(a + 2 * b, 9); add edi,2*4 .until zero?;edi>=40*4 add esp,twofish_set_key_locals mov eax,ebp mov edx,sizeof l_key pop ebx pop esi pop edi pop ebp ret 2*4 TwofishInit endp g_fun macro blk_x,blk_x_lo,blk_x_hi, blk_y,blk_y_lo,blk_y_hi, nx,ny ;t0,t1 is esi,edi ;blk is movzx esi,blk_x_lo movzx ebp,blk_x_hi movzx edi,blk_y_lo mov esi,mk_tab[0*256*4][esi*4] xor esi,mk_tab[1*256*4][ebp*4] ror blk_x,16 movzx ebp,blk_x_lo mov edi,mk_tab[1*256*4][edi*4] xor esi,mk_tab[2*256*4][ebp*4] movzx ebp,blk_x_hi xor esi,mk_tab[3*256*4][ebp*4] movzx ebp,blk_y_hi ror blk_y,16 xor edi,mk_tab[2*256*4][ebp*4] movzx ebp,blk_y_lo xor edi,mk_tab[3*256*4][ebp*4] movzx ebp,blk_y_hi xor edi,mk_tab[0*256*4][ebp*4] ror blk_y,16 ror blk_x,16 add esi,edi add edi,esi add esi,l_key[(4*xi+nx)*4] add edi,l_key[(4*xi+ny)*4] endm ; 312 clk align 16 TwofishEncrypt proc pin_blk,pout_blk push ebp push edi push esi push ebx mov esi,[esp+1*4][4*4];pin_blk mov eax,l_key[0*4] mov ebx,l_key[1*4] mov ecx,l_key[2*4] mov edx,l_key[3*4] xor eax,dword ptr[esi+0*4] xor ebx,dword ptr[esi+1*4] xor ecx,dword ptr[esi+2*4] xor edx,dword ptr[esi+3*4] xi = 0 rept 8 g_fun eax,al,ah, ebx,bl,bh, 8,9 xor ecx,esi ror ecx,1 rol edx,1 xor edx,edi g_fun ecx,cl,ch, edx,dl,dh, 10,11 xor eax,esi ror eax,1 rol ebx,1 xor ebx,edi xi = xi + 1 endm mov edi,[esp+2*4][4*4];pout_blk xor ecx,l_key[4*4] xor edx,l_key[5*4] xor eax,l_key[6*4] xor ebx,l_key[7*4] mov dword ptr[edi+0*4],ecx mov dword ptr[edi+1*4],edx mov dword ptr[edi+2*4],eax mov dword ptr[edi+3*4],ebx pop ebx pop esi pop edi pop ebp ret 2*4 TwofishEncrypt endp ; 306 clk align 16 TwofishDecrypt proc pin_blk,pout_blk push ebp push edi push esi push ebx mov esi,[esp+1*4][4*4];pin_blk mov eax,l_key[4*4] mov ebx,l_key[5*4] mov ecx,l_key[6*4] mov edx,l_key[7*4] xor eax,dword ptr[esi+0*4] xor ebx,dword ptr[esi+1*4] xor ecx,dword ptr[esi+2*4] xor edx,dword ptr[esi+3*4] xi = 7 rept 8 g_fun eax,al,ah, ebx,bl,bh, 10,11 xor edx,edi rol ecx,1 ror edx,1 xor ecx,esi g_fun ecx,cl,ch, edx,dl,dh, 8,9 xor ebx,edi rol eax,1 ror ebx,1 xor eax,esi xi = xi - 1 endm mov edi,[esp+2*4][4*4];pout_blk xor ecx,l_key[0*4] xor edx,l_key[1*4] xor eax,l_key[2*4] xor ebx,l_key[3*4] mov dword ptr[edi+0*4],ecx mov dword ptr[edi+1*4],edx mov dword ptr[edi+2*4],eax mov dword ptr[edi+3*4],ebx pop ebx pop esi pop edi pop ebp ret 2*4 TwofishDecrypt endp OPTION PROLOGUE:PROLOGUEDEF OPTION EPILOGUE:EPILOGUEDEF