Code: Select all
#Include "BlowFish.bi"
Open "test.txt" For Binary As #1
Open "test.enc.txt" For Binary As #2
Dim As UInteger x,xl,xr,ctr
Dim As UInteger i,length,should,nbytes,i2
Dim As UByte sapp,eapp
sapp=&h80
eapp=&h0
ctr=0
Dim ctx As blowfish_ctx
length=Lof(1)
Put #1,length+1,sapp
length=Lof(1)
If (length Mod 4)<>0 Then
should=(int(length/4+1))*4
nbytes=should-length
For i=1 To nbytes
length+=1
Put #1,length,eapp
Next
EndIf'/
length=Lof(1)
blowfish_init(ctx,"psygate")
i=0
i2=0
While i<=length-4
Get #1,i,xl
i+=4
Get #1,i,xr
i+=4
blowfish_encrypt(ctx,xl,xr)
Put #2,i2,xl
i2+=4
Put #2,i2,xr
i2+=4
Wend
Print Lof(1)
Print Lof(2)
sleep
Code: Select all
#Define round_nr 16
Type blowfish_ctx
Dim As UInteger p(18)
Dim As UInteger s(4,256)
End Type
Declare Function orig_p(i As UInteger) As UInteger
Declare Function orig_s(i As UInteger,j As UInteger) As UInteger
Declare Function F(ByRef ctx As blowfish_ctx,x As UInteger) As UInteger
Declare Function Blowfish_Encrypt(ByRef ctx As blowfish_ctx,ByRef xl As UInteger, ByRef xr As UInteger) As UInteger
Declare Function Blowfish_Decrypt(ByRef ctx As blowfish_ctx,ByRef xl1 As UInteger, ByRef xr1 As UInteger) As UInteger
Declare Function blowfish_init(ByRef ctx As blowfish_ctx,ekey As String) As UInteger
Declare Function blowfish_selftest() As UInteger
Declare Function hextokey(inpt As ULongInt) As String
Function blowfish_selftest() As UInteger
Dim As String ekey,chkstr
Dim As UInteger x,y,e,chk=1
Dim ctx As blowfish_ctx
x=&hffffffff
y=x
ekey=hextokey(&hFFFFFFFFFFFFFFFF)
blowfish_init(ctx,ekey)
blowfish_encrypt(ctx,x,y)
chkstr=Str(Hex(x))+Str(Hex(y))
If chkstr<>"51866FD5B85ECB8A" Then chk=0
x=0
y=x
ekey=hextokey(0)
blowfish_init(ctx,ekey)
Blowfish_Encrypt(ctx,x,y)
chkstr=Str(Hex(x))+Str(Hex(y))
If chkstr<>"4EF997456198DD78" Then chk=0
Return chk
End Function
Function hextokey(inpt As ULongInt) As String
Dim As String t,b
Dim As Integer i,q,v
For i=0 To 56 Step 8
q=(inpt Shr i) And &hff
b+=Chr(q)
Next
Return b
End Function
Function F(ByRef ctx As blowfish_ctx,x As UInteger) As UInteger
Dim As UInteger a,b,c,d
Dim As UInteger y
d=(x And &hff)
c=((x Shr 8) And &hff)
b=((x Shr 16) And &hff)
a=((x Shr 24) And &hff)
y=ctx.s(0,a) + ctx.s(1,b)
y=y Xor ctx.s(2,c)
y=y + ctx.s(3,d)
Return y
End Function
Function Blowfish_Encrypt(ByRef ctx As blowfish_ctx,ByRef xl1 As UInteger, ByRef xr1 As UInteger) As UInteger
Dim As UInteger xl,xr,temp,i
xl=xl1
xr=xr1
For i=0 To round_nr-1
xl=xl Xor ctx.p(i)
xr=F(ctx,xl) Xor xr
temp=xl
xl=xr
xr=temp
Next
temp=xl
xl=xr
xr=temp
xr=xr Xor ctx.p(round_nr)
xl=xl Xor ctx.p(round_nr+1)
xl1=xl
xr1=xr
End Function
Function Blowfish_Decrypt(ByRef ctx As blowfish_ctx,ByRef xl1 As UInteger, ByRef xr1 As UInteger) As UInteger
Dim As UInteger xr,xl,temp,i
xl=xl1
xr=xr1
For i=round_nr+1 To 2 Step -1
xl=xl Xor ctx.p(i)
xr=F(ctx,xl) Xor xr
temp=xl
xl=xr
xr=temp
Next
temp=xl
xl=xr
xr=temp
xr=xr Xor ctx.p(1)
xl=xl Xor ctx.p(0)
xl1=xl
xr1=xr
End Function
Function blowfish_init(ByRef ctx As blowfish_ctx,ekey As String) As UInteger
Dim As UInteger i,j,k
Dim As UInteger edata,ldata,rdata,keylen
keylen=Len(ekey)
For i=0 To 3
For j=0 To 255
ctx.s(i,j)=orig_s(i,j)
Next
Next
j=0
For i=0 To round_nr+1
edata=&h00000000
For k=0 To 3
edata=(edata Shl 8) Or ekey[j]
j+=1
If j=keylen Then j=0
Next
ctx.p(i)=orig_p(i) Xor edata
Next
ldata=&h00000000
rdata=ldata
For i=0 To round_nr+1 Step 2
Blowfish_Encrypt(ctx,ldata,rdata)
ctx.p(i)=ldata
ctx.p(i+1)=rdata
Next
For i=0 To 3
For j=0 To 255 Step 2
Blowfish_Encrypt(ctx,ldata,rdata)
ctx.s(i,j)=ldata
ctx.s(i,j+1)=rdata
Next
Next
Return 0
End Function
Function orig_p(i As UInteger) As UInteger
Dim As UInteger p(18)={&h243F6A88, &h85A308D3, &h13198A2E, &h03707344, _
&hA4093822, &h299F31D0, &h082EFA98, &hEC4E6C89, _
&h452821E6, &h38D01377, &hBE5466CF, &h34E90C6C, _
&hC0AC29B7, &hC97C50DD, &h3F84D5B5, &hB5470917, _
&h9216D5D9, &h8979FB1B}
Return p(i)
End Function
Function orig_s(i As UInteger,j As UInteger) As UInteger
Dim As UInteger s1(256)={&hD1310BA6, &h98DFB5AC, &h2FFD72DB, &hD01ADFB7, _
&hB8E1AFED, &h6A267E96, &hBA7C9045, &hF12C7F99, _
&h24A19947, &hB3916CF7, &h0801F2E2, &h858EFC16, _
&h636920D8, &h71574E69, &hA458FEA3, &hF4933D7E, _
&h0D95748F, &h728EB658, &h718BCD58, &h82154AEE, _
&h7B54A41D, &hC25A59B5, &h9C30D539, &h2AF26013, _
&hC5D1B023, &h286085F0, &hCA417918, &hB8DB38EF, _
&h8E79DCB0, &h603A180E, &h6C9E0E8B, &hB01E8A3E, _
&hD71577C1, &hBD314B27, &h78AF2FDA, &h55605C60, _
&hE65525F3, &hAA55AB94, &h57489862, &h63E81440, _
&h55CA396A, &h2AAB10B6, &hB4CC5C34, &h1141E8CE, _
&hA15486AF, &h7C72E993, &hB3EE1411, &h636FBC2A, _
&h2BA9C55D, &h741831F6, &hCE5C3E16, &h9B87931E, _
&hAFD6BA33, &h6C24CF5C, &h7A325381, &h28958677, _
&h3B8F4898, &h6B4BB9AF, &hC4BFE81B, &h66282193, _
&h61D809CC, &hFB21A991, &h487CAC60, &h5DEC8032, _
&hEF845D5D, &hE98575B1, &hDC262302, &hEB651B88, _
&h23893E81, &hD396ACC5, &h0F6D6FF3, &h83F44239, _
&h2E0B4482, &hA4842004, &h69C8F04A, &h9E1F9B5E, _
&h21C66842, &hF6E96C9A, &h670C9C61, &hABD388F0, _
&h6A51A0D2, &hD8542F68, &h960FA728, &hAB5133A3, _
&h6EEF0B6C, &h137A3BE4, &hBA3BF050, &h7EFB2A98, _
&hA1F1651D, &h39AF0176, &h66CA593E, &h82430E88, _
&h8CEE8619, &h456F9FB4, &h7D84A5C3, &h3B8B5EBE, _
&hE06F75D8, &h85C12073, &h401A449F, &h56C16AA6, _
&h4ED3AA62, &h363F7706, &h1BFEDF72, &h429B023D, _
&h37D0D724, &hD00A1248, &hDB0FEAD3, &h49F1C09B, _
&h075372C9, &h80991B7B, &h25D479D8, &hF6E8DEF7, _
&hE3FE501A, &hB6794C3B, &h976CE0BD, &h04C006BA, _
&hC1A94FB6, &h409F60C4, &h5E5C9EC2, &h196A2463, _
&h68FB6FAF, &h3E6C53B5, &h1339B2EB, &h3B52EC6F, _
&h6DFC511F, &h9B30952C, &hCC814544, &hAF5EBD09, _
&hBEE3D004, &hDE334AFD, &h660F2807, &h192E4BB3, _
&hC0CBA857, &h45C8740F, &hD20B5F39, &hB9D3FBDB, _
&h5579C0BD, &h1A60320A, &hD6A100C6, &h402C7279, _
&h679F25FE, &hFB1FA3CC, &h8EA5E9F8, &hDB3222F8, _
&h3C7516DF, &hFD616B15, &h2F501EC8, &hAD0552AB, _
&h323DB5FA, &hFD238760, &h53317B48, &h3E00DF82, _
&h9E5C57BB, &hCA6F8CA0, &h1A87562E, &hDF1769DB, _
&hD542A8F6, &h287EFFC3, &hAC6732C6, &h8C4F5573, _
&h695B27B0, &hBBCA58C8, &hE1FFA35D, &hB8F011A0, _
&h10FA3D98, &hFD2183B8, &h4AFCB56C, &h2DD1D35B, _
&h9A53E479, &hB6F84565, &hD28E49BC, &h4BFB9790, _
&hE1DDF2DA, &hA4CB7E33, &h62FB1341, &hCEE4C6E8, _
&hEF20CADA, &h36774C01, &hD07E9EFE, &h2BF11FB4, _
&h95DBDA4D, &hAE909198, &hEAAD8E71, &h6B93D5A0, _
&hD08ED1D0, &hAFC725E0, &h8E3C5B2F, &h8E7594B7, _
&h8FF6E2FB, &hF2122B64, &h8888B812, &h900DF01C, _
&h4FAD5EA0, &h688FC31C, &hD1CFF191, &hB3A8C1AD, _
&h2F2F2218, &hBE0E1777, &hEA752DFE, &h8B021FA1, _
&hE5A0CC0F, &hB56F74E8, &h18ACF3D6, &hCE89E299, _
&hB4A84FE0, &hFD13E0B7, &h7CC43B81, &hD2ADA8D9, _
&h165FA266, &h80957705, &h93CC7314, &h211A1477, _
&hE6AD2065, &h77B5FA86, &hC75442F5, &hFB9D35CF, _
&hEBCDAF0C, &h7B3E89A0, &hD6411BD3, &hAE1E7E49, _
&h00250E2D, &h2071B35E, &h226800BB, &h57B8E0AF, _
&h2464369B, &hF009B91E, &h5563911D, &h59DFA6AA, _
&h78C14389, &hD95A537F, &h207D5BA2, &h02E5B9C5, _
&h83260376, &h6295CFA9, &h11C81968, &h4E734A41, _
&hB3472DCA, &h7B14A94A, &h1B510052, &h9A532915, _
&hD60F573F, &hBC9BC6E4, &h2B60A476, &h81E67400, _
&h08BA6FB5, &h571BE91F, &hF296EC6B, &h2A0DD915, _
&hB6636521, &hE7B9F9B6, &hFF34052E, &hC5855664, _
&h53B02D5D, &hA99F8FA1, &h08BA4799, &h6E85076A }
Dim As UInteger s2(256)={ &h4B7A70E9, &hB5B32944, &hDB75092E, &hC4192623, _
&hAD6EA6B0, &h49A7DF7D, &h9CEE60B8, &h8FEDB266, _
&hECAA8C71, &h699A17FF, &h5664526C, &hC2B19EE1, _
&h193602A5, &h75094C29, &hA0591340, &hE4183A3E, _
&h3F54989A, &h5B429D65, &h6B8FE4D6, &h99F73FD6, _
&hA1D29C07, &hEFE830F5, &h4D2D38E6, &hF0255DC1, _
&h4CDD2086, &h8470EB26, &h6382E9C6, &h021ECC5E, _
&h09686B3F, &h3EBAEFC9, &h3C971814, &h6B6A70A1, _
&h687F3584, &h52A0E286, &hB79C5305, &hAA500737, _
&h3E07841C, &h7FDEAE5C, &h8E7D44EC, &h5716F2B8, _
&hB03ADA37, &hF0500C0D, &hF01C1F04, &h0200B3FF, _
&hAE0CF51A, &h3CB574B2, &h25837A58, &hDC0921BD, _
&hD19113F9, &h7CA92FF6, &h94324773, &h22F54701, _
&h3AE5E581, &h37C2DADC, &hC8B57634, &h9AF3DDA7, _
&hA9446146, &h0FD0030E, &hECC8C73E, &hA4751E41, _
&hE238CD99, &h3BEA0E2F, &h3280BBA1, &h183EB331, _
&h4E548B38, &h4F6DB908, &h6F420D03, &hF60A04BF, _
&h2CB81290, &h24977C79, &h5679B072, &hBCAF89AF, _
&hDE9A771F, &hD9930810, &hB38BAE12, &hDCCF3F2E, _
&h5512721F, &h2E6B7124, &h501ADDE6, &h9F84CD87, _ _
&h7A584718, &h7408DA17, &hBC9F9ABC, &hE94B7D8C, _
&hEC7AEC3A, &hDB851DFA, &h63094366, &hC464C3D2, _
&hEF1C1847, &h3215D908, &hDD433B37, &h24C2BA16, _
&h12A14D43, &h2A65C451, &h50940002, &h133AE4DD, _
&h71DFF89E, &h10314E55, &h81AC77D6, &h5F11199B, _
&h043556F1, &hD7A3C76B, &h3C11183B, &h5924A509, _
&hF28FE6ED, &h97F1FBFA, &h9EBABF2C, &h1E153C6E, _
&h86E34570, &hEAE96FB1, &h860E5E0A, &h5A3E2AB3, _
&h771FE71C, &h4E3D06FA, &h2965DCB9, &h99E71D0F, _
&h803E89D6, &h5266C825, &h2E4CC978, &h9C10B36A, _
&hC6150EBA, &h94E2EA78, &hA5FC3C53, &h1E0A2DF4, _
&hF2F74EA7, &h361D2B3D, &h1939260F, &h19C27960, _
&h5223A708, &hF71312B6, &hEBADFE6E, &hEAC31F66, _
&hE3BC4595, &hA67BC883, &hB17F37D1, &h018CFF28, _
&hC332DDEF, &hBE6C5AA5, &h65582185, &h68AB9802, _
&hEECEA50F, &hDB2F953B, &h2AEF7DAD, &h5B6E2F84, _
&h1521B628, &h29076170, &hECDD4775, &h619F1510, _
&h13CCA830, &hEB61BD96, &h0334FE1E, &hAA0363CF, _
&hB5735C90, &h4C70A239, &hD59E9E0B, &hCBAADE14, _
&hEECC86BC, &h60622CA7, &h9CAB5CAB, &hB2F3846E, _
&h648B1EAF, &h19BDF0CA, &hA02369B9, &h655ABB50, _
&h40685A32, &h3C2AB4B3, &h319EE9D5, &hC021B8F7, _
&h9B540B19, &h875FA099, &h95F7997E, &h623D7DA8, _
&hF837889A, &h97E32D77, &h11ED935F, &h16681281, _
&h0E358829, &hC7E61FD6, &h96DEDFA1, &h7858BA99, _
&h57F584A5, &h1B227263, &h9B83C3FF, &h1AC24696, _
&hCDB30AEB, &h532E3054, &h8FD948E4, &h6DBC3128, _
&h58EBF2EF, &h34C6FFEA, &hFE28ED61, &hEE7C3C73, _
&h5D4A14D9, &hE864B7E3, &h42105D14, &h203E13E0, _
&h45EEE2B6, &hA3AAABEA, &hDB6C4F15, &hFACB4FD0, _
&hC742F442, &hEF6ABBB5, &h654F3B1D, &h41CD2105, _
&hD81E799E, &h86854DC7, &hE44B476A, &h3D816250, _
&hCF62A1F2, &h5B8D2646, &hFC8883A0, &hC1C7B6A3, _
&h7F1524C3, &h69CB7492, &h47848A0B, &h5692B285, _
&h095BBF00, &hAD19489D, &h1462B174, &h23820E00, _
&h58428D2A, &h0C55F5EA, &h1DADF43E, &h233F7061, _
&h3372F092, &h8D937E41, &hD65FECF1, &h6C223BDB, _
&h7CDE3759, &hCBEE7460, &h4085F2A7, &hCE77326E, _
&hA6078084, &h19F8509E, &hE8EFD855, &h61D99735, _
&hA969A7AA, &hC50C06C2, &h5A04ABFC, &h800BCADC, _
&h9E447A2E, &hC3453484, &hFDD56705, &h0E1E9EC9, _
&hDB73DBD3, &h105588CD, &h675FDA79, &hE3674340, _
&hC5C43465, &h713E38D8, &h3D28F89E, &hF16DFF20, _
&h153E21E7, &h8FB03D4A, &hE6E39F2B, &hDB83ADF7}
Dim As UInteger s3(256)={ &hE93D5A68, &h948140F7, &hF64C261C, &h94692934, _
&h411520F7, &h7602D4F7, &hBCF46B2E, &hD4A20068, _
&hD4082471, &h3320F46A, &h43B7D4B7, &h500061AF, _
&h1E39F62E, &h97244546, &h14214F74, &hBF8B8840, _
&h4D95FC1D, &h96B591AF, &h70F4DDD3, &h66A02F45, _
&hBFBC09EC, &h03BD9785, &h7FAC6DD0, &h31CB8504, _
&h96EB27B3, &h55FD3941, &hDA2547E6, &hABCA0A9A, _
&h28507825, &h530429F4, &h0A2C86DA, &hE9B66DFB, _
&h68DC1462, &hD7486900, &h680EC0A4, &h27A18DEE, _
&h4F3FFEA2, &hE887AD8C, &hB58CE006, &h7AF4D6B6, _
&hAACE1E7C, &hD3375FEC, &hCE78A399, &h406B2A42, _
&h20FE9E35, &hD9F385B9, &hEE39D7AB, &h3B124E8B, _
&h1DC9FAF7, &h4B6D1856, &h26A36631, &hEAE397B2, _
&h3A6EFA74, &hDD5B4332, &h6841E7F7, &hCA7820FB, _
&hFB0AF54E, &hD8FEB397, &h454056AC, &hBA489527, _
&h55533A3A, &h20838D87, &hFE6BA9B7, &hD096954B, _
&h55A867BC, &hA1159A58, &hCCA92963, &h99E1DB33, _
&hA62A4A56, &h3F3125F9, &h5EF47E1C, &h9029317C, _
&hFDF8E802, &h04272F70, &h80BB155C, &h05282CE3, _
&h95C11548, &hE4C66D22, &h48C1133F, &hC70F86DC, _
&h07F9C9EE, &h41041F0F, &h404779A4, &h5D886E17, _
&h325F51EB, &hD59BC0D1, &hF2BCC18F, &h41113564, _
&h257B7834, &h602A9C60, &hDFF8E8A3, &h1F636C1B, _
&h0E12B4C2, &h02E1329E, &hAF664FD1, &hCAD18115, _
&h6B2395E0, &h333E92E1, &h3B240B62, &hEEBEB922, _
&h85B2A20E, &hE6BA0D99, &hDE720C8C, &h2DA2F728, _
&hD0127845, &h95B794FD, &h647D0862, &hE7CCF5F0, _
&h5449A36F, &h877D48FA, &hC39DFD27, &hF33E8D1E, _
&h0A476341, &h992EFF74, &h3A6F6EAB, &hF4F8FD37, _
&hA812DC60, &hA1EBDDF8, &h991BE14C, &hDB6E6B0D, _
&hC67B5510, &h6D672C37, &h2765D43B, &hDCD0E804, _
&hF1290DC7, &hCC00FFA3, &hB5390F92, &h690FED0B, _
&h667B9FFB, &hCEDB7D9C, &hA091CF0B, &hD9155EA3, _
&hBB132F88, &h515BAD24, &h7B9479BF, &h763BD6EB, _
&h37392EB3, &hCC115979, &h8026E297, &hF42E312D, _
&h6842ADA7, &hC66A2B3B, &h12754CCC, &h782EF11C, _
&h6A124237, &hB79251E7, &h06A1BBE6, &h4BFB6350, _
&h1A6B1018, &h11CAEDFA, &h3D25BDD8, &hE2E1C3C9, _
&h44421659, &h0A121386, &hD90CEC6E, &hD5ABEA2A, _
&h64AF674E, &hDA86A85F, &hBEBFE988, &h64E4C3FE, _
&h9DBC8057, &hF0F7C086, &h60787BF8, &h6003604D, _
&hD1FD8346, &hF6381FB0, &h7745AE04, &hD736FCCC, _
&h83426B33, &hF01EAB71, &hB0804187, &h3C005E5F, _
&h77A057BE, &hBDE8AE24, &h55464299, &hBF582E61, _
&h4E58F48F, &hF2DDFDA2, &hF474EF38, &h8789BDC2, _
&h5366F9C3, &hC8B38E74, &hB475F255, &h46FCD9B9, _
&h7AEB2661, &h8B1DDF84, &h846A0E79, &h915F95E2, _
&h466E598E, &h20B45770, &h8CD55591, &hC902DE4C, _
&hB90BACE1, &hBB8205D0, &h11A86248, &h7574A99E, _
&hB77F19B6, &hE0A9DC09, &h662D09A1, &hC4324633, _
&hE85A1F02, &h09F0BE8C, &h4A99A025, &h1D6EFE10, _
&h1AB93D1D, &h0BA5A4DF, &hA186F20F, &h2868F169, _
&hDCB7DA83, &h573906FE, &hA1E2CE9B, &h4FCD7F52, _
&h50115E01, &hA70683FA, &hA002B5C4, &h0DE6D027, _
&h9AF88C27, &h773F8641, &hC3604C06, &h61A806B5, _
&hF0177A28, &hC0F586E0, &h006058AA, &h30DC7D62, _
&h11E69ED7, &h2338EA63, &h53C2DD94, &hC2C21634, _
&hBBCBEE56, &h90BCB6DE, &hEBFC7DA1, &hCE591D76, _
&h6F05E409, &h4B7C0188, &h39720A3D, &h7C927C24, _
&h86E3725F, &h724D9DB9, &h1AC15BB4, &hD39EB8FC, _
&hED545578, &h08FCA5B5, &hD83D7CD3, &h4DAD0FC4, _
&h1E50EF5E, &hB161E6F8, &hA28514D9, &h6C51133C, _
&h6FD5C7E7, &h56E14EC4, &h362ABFCE, &hDDC6C837, _
&hD79A3234, &h92638212, &h670EFA8E, &h406000E0 }
Dim As UInteger s4(256)={ &h3A39CE37, &hD3FAF5CF, &hABC27737, &h5AC52D1B, _
&h5CB0679E, &h4FA33742, &hD3822740, &h99BC9BBE, _
&hD5118E9D, &hBF0F7315, &hD62D1C7E, &hC700C47B, _
&hB78C1B6B, &h21A19045, &hB26EB1BE, &h6A366EB4, _
&h5748AB2F, &hBC946E79, &hC6A376D2, &h6549C2C8, _
&h530FF8EE, &h468DDE7D, &hD5730A1D, &h4CD04DC6, _
&h2939BBDB, &hA9BA4650, &hAC9526E8, &hBE5EE304, _
&hA1FAD5F0, &h6A2D519A, &h63EF8CE2, &h9A86EE22, _
&hC089C2B8, &h43242EF6, &hA51E03AA, &h9CF2D0A4, _
&h83C061BA, &h9BE96A4D, &h8FE51550, &hBA645BD6, _
&h2826A2F9, &hA73A3AE1, &h4BA99586, &hEF5562E9, _
&hC72FEFD3, &hF752F7DA, &h3F046F69, &h77FA0A59, _
&h80E4A915, &h87B08601, &h9B09E6AD, &h3B3EE593, _
&hE990FD5A, &h9E34D797, &h2CF0B7D9, &h022B8B51, _
&h96D5AC3A, &h017DA67D, &hD1CF3ED6, &h7C7D2D28, _
&h1F9F25CF, &hADF2B89B, &h5AD6B472, &h5A88F54C, _
&hE029AC71, &hE019A5E6, &h47B0ACFD, &hED93FA9B, _
&hE8D3C48D, &h283B57CC, &hF8D56629, &h79132E28, _
&h785F0191, &hED756055, &hF7960E44, &hE3D35E8C, _
&h15056DD4, &h88F46DBA, &h03A16125, &h0564F0BD, _
&hC3EB9E15, &h3C9057A2, &h97271AEC, &hA93A072A, _
&h1B3F6D9B, &h1E6321F5, &hF59C66FB, &h26DCF319, _
&h7533D928, &hB155FDF5, &h03563482, &h8ABA3CBB, _
&h28517711, &hC20AD9F8, &hABCC5167, &hCCAD925F, _
&h4DE81751, &h3830DC8E, &h379D5862, &h9320F991, _
&hEA7A90C2, &hFB3E7BCE, &h5121CE64, &h774FBE32, _
&hA8B6E37E, &hC3293D46, &h48DE5369, &h6413E680, _
&hA2AE0810, &hDD6DB224, &h69852DFD, &h09072166, _ _
&hB39A460A, &h6445C0DD, &h586CDECF, &h1C20C8AE, _
&h5BBEF7DD, &h1B588D40, &hCCD2017F, &h6BB4E3BB, _
&hDDA26A7E, &h3A59FF45, &h3E350A44, &hBCB4CDD5, _
&h72EACEA8, &hFA6484BB, &h8D6612AE, &hBF3C6F47, _
&hD29BE463, &h542F5D9E, &hAEC2771B, &hF64E6370, _
&h740E0D8D, &hE75B1357, &hF8721671, &hAF537D5D, _
&h4040CB08, &h4EB4E2CC, &h34D2466A, &h0115AF84, _
&hE1B00428, &h95983A1D, &h06B89FB4, &hCE6EA048, _
&h6F3F3B82, &h3520AB82, &h011A1D4B, &h277227F8, _
&h611560B1, &hE7933FDC, &hBB3A792B, &h344525BD, _
&hA08839E1, &h51CE794B, &h2F32C9B7, &hA01FBAC9, _
&hE01CC87E, &hBCC7D1F6, &hCF0111C3, &hA1E8AAC7, _
&h1A908749, &hD44FBD9A, &hD0DADECB, &hD50ADA38, _
&h0339C32A, &hC6913667, &h8DF9317C, &hE0B12B4F, _
&hF79E59B7, &h43F5BB3A, &hF2D519FF, &h27D9459C, _
&hBF97222C, &h15E6FC2A, &h0F91FC71, &h9B941525, _
&hFAE59361, &hCEB69CEB, &hC2A86459, &h12BAA8D1, _
&hB6C1075E, &hE3056A0C, &h10D25065, &hCB03A442, _
&hE0EC6E0E, &h1698DB3B, &h4C98A0BE, &h3278E964, _
&h9F1F9532, &hE0D392DF, &hD3A0342B, &h8971F21E, _
&h1B0A7441, &h4BA3348C, &hC5BE7120, &hC37632D8, _
&hDF359F8D, &h9B992F2E, &hE60B6F47, &h0FE3F11D, _
&hE54CDA54, &h1EDAD891, &hCE6279CF, &hCD3E7E6F, _
&h1618B166, &hFD2C1D05, &h848FD2C5, &hF6FB2299, _
&hF523F357, &hA6327623, &h93A83531, &h56CCCD02, _
&hACF08162, &h5A75EBB5, &h6E163697, &h88D273CC, _
&hDE966292, &h81B949D0, &h4C50901B, &h71C65614, _
&hE6C6C7BD, &h327A140A, &h45E1D006, &hC3F27B9A, _
&hC9AA53FD, &h62A80F00, &hBB25BFE2, &h35BDD2F6, _
&h71126905, &hB2040222, &hB6CBCF7C, &hCD769C2B, _
&h53113EC0, &h1640E3D3, &h38ABBD60, &h2547ADF0, _
&hBA38209C, &hF746CE76, &h77AFA1C5, &h20756060, _
&h85CBFE4E, &h8AE88DD8, &h7AAAF9B0, &h4CF9AA7E, _
&h1948C25C, &h02FB8A8C, &h01C36AE4, &hD6EBE1F9, _
&h90D4F869, &hA65CDEA0, &h3F09252D, &hC208E69F, _
&hB74E6132, &hCE77E25B, &h578FDFE3, &h3AC372E6 }
If i=0 Then
Return s1(j)
ElseIf i=1 Then
Return s2(j)
ElseIf i=2 Then
Return s3(j)
ElseIf i=3 Then
Return s4(j)
EndIf
End Function