Blowfish

BlitzMax Forums/BlitzMax Programming/Blowfish

Fun with a fast encryption algorithm...

So I was looking for an encryption algorithm for a custom server suite I am working on. It needed to be fast, in-line and relatively secure. After scouring the forums trying to find something, I got sick of searching and converted this from a C source. I thought I'd share it with you.

I made it into a type so multiple instances of Blowfish could be attached to clients connecting to a server, specifically, updating each client using the connection list to send/receive and process a few data chunks every cycle.

First, the include...

Rem
Original algorithm: Bruce Schneier
Conversion: Paul Kocher
BlitzMax version: Queller
End Rem

Type TBlowfish

	Field P:Long[] 
	Field S:Long[][]
	Field key:String
	
	Function assign:TBlowfish(key:String)
		Local fish:TBlowfish = New TBlowfish
		fish.P = fish.P[ .. 18]
		fish.S = fish.S[ .. 4]
			For Local t:Int = 0 Until 4
				fish.S[t] = fish.S[t][..256]
			Next
		fish.key = key
		fish.init(key)
		Return fish
	End Function

	Method F:Long(x:Long)

	   	Local a:Short, b:Short, c:Short, d:Short
	   	Local y:Long
	
	   	d = x & $FF
		x = (x Shr 8)
	   	c = x & $FF
	   	x = (x Shr 8)
	   	b = x & $FF
	   	x = (x Shr 8)
	   	a = x & $FF
	   	y = Self.S[0][a] + Self.S[1][b]
	   	y = y~Self.S[2][c]
	   	y = y+Self.S[3][d]
		Return y
	
	End Method

	Method Encrypt(xxl:Long Var, xxr:Long Var)
	
		Local Xl:Long, Xr:Long, temp:Long		
		
		Xl = xxl
		Xr = xxr
		
		For Local i:Int = 0 Until 16
			Xl = Xl~(Self.P[i])
			Xr = F(Xl)~Xr
			
			temp = Xl
			Xl = Xr
			Xr = temp
		Next
		
		temp = Xl
		Xl = Xr
		Xr = temp
		
		Xr = Xr~Self.P[16]
		Xl = Xl~Self.P[17]
		
		xxl = Xl
		xxr = Xr	
	End Method

	Method Decrypt(xxl:Long Var, xxr:Long Var)
	
		Local Xl:Long, Xr:Long, temp:Long 
		
		Xl = xxl
		Xr = xxr
		
		For Local i:Int = 17 Until 1 Step -1
			Xl = Xl~Self.P[i]
			Xr = F(Xl)~Xr
			
			temp = Xl
			Xl = Xr
			Xr = temp
		Next
		
		temp = Xl
		Xl = Xr
		Xr = temp
		
		Xr = Xr~(Self.P[1])
		Xl = Xl~(Self.P[0])
		
		xxl = Xl
		xxr = Xr	
	End Method

	Method Init(key:String)
		Local keylen:Int = Len(key)
			If keylen > 56 Print "Maximum key length exceeded... Truncating"; key = Mid(key, 1, 56)
			
		Local i:Int, j:Int, k:Int
		Local data:Long, datal:Long, datar:Long
	
		For i = 0 Until 4
			For j = 0 Until 256
				Self.S[i][j] = ORIG_S[i][j]
			Next
		Next	
	
		j = 0
	
		For i = 0 Until 18
		data = $0
			For k = 0 Until 4
				data = ((data Shl 8) | Asc(Mid(key, j+1, 1)))
				 j:+1
				If (j >= keyLen) Then j = 0
			Next
		Self.P[i] = (ORIG_P[i])~data
		Next
	
		datal = $0
		datar = $0
	
		For i = 0 Until 18 Step 2
			Encrypt(datal, datar)
			Self.P[i] = datal
			Self.P[i + 1] = datar
		Next
	
		For i = 0 Until 4
			For j = 0 Until 256 Step 2
				Encrypt(datal, datar)
				Self.S[i][j] = datal
				Self.S[i][j + 1] = datar
			Next
		Next	
	End Method

End Type

	Global	ORIG_P[]=[$243F6A88, $85A308D3, $13198A2E, $03707344,..
	  		$A4093822, $299F31D0, $082EFA98, $EC4E6C89,..
			$452821E6, $38D01377, $BE5466CF, $34E90C6C,..
			$C0AC29B7, $C97C50DD, $3F84D5B5, $B5470917,..
			$9216D5D9, $8979FB1B]
		
	Global	ORIG_S[][]=[[$D1310BA6, $98DFB5AC, $2FFD72DB, $D01ADFB7,..
			        $B8E1AFED, $6A267E96, $BA7C9045, $F12C7F99,..
			        $24A19947, $B3916CF7, $0801F2E2, $858EFC16,..
			        $636920D8, $71574E69, $A458FEA3, $F4933D7E,..
			        $0D95748F, $728EB658, $718BCD58, $82154AEE,..
			        $7B54A41D, $C25A59B5, $9C30D539, $2AF26013,..
			        $C5D1B023, $286085F0, $CA417918, $B8DB38EF,..
			        $8E79DCB0, $603A180E, $6C9E0E8B, $B01E8A3E,..
			        $D71577C1, $BD314B27, $78AF2FDA, $55605C60,..
			        $E65525F3, $AA55AB94, $57489862, $63E81440,..
			        $55CA396A, $2AAB10B6, $B4CC5C34, $1141E8CE,..
			        $A15486AF, $7C72E993, $B3EE1411, $636FBC2A,..
			        $2BA9C55D, $741831F6, $CE5C3E16, $9B87931E,..
			        $AFD6BA33, $6C24CF5C, $7A325381, $28958677,..
			        $3B8F4898, $6B4BB9AF, $C4BFE81B, $66282193,..
			        $61D809CC, $FB21A991, $487CAC60, $5DEC8032,..
			        $EF845D5D, $E98575B1, $DC262302, $EB651B88,..
			        $23893E81, $D396ACC5, $0F6D6FF3, $83F44239,..
			        $2E0B4482, $A4842004, $69C8F04A, $9E1F9B5E,..
			        $21C66842, $F6E96C9A, $670C9C61, $ABD388F0,..
			        $6A51A0D2, $D8542F68, $960FA728, $AB5133A3,..
			        $6EEF0B6C, $137A3BE4, $BA3BF050, $7EFB2A98,..
			        $A1F1651D, $39AF0176, $66CA593E, $82430E88,..
			        $8CEE8619, $456F9FB4, $7D84A5C3, $3B8B5EBE,..
			        $E06F75D8, $85C12073, $401A449F, $56C16AA6,..
			        $4ED3AA62, $363F7706, $1BFEDF72, $429B023D,..
			        $37D0D724, $D00A1248, $DB0FEAD3, $49F1C09B,..
			        $075372C9, $80991B7B, $25D479D8, $F6E8DEF7,..
			        $E3FE501A, $B6794C3B, $976CE0BD, $04C006BA,..
			        $C1A94FB6, $409F60C4, $5E5C9EC2, $196A2463,..
			        $68FB6FAF, $3E6C53B5, $1339B2EB, $3B52EC6F,..
			        $6DFC511F, $9B30952C, $CC814544, $AF5EBD09,..
			        $BEE3D004, $DE334AFD, $660F2807, $192E4BB3,..
			        $C0CBA857, $45C8740F, $D20B5F39, $B9D3FBDB,..
			        $5579C0BD, $1A60320A, $D6A100C6, $402C7279,..
			        $679F25FE, $FB1FA3CC, $8EA5E9F8, $DB3222F8,..
			        $3C7516DF, $FD616B15, $2F501EC8, $AD0552AB,..
			        $323DB5FA, $FD238760, $53317B48, $3E00DF82,..
			        $9E5C57BB, $CA6F8CA0, $1A87562E, $DF1769DB,..
			        $D542A8F6, $287EFFC3, $AC6732C6, $8C4F5573,..
			        $695B27B0, $BBCA58C8, $E1FFA35D, $B8F011A0,..
			        $10FA3D98, $FD2183B8, $4AFCB56C, $2DD1D35B,..
			        $9A53E479, $B6F84565, $D28E49BC, $4BFB9790,..
			        $E1DDF2DA, $A4CB7E33, $62FB1341, $CEE4C6E8,..
			        $EF20CADA, $36774C01, $D07E9EFE, $2BF11FB4,..
			        $95DBDA4D, $AE909198, $EAAD8E71, $6B93D5A0,..
			        $D08ED1D0, $AFC725E0, $8E3C5B2F, $8E7594B7,..
			        $8FF6E2FB, $F2122B64, $8888B812, $900DF01C,..
			        $4FAD5EA0, $688FC31C, $D1CFF191, $B3A8C1AD,..
			        $2F2F2218, $BE0E1777, $EA752DFE, $8B021FA1,..
			        $E5A0CC0F, $B56F74E8, $18ACF3D6, $CE89E299,..
			        $B4A84FE0, $FD13E0B7, $7CC43B81, $D2ADA8D9,..
			        $165FA266, $80957705, $93CC7314, $211A1477,..
			        $E6AD2065, $77B5FA86, $C75442F5, $FB9D35CF,..
			        $EBCDAF0C, $7B3E89A0, $D6411BD3, $AE1E7E49,..
			        $00250E2D, $2071B35E, $226800BB, $57B8E0AF,..
			        $2464369B, $F009B91E, $5563911D, $59DFA6AA,..
			        $78C14389, $D95A537F, $207D5BA2, $02E5B9C5,..
			        $83260376, $6295CFA9, $11C81968, $4E734A41,..
			        $B3472DCA, $7B14A94A, $1B510052, $9A532915,..
			        $D60F573F, $BC9BC6E4, $2B60A476, $81E67400,..
			        $08BA6FB5, $571BE91F, $F296EC6B, $2A0DD915,..
			        $B6636521, $E7B9F9B6, $FF34052E, $C5855664,..
			        $53B02D5D, $A99F8FA1, $08BA4799, $6E85076A   ],..
			    [   $4B7A70E9, $B5B32944, $DB75092E, $C4192623,..
			        $AD6EA6B0, $49A7DF7D, $9CEE60B8, $8FEDB266,..
			        $ECAA8C71, $699A17FF, $5664526C, $C2B19EE1,..
			        $193602A5, $75094C29, $A0591340, $E4183A3E,..
			        $3F54989A, $5B429D65, $6B8FE4D6, $99F73FD6,..
			        $A1D29C07, $EFE830F5, $4D2D38E6, $F0255DC1,..
			        $4CDD2086, $8470EB26, $6382E9C6, $021ECC5E,..
			        $09686B3F, $3EBAEFC9, $3C971814, $6B6A70A1,..
			        $687F3584, $52A0E286, $B79C5305, $AA500737,..
			        $3E07841C, $7FDEAE5C, $8E7D44EC, $5716F2B8,..
			        $B03ADA37, $F0500C0D, $F01C1F04, $0200B3FF,..
			        $AE0CF51A, $3CB574B2, $25837A58, $DC0921BD,..
			        $D19113F9, $7CA92FF6, $94324773, $22F54701,..
			        $3AE5E581, $37C2DADC, $C8B57634, $9AF3DDA7,..
			        $A9446146, $0FD0030E, $ECC8C73E, $A4751E41,..
			        $E238CD99, $3BEA0E2F, $3280BBA1, $183EB331,..
			        $4E548B38, $4F6DB908, $6F420D03, $F60A04BF,..
			        $2CB81290, $24977C79, $5679B072, $BCAF89AF,..
			        $DE9A771F, $D9930810, $B38BAE12, $DCCF3F2E,..
			        $5512721F, $2E6B7124, $501ADDE6, $9F84CD87,..
			        $7A584718, $7408DA17, $BC9F9ABC, $E94B7D8C,..
			        $EC7AEC3A, $DB851DFA, $63094366, $C464C3D2,..
			        $EF1C1847, $3215D908, $DD433B37, $24C2BA16,..
			        $12A14D43, $2A65C451, $50940002, $133AE4DD,..
			        $71DFF89E, $10314E55, $81AC77D6, $5F11199B,..
			        $043556F1, $D7A3C76B, $3C11183B, $5924A509,..
			        $F28FE6ED, $97F1FBFA, $9EBABF2C, $1E153C6E,..
			        $86E34570, $EAE96FB1, $860E5E0A, $5A3E2AB3,..
			        $771FE71C, $4E3D06FA, $2965DCB9, $99E71D0F,..
			        $803E89D6, $5266C825, $2E4CC978, $9C10B36A,..
			        $C6150EBA, $94E2EA78, $A5FC3C53, $1E0A2DF4,..
			        $F2F74EA7, $361D2B3D, $1939260F, $19C27960,..
			        $5223A708, $F71312B6, $EBADFE6E, $EAC31F66,..
			        $E3BC4595, $A67BC883, $B17F37D1, $018CFF28,..
			        $C332DDEF, $BE6C5AA5, $65582185, $68AB9802,..
			        $EECEA50F, $DB2F953B, $2AEF7DAD, $5B6E2F84,..
			        $1521B628, $29076170, $ECDD4775, $619F1510,..
			        $13CCA830, $EB61BD96, $0334FE1E, $AA0363CF,..
			        $B5735C90, $4C70A239, $D59E9E0B, $CBAADE14,..
			        $EECC86BC, $60622CA7, $9CAB5CAB, $B2F3846E,..
			        $648B1EAF, $19BDF0CA, $A02369B9, $655ABB50,..
			        $40685A32, $3C2AB4B3, $319EE9D5, $C021B8F7,..
			        $9B540B19, $875FA099, $95F7997E, $623D7DA8,..
			        $F837889A, $97E32D77, $11ED935F, $16681281,..
			        $0E358829, $C7E61FD6, $96DEDFA1, $7858BA99,..
			        $57F584A5, $1B227263, $9B83C3FF, $1AC24696,..
			        $CDB30AEB, $532E3054, $8FD948E4, $6DBC3128,..
			        $58EBF2EF, $34C6FFEA, $FE28ED61, $EE7C3C73,..
			        $5D4A14D9, $E864B7E3, $42105D14, $203E13E0,..
			        $45EEE2B6, $A3AAABEA, $DB6C4F15, $FACB4FD0,..
			        $C742F442, $EF6ABBB5, $654F3B1D, $41CD2105,..
			        $D81E799E, $86854DC7, $E44B476A, $3D816250,..
			        $CF62A1F2, $5B8D2646, $FC8883A0, $C1C7B6A3,..
			        $7F1524C3, $69CB7492, $47848A0B, $5692B285,..
			        $095BBF00, $AD19489D, $1462B174, $23820E00,..
			        $58428D2A, $0C55F5EA, $1DADF43E, $233F7061,..
			        $3372F092, $8D937E41, $D65FECF1, $6C223BDB,..
			        $7CDE3759, $CBEE7460, $4085F2A7, $CE77326E,..
			        $A6078084, $19F8509E, $E8EFD855, $61D99735,..
			        $A969A7AA, $C50C06C2, $5A04ABFC, $800BCADC,..
			        $9E447A2E, $C3453484, $FDD56705, $0E1E9EC9,..
			        $DB73DBD3, $105588CD, $675FDA79, $E3674340,..
			        $C5C43465, $713E38D8, $3D28F89E, $F16DFF20,..
			        $153E21E7, $8FB03D4A, $E6E39F2B, $DB83ADF7   ],..
			    [   $E93D5A68, $948140F7, $F64C261C, $94692934,..
			        $411520F7, $7602D4F7, $BCF46B2E, $D4A20068,..
			        $D4082471, $3320F46A, $43B7D4B7, $500061AF,..
			        $1E39F62E, $97244546, $14214F74, $BF8B8840,..
			        $4D95FC1D, $96B591AF, $70F4DDD3, $66A02F45,..
			        $BFBC09EC, $03BD9785, $7FAC6DD0, $31CB8504,..
			        $96EB27B3, $55FD3941, $DA2547E6, $ABCA0A9A,..
			        $28507825, $530429F4, $0A2C86DA, $E9B66DFB,..
			        $68DC1462, $D7486900, $680EC0A4, $27A18DEE,..
			        $4F3FFEA2, $E887AD8C, $B58CE006, $7AF4D6B6,..
			        $AACE1E7C, $D3375FEC, $CE78A399, $406B2A42,..
			        $20FE9E35, $D9F385B9, $EE39D7AB, $3B124E8B,..
			        $1DC9FAF7, $4B6D1856, $26A36631, $EAE397B2,..
			        $3A6EFA74, $DD5B4332, $6841E7F7, $CA7820FB,..
			        $FB0AF54E, $D8FEB397, $454056AC, $BA489527,..
			        $55533A3A, $20838D87, $FE6BA9B7, $D096954B,..
			        $55A867BC, $A1159A58, $CCA92963, $99E1DB33,..
			        $A62A4A56, $3F3125F9, $5EF47E1C, $9029317C,..
			        $FDF8E802, $04272F70, $80BB155C, $05282CE3,..
			        $95C11548, $E4C66D22, $48C1133F, $C70F86DC,..
			        $07F9C9EE, $41041F0F, $404779A4, $5D886E17,..
			        $325F51EB, $D59BC0D1, $F2BCC18F, $41113564,..
			        $257B7834, $602A9C60, $DFF8E8A3, $1F636C1B,..
			        $0E12B4C2, $02E1329E, $AF664FD1, $CAD18115,..
			        $6B2395E0, $333E92E1, $3B240B62, $EEBEB922,..
			        $85B2A20E, $E6BA0D99, $DE720C8C, $2DA2F728,..
			        $D0127845, $95B794FD, $647D0862, $E7CCF5F0,..
			        $5449A36F, $877D48FA, $C39DFD27, $F33E8D1E,..
			        $0A476341, $992EFF74, $3A6F6EAB, $F4F8FD37,..
			        $A812DC60, $A1EBDDF8, $991BE14C, $DB6E6B0D,..
			        $C67B5510, $6D672C37, $2765D43B, $DCD0E804,..
			        $F1290DC7, $CC00FFA3, $B5390F92, $690FED0B,..
			        $667B9FFB, $CEDB7D9C, $A091CF0B, $D9155EA3,..
			        $BB132F88, $515BAD24, $7B9479BF, $763BD6EB,..
			        $37392EB3, $CC115979, $8026E297, $F42E312D,..
			        $6842ADA7, $C66A2B3B, $12754CCC, $782EF11C,..
			        $6A124237, $B79251E7, $06A1BBE6, $4BFB6350,..
			        $1A6B1018, $11CAEDFA, $3D25BDD8, $E2E1C3C9,..
			        $44421659, $0A121386, $D90CEC6E, $D5ABEA2A,..
			        $64AF674E, $DA86A85F, $BEBFE988, $64E4C3FE,..
			        $9DBC8057, $F0F7C086, $60787BF8, $6003604D,..
			        $D1FD8346, $F6381FB0, $7745AE04, $D736FCCC,..
			        $83426B33, $F01EAB71, $B0804187, $3C005E5F,..
			        $77A057BE, $BDE8AE24, $55464299, $BF582E61,..
			        $4E58F48F, $F2DDFDA2, $F474EF38, $8789BDC2,..
			        $5366F9C3, $C8B38E74, $B475F255, $46FCD9B9,..
			        $7AEB2661, $8B1DDF84, $846A0E79, $915F95E2,..
			        $466E598E, $20B45770, $8CD55591, $C902DE4C,..
			        $B90BACE1, $BB8205D0, $11A86248, $7574A99E,..
			        $B77F19B6, $E0A9DC09, $662D09A1, $C4324633,..
			        $E85A1F02, $09F0BE8C, $4A99A025, $1D6EFE10,..
			        $1AB93D1D, $0BA5A4DF, $A186F20F, $2868F169,..
			        $DCB7DA83, $573906FE, $A1E2CE9B, $4FCD7F52,..
			        $50115E01, $A70683FA, $A002B5C4, $0DE6D027,..
			        $9AF88C27, $773F8641, $C3604C06, $61A806B5,..
			        $F0177A28, $C0F586E0, $006058AA, $30DC7D62,..
			        $11E69ED7, $2338EA63, $53C2DD94, $C2C21634,..
			        $BBCBEE56, $90BCB6DE, $EBFC7DA1, $CE591D76,..
			        $6F05E409, $4B7C0188, $39720A3D, $7C927C24,..
			        $86E3725F, $724D9DB9, $1AC15BB4, $D39EB8FC,..
			        $ED545578, $08FCA5B5, $D83D7CD3, $4DAD0FC4,..
			        $1E50EF5E, $B161E6F8, $A28514D9, $6C51133C,..
			        $6FD5C7E7, $56E14EC4, $362ABFCE, $DDC6C837,..
			        $D79A3234, $92638212, $670EFA8E, $406000E0  ],..
			    [   $3A39CE37, $D3FAF5CF, $ABC27737, $5AC52D1B,..
			        $5CB0679E, $4FA33742, $D3822740, $99BC9BBE,..
			        $D5118E9D, $BF0F7315, $D62D1C7E, $C700C47B,..
			        $B78C1B6B, $21A19045, $B26EB1BE, $6A366EB4,..
			        $5748AB2F, $BC946E79, $C6A376D2, $6549C2C8,..
			        $530FF8EE, $468DDE7D, $D5730A1D, $4CD04DC6,..
			        $2939BBDB, $A9BA4650, $AC9526E8, $BE5EE304,..
			        $A1FAD5F0, $6A2D519A, $63EF8CE2, $9A86EE22,..
			        $C089C2B8, $43242EF6, $A51E03AA, $9CF2D0A4,..
			        $83C061BA, $9BE96A4D, $8FE51550, $BA645BD6,..
			        $2826A2F9, $A73A3AE1, $4BA99586, $EF5562E9,..
			        $C72FEFD3, $F752F7DA, $3F046F69, $77FA0A59,..
			        $80E4A915, $87B08601, $9B09E6AD, $3B3EE593,..
			        $E990FD5A, $9E34D797, $2CF0B7D9, $022B8B51,..
			        $96D5AC3A, $017DA67D, $D1CF3ED6, $7C7D2D28,..
			        $1F9F25CF, $ADF2B89B, $5AD6B472, $5A88F54C,..
			        $E029AC71, $E019A5E6, $47B0ACFD, $ED93FA9B,..
			        $E8D3C48D, $283B57CC, $F8D56629, $79132E28,..
			        $785F0191, $ED756055, $F7960E44, $E3D35E8C,..
			        $15056DD4, $88F46DBA, $03A16125, $0564F0BD,..
			        $C3EB9E15, $3C9057A2, $97271AEC, $A93A072A,..
			        $1B3F6D9B, $1E6321F5, $F59C66FB, $26DCF319,..
			        $7533D928, $B155FDF5, $03563482, $8ABA3CBB,..
			        $28517711, $C20AD9F8, $ABCC5167, $CCAD925F,..
			        $4DE81751, $3830DC8E, $379D5862, $9320F991,..
			        $EA7A90C2, $FB3E7BCE, $5121CE64, $774FBE32,..
			        $A8B6E37E, $C3293D46, $48DE5369, $6413E680,..
			        $A2AE0810, $DD6DB224, $69852DFD, $09072166,..
			        $B39A460A, $6445C0DD, $586CDECF, $1C20C8AE,..
			        $5BBEF7DD, $1B588D40, $CCD2017F, $6BB4E3BB,..
			        $DDA26A7E, $3A59FF45, $3E350A44, $BCB4CDD5,..
			        $72EACEA8, $FA6484BB, $8D6612AE, $BF3C6F47,..
			        $D29BE463, $542F5D9E, $AEC2771B, $F64E6370,..
			        $740E0D8D, $E75B1357, $F8721671, $AF537D5D,..
			        $4040CB08, $4EB4E2CC, $34D2466A, $0115AF84,..
			        $E1B00428, $95983A1D, $06B89FB4, $CE6EA048,..
			        $6F3F3B82, $3520AB82, $011A1D4B, $277227F8,..
			        $611560B1, $E7933FDC, $BB3A792B, $344525BD,..
			        $A08839E1, $51CE794B, $2F32C9B7, $A01FBAC9,..
			        $E01CC87E, $BCC7D1F6, $CF0111C3, $A1E8AAC7,..
			        $1A908749, $D44FBD9A, $D0DADECB, $D50ADA38,..
			        $0339C32A, $C6913667, $8DF9317C, $E0B12B4F,..
			        $F79E59B7, $43F5BB3A, $F2D519FF, $27D9459C,..
			        $BF97222C, $15E6FC2A, $0F91FC71, $9B941525,..
			        $FAE59361, $CEB69CEB, $C2A86459, $12BAA8D1,..
			        $B6C1075E, $E3056A0C, $10D25065, $CB03A442,..
			        $E0EC6E0E, $1698DB3B, $4C98A0BE, $3278E964,..
			        $9F1F9532, $E0D392DF, $D3A0342B, $8971F21E,..
			        $1B0A7441, $4BA3348C, $C5BE7120, $C37632D8,..
			        $DF359F8D, $9B992F2E, $E60B6F47, $0FE3F11D,..
			        $E54CDA54, $1EDAD891, $CE6279CF, $CD3E7E6F,..
			        $1618B166, $FD2C1D05, $848FD2C5, $F6FB2299,..
			        $F523F357, $A6327623, $93A83531, $56CCCD02,..
			        $ACF08162, $5A75EBB5, $6E163697, $88D273CC,..
			        $DE966292, $81B949D0, $4C50901B, $71C65614,..
			        $E6C6C7BD, $327A140A, $45E1D006, $C3F27B9A,..
			        $C9AA53FD, $62A80F00, $BB25BFE2, $35BDD2F6,..
			        $71126905, $B2040222, $B6CBCF7C, $CD769C2B,..
			        $53113EC0, $1640E3D3, $38ABBD60, $2547ADF0,..
			        $BA38209C, $F746CE76, $77AFA1C5, $20756060,..
			        $85CBFE4E, $8AE88DD8, $7AAAF9B0, $4CF9AA7E,..
			        $1948C25C, $02FB8A8C, $01C36AE4, $D6EBE1F9,..
			        $90D4F869, $A65CDEA0, $3F09252D, $C208E69F,..
			        $B74E6132, $CE77E25B, $578FDFE3, $3AC372E6  ]]


Then something to play with...

Rem

Blowfish, being a 64-bit block cipher, takes two 32-bit chunks and grinds them through a Feistel network. The two chunks start as consecutive Ints
in whatever source of information you are trying to encrypt. Blowfish then returns two Longs each containing the data you sent to it. You then send
these Longs to the intended destination. To decrypt, the exact opposite occurs - you read in two Longs to Blowfish and it returns two Ints in the
order they were encrypted.

This test reads data from a file stream encrypts the data and stores it temporarily in a bank and then decrypts the info to another file.

End Rem

Strict
Include "blowfishtype.bmx"

Local L:Long, R:Long								'need these to feed blowfish
Local bank:TBank
Local tempstream:TStream = CreateBankStream(bank)			'temporary storage
Local time1:Int, time2:Int

Local file0:TStream = ReadFile("noob.txt")					'some source
	If Not file0 RuntimeError("file not found")
Local file1:TStream = WriteFile("1337.txt")					'some destination

Local blowfish:TBlowfish = TBlowfish.assign("Hello, this is my key")	'start up blowfish

While Not Eof(file0)
L = ReadInt(file0)
R = ReadInt(file0)									'grab some data
blowfish.encrypt(L, R)								'encrypt
WriteLong(tempstream, L)
WriteLong(tempstream, R)								'spit out encrypted chunk to temporary storage, rinse and repeat until its all encrypted
Wend

CloseFile(file0)									'just to show nothing is coming from the original source

SeekStream(tempstream, 0)							'rewind the bank
While Not Eof(tempstream)
L = ReadLong(tempstream)
R = ReadLong(tempstream)							'read data from the bank

blowfish.decrypt(L, R)								'decrypt
WriteInt(file1, L)
WriteInt(file1, R)									'spit out contents from original file, but from encrypted temporary source
Wend
CloseFile(file1)


Does anyone have suggestions for optimization of the Blowfish code? I would appreciate any help offered.

Great ! i like it :)

I am thinking of making an encryption suite. It would have Blowfish, of course, Rijndael, RSA-2048 and Whirlpool, a hashing algorithm. They would be the raw algorithms for general use, as opposed to the typed version I fiddled with as above. I have a project that might use them, and I will make these available if there is enough interest. If not then I will not bother.

I'm interested.

I want it ! :) for sure !

or just open an https connection to the server?

Indiepath, what?? I am not sure I understand what you mean.

The idea behind the algorithms, for my purposes, is to deal with server-side operations only, for now at least.

The algorithms can be used to encrypt media, audio streams etc and doesn't even have to be network related, ie. the likes of https. Blowfish, as an example, is awesome for fast in-line encryption. I have played with scrambling VOIP packets and it works so fast its as if en/decryption isn't even happening!

Here is the untyped version of Blowfish.