Browse Source

+ Added blowfish units

git-svn-id: trunk@3599 -
michael 19 years ago
parent
commit
d93af200bc
6 changed files with 588 additions and 41 deletions
  1. 2 0
      .gitattributes
  2. 40 40
      fcl/Makefile
  3. 1 1
      fcl/Makefile.fpc
  4. 500 0
      fcl/inc/blowfish.pp
  5. 1 0
      fcl/tests/README
  6. 44 0
      fcl/tests/testbf.pp

+ 2 - 0
.gitattributes

@@ -841,6 +841,7 @@ fcl/image/pscanvas.pp svneol=native#text/plain
 fcl/image/targacmn.pp svneol=native#text/plain
 fcl/inc/avl_tree.pp svneol=native#text/plain
 fcl/inc/base64.pp svneol=native#text/plain
+fcl/inc/blowfish.pp svneol=native#text/plain
 fcl/inc/bufstream.pp svneol=native#text/plain
 fcl/inc/cachecls.pp svneol=native#text/plain
 fcl/inc/cgiapp.pp svneol=native#text/plain
@@ -996,6 +997,7 @@ fcl/tests/socksvr.pp svneol=native#text/plain
 fcl/tests/sstream.pp svneol=native#text/plain
 fcl/tests/stringl.pp svneol=native#text/plain
 fcl/tests/testapp.pp svneol=native#text/plain
+fcl/tests/testbf.pp svneol=native#text/plain
 fcl/tests/testbs.pp svneol=native#text/plain
 fcl/tests/testcgi.html -text
 fcl/tests/testcgi.pp svneol=native#text/plain

+ 40 - 40
fcl/Makefile

@@ -1,5 +1,5 @@
 #
-# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/04/23]
+# Don't edit, this file is generated by FPCMake Version 2.0.0 [2006/05/20]
 #
 default: all
 MAKEFILETARGETS=i386-linux i386-go32v2 i386-win32 i386-os2 i386-freebsd i386-beos i386-netbsd i386-solaris i386-qnx i386-netware i386-openbsd i386-wdosx i386-darwin i386-emx i386-watcom i386-netwlibc i386-wince m68k-linux m68k-freebsd m68k-netbsd m68k-amiga m68k-atari m68k-openbsd m68k-palmos powerpc-linux powerpc-netbsd powerpc-macos powerpc-darwin powerpc-morphos sparc-linux sparc-netbsd sparc-solaris x86_64-linux x86_64-freebsd x86_64-win64 arm-linux arm-palmos arm-wince powerpc64-linux
@@ -701,121 +701,121 @@ ifeq ($(FULL_TARGET),powerpc64-linux)
 override TARGET_EXAMPLEDIRS+=tests
 endif
 ifeq ($(FULL_TARGET),i386-linux)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-go32v2)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-win32)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-os2)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-freebsd)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-beos)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-netbsd)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-solaris)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-qnx)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-netware)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-openbsd)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-wdosx)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-darwin)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-emx)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-watcom)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-netwlibc)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),i386-wince)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),m68k-linux)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),m68k-freebsd)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),m68k-netbsd)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),m68k-amiga)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),m68k-atari)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),m68k-openbsd)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),m68k-palmos)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),powerpc-linux)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),powerpc-netbsd)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),powerpc-macos)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),powerpc-darwin)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),powerpc-morphos)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),sparc-linux)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),sparc-netbsd)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),sparc-solaris)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),x86_64-linux)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),x86_64-freebsd)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),x86_64-win64)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),arm-linux)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),arm-palmos)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),arm-wince)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 ifeq ($(FULL_TARGET),powerpc64-linux)
-override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+override CLEAN_UNITS+=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 endif
 override INSTALL_FPCPACKAGE=y
 ifeq ($(FULL_TARGET),i386-linux)

+ 1 - 1
fcl/Makefile.fpc

@@ -22,7 +22,7 @@ packages_emx=netdb
 
 # clean package units
 [clean]
-units=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio
+units=adler gzcrc gzio infblock infcodes inffast inftrees infutil minigzip paszlib trees zbase zcompres zdeflate zinflate zuncompr zutil pthreads streamio blowfish
 
 [target]
 dirs=xml image db shedit passrc net fpcunit

+ 500 - 0
fcl/inc/blowfish.pp

@@ -0,0 +1,500 @@
+{
+    $Id: header,v 1.1 2000/07/13 06:33:45 michael Exp $
+    This file is part of the Free Component Library (FCL)
+    Copyright (c) 1999-2000 by the Free Pascal development team
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    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.
+
+ **********************************************************************}
+{
+  Unit implementing simple blowfish algorithm
+} 
+{$ifdef fpc}
+{$mode objfpc}
+{$h+}
+{$endif}
+unit BlowFish;
+
+interface
+
+Const
+  BFRounds = 16;      { 16 blowfish rounds }
+
+Type
+  PKey448  = ^TKey448;
+  TKey448  = array [0..55] of Byte;
+  TBFBlock = array[0..1] of LongInt;     { BlowFish }
+
+type
+  TBlowFish = Class(TObject)
+  Private
+    PBox    : array[0..(BFRounds+1)] of LongInt;
+    SBox    : array[0..3, 0..255] of LongInt;
+    Function F(x : Cardinal)  : Cardinal;{$ifdef fpc}inline;{$endif}
+  Public 
+    Constructor Create(Key : TKey448; KeySize : Integer);  
+    Procedure Encrypt(var Block : TBFBlock);
+    Procedure Decrypt(var Block : TBFBlock);
+  end;
+
+Implementation
+
+
+{ Blowfish lookup tables }
+
+const
+ bf_P: array[0..(BFRounds + 1)] of DWord = (                           
+  $243F6A88, $85A308D3, $13198A2E, $03707344,
+  $A4093822, $299F31D0, $082EFA98, $EC4E6C89,
+  $452821E6, $38D01377, $BE5466CF, $34E90C6C,
+  $C0AC29B7, $C97C50DD, $3F84D5B5, $B5470917,
+  $9216D5D9, $8979FB1B);
+
+const
+ bf_S: array[0..3, 0..255] of DWord =
+(
+( $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),
+  {SECOND 256}
+ ($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),
+  {THIRD 256}
+ ($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),
+  {FOURTH 256}
+ ($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)
+);
+
+
+Constructor TBlowFish.Create(Key : TKey448; KeySize : Integer);
+
+var
+  I     : Integer;
+  J     : Integer;
+  K     : Integer;
+  Data  : Cardinal;
+  Block : TBFBlock;
+  
+begin
+  Move(bf_P, PBox, SizeOf(PBox));
+  Move(bf_S, SBox, SizeOf(SBox));
+
+  { update PArray with the key bits }
+  J := 0;
+  for I := 0 to (BFRounds+1) do begin
+    Data := 0;
+    for K := 0 to 3 do begin
+      Data := (Data shl 8) or Key[J];
+      Inc(J);
+      if J >= KeySize then
+        J := 0;
+    end;
+    PBox[I] := PBox[I] xor Data;
+  end;
+
+  { Encrypt all-zero block}
+  Block[0] := 0;
+  Block[1] := 0;
+  I := 0;
+  repeat
+    Encrypt(Block);
+    PBox[I] := Block[0];
+    PBox[I+1] := Block[1];
+    Inc(I, 2);
+  until I > BFRounds+1;
+  
+  { Now continue with rest }
+  for J := 0 to 3 do begin
+    I := 0;
+    repeat
+      Encrypt(Block);
+      SBox[J, I] := Block[0];
+      SBox[J, I+1] := Block[1];
+      Inc(I, 2);
+    until I > 255;
+  end;
+end;
+
+Function TBlowFish.F(x : Cardinal)  : Cardinal;{$ifdef fpc}inline;{$endif}
+
+var
+  a, b, c, d : Byte;
+  y : cardinal;
+  
+begin
+  d:=x and $FF;
+  x:=x shr 8;
+  c:=x and $FF;
+  x:=x shr 8;
+  b:=x and $FF;
+  x:=x shr 8;
+  a:= x and $FF;
+  Result:=Sbox[0][a]+Sbox[1][b];
+  Result:=Result xor Sbox[2][c];
+  Result:=Result + Sbox[3][d];
+end;    
+
+procedure TBlowFish.Encrypt(var Block : TBFBlock);
+var
+  I : Integer;
+  xl,xr,temp : Cardinal;
+begin
+  Xl:= block[0];
+  Xr:= block[1];
+  for i:=0 to 15 do
+    begin
+    Xl:=Xl xor Pbox[i];
+    Xr:= F(Xl) xor Xr;
+    temp:= Xl;
+    Xl:= Xr;
+    Xr := temp;
+    end;
+  temp := Xl;
+  Xl := Xr;
+  Xr := temp;
+  Xr := Xr xor Pbox[16];
+  Xl := Xl xor Pbox[17];
+  Block[0]:=Xl;
+  Block[1]:=Xr;
+end;
+
+procedure TBlowFish.Decrypt(var Block : TBFBlock);
+var
+  I : Integer;
+  xl,xr,temp : Cardinal;
+begin
+    Xl:= block[0];
+    Xr:= block[1];
+    for i:=17 downto 2 do
+      begin
+      Xl := Xl xor PBox[i];
+      Xr := F(Xl) xor Xr;
+      temp := Xl;
+      Xl := Xr;
+      Xr := temp;
+      end;
+
+    temp := Xl;
+    Xl := Xr;
+    Xr := temp;
+    Xr := Xr xor Pbox[1];
+    Xl := Xl xor Pbox[0];
+    Block[0]:=Xl;
+    Block[1]:=Xr;
+end;
+
+end.

+ 1 - 0
fcl/tests/README

@@ -63,3 +63,4 @@ testbs.pp    Test of TBufStream buffered stream (MVC)
 ipcserver    Server part of SimpleIPC unit test, console app (MVC)
 ipcclient    Client part of SimpleIPC unit test, console app (MVC)
 testdebug    Client part of dbugintf debugging info test (MVC)
+testbf.pp    Test for BlowFish encryption (MVC)

+ 44 - 0
fcl/tests/testbf.pp

@@ -0,0 +1,44 @@
+{
+    $Id: header,v 1.1 2000/07/13 06:33:45 michael Exp $
+    This file is part of the Free Component Library (FCL)
+    Copyright (c) 1999-2000 by the Free Pascal development team
+
+    See the file COPYING.FPC, included in this distribution,
+    for details about the copyright.
+
+    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.
+
+ **********************************************************************}
+
+{ short test for blowfish unit }
+
+{$mode objfpc}
+{$h+}
+
+program testbf;
+
+uses blowfish;
+
+Var
+  i : integer;
+  L,R : TBFBlock;
+  K : TKey448;
+  
+begin
+  L[0]:=$DEAD;
+  L[1]:=$BEEF;
+  R:=L;
+  For I:=0 to 55 do
+    K[i]:=Random(255)+1;
+  With TBlowfish.Create(K,448) do
+    Try
+    Encrypt(L);
+    Decrypt(L);
+    If (L[0]<>R[0]) or (L[1]<>R[1]) then
+      Writeln('Error');
+    finally 
+      Free;
+    end;
+end.