# Makefile for WIN32 platform using Borland C++
OS        = win32_bc
#
VER      = 5
DRV      = D:
#
BIN      = $(DRV)\BC$(VER)\BIN
LIB      = $(DRV)\BC$(VER)\LIB
INC      = $(DRV)\BC$(VER)\INCLUDE
#
RC       = $(BIN)\BRC32
CC       = $(BIN)\BCC32
TLINK    = $(BIN)\TLINK32
TLIB     = $(BIN)\TLIB
STRIP    = $(BIN)\TDSTRP32
IMPLIB   = $(BIN)\IMPLIB
RM       = del
DIFF     = cmp
#
ALGO      = krypt
CIPHER    = cipher
TESTVK    = testvk
TESTVT    = testvt
BENCH     = bench
TABLES    = tables
TEST      = test
#
SRC       = .
TESTS     = .
#
CFLAGS   = -3 -Ox -H -P-c -I$(SRC) -DASM
#
DEFS     = -I$(INC) -DWIN32
#
ALIBS    = cw32 import32 $(ALGO)
DLIBS    = cw32 import32
#
LINKA    = $(TLINK) /ap/x/Tpe/L$(LIB)
#
all: $(TESTVK) $(TESTVT) $(CIPHER) $(BENCH) $(TEST) 

$(TESTVK): $@.obj $(ALGO).lib
	@echo Building $@
 	$(LINKA) c0x32 $@, $@,,$(ALIBS),$(SRC)\$@.def

$(TESTVK).obj:  $(SRC)\$(TESTVK).c  $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) -WC $(DEFS) -o$@ -c $(SRC)\$(TESTVK).c

$(TESTVT): $@.obj $(ALGO).lib
	@echo Building $@
 	@$(LINKA) c0x32 $@, $@,,$(ALIBS),$(SRC)\$@.def

$(TESTVT).obj:  $(SRC)\$(TESTVT).c  $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) -WC $(DEFS) -o$@ -c $(SRC)\$(TESTVT).c

$(BENCH): $@.obj $(ALGO).lib
	@echo Building $@
	@$(LINKA) c0x32 $@, $@,,$(ALIBS),$(SRC)\$@.def

$(BENCH).obj: $(SRC)\$(BENCH).c $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) -WC $(DEFS) -o$@ -c $(SRC)\$(BENCH).c

$(CIPHER): $@.obj $(ALGO).lib
	@echo Building $@
	@$(LINKA) c0x32 $@, $@,,$(ALIBS),$(SRC)\$@.def

$(CIPHER).obj: $(SRC)\$(CIPHER).c  $(SRC)\$(ALGO).h
	@$(CC) $(CFLAGS) -WC $(DEFS) -o$@ -c $(SRC)\$(CIPHER).c

test:   $(CIPHER)
	@echo Testing Blowfish ...
	@echo Electronic Code Book (ECB) Mode ...
	@.\$(CIPHER) -a blowfish -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -a blowfish -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode ...
	@.\$(CIPHER) -a blowfish -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -a blowfish -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode ...
	@.\$(CIPHER) -a blowfish -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -a blowfish -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode ...
	@.\$(CIPHER) -a blowfish -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -a blowfish -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Testing Cast-128 ...
	@echo Electronic Code Book (ECB) Mode ...
	@.\$(CIPHER) -a cast128 -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -a cast128 -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode ...
	@.\$(CIPHER) -a cast128 -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -a cast128 -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode ...
	@.\$(CIPHER) -a cast128 -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -a cast128 -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode ...
	@.\$(CIPHER) -a cast128 -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -a cast128 -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Testing DES3 EDE ...
	@echo Electronic Code Book (ECB) Mode ...
	@.\$(CIPHER) -a des3ede -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -a des3ede -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode ...
	@.\$(CIPHER) -a des3ede -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -a des3ede -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode ...
	@.\$(CIPHER) -a des3ede -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -a des3ede -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode ...
	@.\$(CIPHER) -a des3ede -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -a des3ede -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Testing DES3 EEE ...
	@echo Electronic Code Book (ECB) Mode ...
	@.\$(CIPHER) -a des3eee -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -a des3eee -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode ...
	@.\$(CIPHER) -a des3eee -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -a des3eee -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode ...
	@.\$(CIPHER) -a des3eee -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -a des3eee -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode ...
	@.\$(CIPHER) -a des3eee -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -a des3eee -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Testing DES ...
	@echo Electronic Code Book (ECB) Mode ...
	@.\$(CIPHER) -a des -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -a des -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode ...
	@.\$(CIPHER) -a des -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -a des -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode ...
	@.\$(CIPHER) -a des -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -a des -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode ...
	@.\$(CIPHER) -a des -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -a des -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Testing Mars ...
	@echo Electronic Code Book (ECB) Mode ...
	@.\$(CIPHER) -a mars -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -a mars -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode ...
	@.\$(CIPHER) -a mars -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -a mars -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode ...
	@.\$(CIPHER) -a mars -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -a mars -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cupher Feedback (CFB) Mode ...
	@.\$(CIPHER) -a mars -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -a mars -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Testing Rijndael ...
	@echo Electronic Code Book (ECB) Mode ...
	@.\$(CIPHER) -a rijndael -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -a rijndael -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode ...
	@.\$(CIPHER) -a rijndael -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -a rijndael -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode ...
	@.\$(CIPHER) -a rijndael -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -a rijndael -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode ...
	@.\$(CIPHER) -a rijndael -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -a rijndael -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Testing Safer+ ...
	@echo Electronic Code Book (ECB) Mode ...
	@.\$(CIPHER) -a safer -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -a safer -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode ...
	@.\$(CIPHER) -a safer -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -a safer -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode ...
	@.\$(CIPHER) -a safer -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -a safer -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode ...
	@.\$(CIPHER) -a safer -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -a safer -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Testing Serpent ...
	@echo Electronic Code Book (ECB) Mode ...
	@.\$(CIPHER) -a serpent -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -a serpent -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode ...
	@.\$(CIPHER) -a serpent -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -a serpent -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode ...
	@.\$(CIPHER) -a serpent -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -a serpent -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode ...
	@.\$(CIPHER) -a serpent -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -a serpent -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Testing Twofish ...
	@echo Electronic Code Book (ECB) Mode ...
	@.\$(CIPHER) -a twofish -m ecb -k sesam -q $(TESTS)\test.txt test.ecb
	@.\$(CIPHER) -d -a twofish -m ecb -k sesam -q test.ecb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ecb
	@echo Cipher Block Chaining (CBC) Mode ...
	@.\$(CIPHER) -a twofish -m cbc -k sesam -q $(TESTS)\test.txt test.cbc
	@.\$(CIPHER) -d -a twofish -m cbc -k sesam -q test.cbc test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cbc
	@echo 8 Bit Output Feedback (OFB) Mode ...
	@.\$(CIPHER) -a twofish -m ofb -k sesam -q $(TESTS)\test.txt test.ofb
	@.\$(CIPHER) -d -a twofish -m ofb -k sesam -q test.ofb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.ofb
	@echo 8 Bit Cipher Feedback (CFB) Mode ...
	@.\$(CIPHER) -a twofish -m cfb -k sesam -q $(TESTS)\test.txt test.cfb
	@.\$(CIPHER) -d -a twofish -m cfb -k sesam -q test.cfb test.out
	@$(DIFF) $(TESTS)\test.txt test.out
	@$(RM) test.out
	@$(RM) test.cfb
	@echo Build successful :-)

clean:
	@if exist *.map del *.map
	@if exist *.obj del *.obj
	@if exist *.res del *.res
	@if exist *.exp del *.exp
	@if exist *.exe del *.exe
	@if exist *.bak del *.bak
	@if exist *.zip del *.zip

zip:
	@zip -X $(ALGO)_$(OS).zip *.*

