The unified diff between revisions [47be11e3..] and [a9e517d7..] is displayed below. It can also be downloaded as a raw diff.

#
#
# delete "PLAN"
#
# delete "ampi.c"
#
# delete "base64.c"
#
# delete "gf.c"
#
# delete "keyring.c"
#
# delete "mycrypt_gf.h"
#
# delete "rsa.c"
#
# delete "rsa_sys.c"
#
# delete "serpent.c"
#
# delete "strings.c"
#
# delete "tommath.h"
#
# patch "Makefile.in"
#  from [9a01ea897e1cb03edb075885b76a57e3e8e6d79f]
#    to [34b2c7a451c9a3cd934647346c6ec687fe740e60]
#
# patch "src/ciphers/des.c"
#  from [4824c110130a61c8d47b376aa4015c9994ade590]
#    to [94725b9892450212bf776fd4b701fdc40334ef0a]
#
# patch "src/ciphers/twofish/twofish.c"
#  from [955a08c6d734bb659b32b2d85b5ab96443525b6f]
#    to [e92756325032dd319325d4144769aff494bb3890]
#
# patch "src/hashes/md5.c"
#  from [f6e422f7f081c8fa0c337ea2ffc61683ee9b1e09]
#    to [e80689df83c9bd087ba1b23c0784a93d931f2856]
#
# patch "src/hashes/sha1.c"
#  from [11d80424b8c7ba077b6b5d8d11f21090012f49be]
#    to [928cfd671d995ed512e398a050c8cd21c69a3de8]
#
# patch "src/misc/crypt/crypt.c"
#  from [241103c9efc2c8e19c41f0fbb71ebd4fa94d634d]
#    to [e259676da511645310599e62a08a44330c83624e]
#
============================================================
--- Makefile.in	9a01ea897e1cb03edb075885b76a57e3e8e6d79f
+++ Makefile.in	34b2c7a451c9a3cd934647346c6ec687fe740e60
@@ -4,7 +4,7 @@
 # Modified by Clay Culver

 # The version
-VERSION=0.99
+VERSION=1.02

 VPATH=@srcdir@
 srcdir=@srcdir@
@@ -19,30 +19,39 @@ srcdir=@srcdir@

 # Compilation flags. Note the += does not write over the user's CFLAGS!
 # The rest of the flags come from the parent Dropbear makefile
-CFLAGS += -c -I$(srcdir)
-# -Werror
+CFLAGS += -c -I$(srcdir)/src/headers/ -I$(srcdir)

+# additional warnings (newer GCC 3.4 and higher)
+#CFLAGS += -Wsystem-headers -Wdeclaration-after-statement -Wbad-function-cast -Wcast-align -Wstrict-prototypes -Wmissing-prototypes \
+#		  -Wmissing-declarations -Wpointer-arith
+
 # optimize for SPEED
-#CFLAGS += -O3 -funroll-all-loops
+#CFLAGS += -O3 -funroll-loops

-#add -fomit-frame-pointer.  hinders debugging!
-#CFLAGS += -fomit-frame-pointer
+# add -fomit-frame-pointer.  hinders debugging!
+CFLAGS += -fomit-frame-pointer

 # optimize for SIZE
-#CFLAGS += -Os -DSMALL_CODE
+#CFLAGS += -Os -DLTC_SMALL_CODE

+# older GCCs can't handle the "rotate with immediate" ROLc/RORc/etc macros
+# define this to help
+#CFLAGS += -DLTC_NO_ROLC
+
 # compile for DEBUGING (required for ccmalloc checking!!!)
-#CFLAGS += -g3
+#CFLAGS += -g3 -DLTC_NO_ASM

-#These flags control how the library gets built.
-
 #Output filenames for various targets.
 LIBNAME=libtomcrypt.a
+LIBTEST=testprof/libtomcrypt_prof.a
 HASH=hashsum
 CRYPT=encrypt
 SMALL=small
 PROF=x86_prof
 TV=tv_gen
+MULTI=multi
+TIMING=timing
+TEST=test

 #LIBPATH-The directory for libtomcrypt to be installed to.
 #INCPATH-The directory to install the header files for libtomcrypt.
@@ -52,49 +61,64 @@ DATAPATH=/usr/share/doc/libtomcrypt/pdf
 INCPATH=/usr/include
 DATAPATH=/usr/share/doc/libtomcrypt/pdf

+#Who do we install as?
+USER=root
+GROUP=wheel
+
 #List of objects to compile.

 #Leave MPI built-in or force developer to link against libtommath?
-#MPIOBJECT=mpi.o
+#MPIOBJECT=src/misc/mpi/mpi.o
 #Dropbear uses libtommath
 MPIOBJECT=

-OBJECTS=error_to_string.o mpi_to_ltc_error.o base64_encode.o base64_decode.o \
-\
-crypt.o                    crypt_find_cipher.o      crypt_find_hash_any.o      \
-crypt_hash_is_valid.o      crypt_register_hash.o    crypt_unregister_prng.o    \
-crypt_argchk.o             crypt_find_cipher_any.o  crypt_find_hash_id.o       \
-crypt_prng_descriptor.o    crypt_register_prng.o    crypt_cipher_descriptor.o  \
-crypt_find_cipher_id.o     crypt_find_prng.o        crypt_prng_is_valid.o      \
-crypt_unregister_cipher.o  crypt_cipher_is_valid.o  crypt_find_hash.o          \
-crypt_hash_descriptor.o    crypt_register_cipher.o  crypt_unregister_hash.o    \
-\
-rand_prime.o is_prime.o \
-\
-aes.o \
-\
-blowfish.o des.o \
-twofish.o \
-\
-md5.o sha1.o sha512.o \
-\
-cbc_start.o cbc_encrypt.o cbc_decrypt.o cbc_getiv.o cbc_setiv.o \
-ecb_start.o ecb_encrypt.o ecb_decrypt.o \
-\
-hash_memory.o \
-\
-hmac_done.o  hmac_file.o  hmac_init.o  hmac_memory.o  hmac_process.o  hmac_test.o \
-\
-burn_stack.o zeromem.o \
-\
-$(MPIOBJECT)
+OBJECTS=src/ciphers/aes/aes_enc.o $(MPIOBJECT) src/ciphers/aes/aes.o \
+src/ciphers/blowfish.o src/ciphers/des.o \
+src/ciphers/twofish/twofish.o \
+src/hashes/helper/hash_memory.o src/hashes/helper/hash_memory_multi.o \
+src/hashes/md5.o src/hashes/sha1.o src/hashes/sha2/sha256.o \
+src/hashes/sha2/sha512.o src/hashes/whirl/whirl.o src/mac/hmac/hmac_done.o \
+src/mac/hmac/hmac_file.o src/mac/hmac/hmac_init.o src/mac/hmac/hmac_memory.o \
+src/mac/hmac/hmac_memory_multi.o src/mac/hmac/hmac_process.o src/mac/hmac/hmac_test.o \
+src/misc/base64/base64_decode.o \
+src/misc/base64/base64_encode.o src/misc/burn_stack.o src/misc/crypt/crypt.o \
+src/misc/crypt/crypt_argchk.o src/misc/crypt/crypt_cipher_descriptor.o \
+src/misc/crypt/crypt_cipher_is_valid.o src/misc/crypt/crypt_find_cipher.o \
+src/misc/crypt/crypt_find_cipher_any.o src/misc/crypt/crypt_find_cipher_id.o \
+src/misc/crypt/crypt_find_hash.o src/misc/crypt/crypt_find_hash_any.o \
+src/misc/crypt/crypt_find_hash_id.o src/misc/crypt/crypt_find_prng.o \
+src/misc/crypt/crypt_hash_descriptor.o src/misc/crypt/crypt_hash_is_valid.o \
+src/misc/crypt/crypt_prng_descriptor.o src/misc/crypt/crypt_prng_is_valid.o \
+src/misc/crypt/crypt_register_cipher.o src/misc/crypt/crypt_register_hash.o \
+src/misc/crypt/crypt_register_prng.o src/misc/crypt/crypt_unregister_cipher.o \
+src/misc/crypt/crypt_unregister_hash.o src/misc/crypt/crypt_unregister_prng.o \
+src/misc/error_to_string.o src/misc/mpi/is_prime.o src/misc/mpi/mpi_to_ltc_error.o \
+src/misc/mpi/rand_prime.o src/misc/zeromem.o \
+src/modes/cbc/cbc_decrypt.o src/modes/cbc/cbc_done.o src/modes/cbc/cbc_encrypt.o \
+src/modes/cbc/cbc_getiv.o src/modes/cbc/cbc_setiv.o src/modes/cbc/cbc_start.o \
+src/modes/ctr/ctr_decrypt.o src/modes/ctr/ctr_done.o src/modes/ctr/ctr_encrypt.o \
+src/modes/ctr/ctr_getiv.o src/modes/ctr/ctr_setiv.o src/modes/ctr/ctr_start.o \
+src/modes/ecb/ecb_decrypt.o src/modes/ecb/ecb_done.o src/modes/ecb/ecb_encrypt.o \
+src/modes/ofb/ofb_start.o src/pk/asn1/der/der_decode_integer.o \
+src/prngs/rng_get_bytes.o \
+src/prngs/rng_make_prng.o src/prngs/sober128.o src/prngs/sprng.o src/prngs/yarrow.o

+HEADERS=src/headers/tommath_superclass.h src/headers/tomcrypt_cfg.h \
+src/headers/tomcrypt_mac.h src/headers/tomcrypt_macros.h \
+src/headers/tomcrypt_custom.h src/headers/tomcrypt_argchk.h \
+src/headers/tomcrypt_cipher.h src/headers/tomcrypt_pk.h \
+src/headers/tommath_class.h src/headers/ltc_tommath.h src/headers/tomcrypt_hash.h \
+src/headers/tomcrypt_misc.h src/headers/tomcrypt.h src/headers/tomcrypt_pkcs.h \
+src/headers/tomcrypt_prng.h testprof/tomcrypt_test.h
+
 TESTOBJECTS=demos/test.o
 HASHOBJECTS=demos/hashsum.o
 CRYPTOBJECTS=demos/encrypt.o
 SMALLOBJECTS=demos/small.o
-PROFS=demos/x86_prof.o
 TVS=demos/tv_gen.o
+MULTIS=demos/multi.o
+TIMINGS=demos/timing.o
+TESTS=demos/test.o

 #Files left over from making the crypt.pdf.
 LEFTOVERS=*.dvi *.log *.aux *.toc *.idx *.ilg *.ind *.out
@@ -102,34 +126,31 @@ COMPRESSED=crypt-$(VERSION).tar.bz2 cryp
 #Compressed filenames
 COMPRESSED=crypt-$(VERSION).tar.bz2 crypt-$(VERSION).zip

-#Header files used by libtomcrypt.
-HEADERS=ltc_tommath.h mycrypt_cfg.h \
-mycrypt_misc.h  mycrypt_prng.h mycrypt_cipher.h  mycrypt_hash.h \
-mycrypt_macros.h  mycrypt_pk.h mycrypt.h mycrypt_argchk.h \
-mycrypt_custom.h mycrypt_pkcs.h
-
 #The default rule for make builds the libtomcrypt library.
 default:library

 #ciphers come in two flavours... enc+dec and enc
-aes_enc.o: aes.c aes_tab.c
-	$(CC) $(CFLAGS) -DENCRYPT_ONLY -c $(srcdir)/aes.c -o aes_enc.o
+src/ciphers/aes/aes_enc.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c
+	$(CC) $(CFLAGS) -DENCRYPT_ONLY -c src/ciphers/aes/aes.c -o src/ciphers/aes/aes_enc.o

 #These are the rules to make certain object files.
-aes.o: aes.c aes_tab.c
-twofish.o: twofish.c twofish_tab.c
-whirl.o: whirl.c whirltab.c
-ecc.o: ecc.c ecc_sys.c
-dh.o: dh.c dh_sys.c
-sha512.o: sha512.c sha384.c
-sha256.o: sha256.c sha224.c
+src/ciphers/aes/aes.o: src/ciphers/aes/aes.c src/ciphers/aes/aes_tab.c
+src/ciphers/twofish/twofish.o: src/ciphers/twofish/twofish.c src/ciphers/twofish/twofish_tab.c
+src/hashes/whirl/whirl.o: src/hashes/whirl/whirl.c src/hashes/whirl/whirltab.c
+src/pk/ecc/ecc.o: src/pk/ecc/ecc.c src/pk/ecc/ecc_sys.c
+src/pk/dh/dh.o: src/pk/dh/dh.c src/pk/dh/dh_sys.c
+src/hashes/sha2/sha512.o: src/hashes/sha2/sha512.c src/hashes/sha2/sha384.c
+src/hashes/sha2/sha256.o: src/hashes/sha2/sha256.c src/hashes/sha2/sha224.c

 #This rule makes the libtomcrypt library.
-library: $(LIBNAME)
+library: $(LIBTEST) $(LIBNAME)

+$(LIBTEST):
+	cd testprof ; CFLAGS="$(CFLAGS)" make
+
 $(LIBNAME): $(OBJECTS)
 	$(AR) $(ARFLAGS) $@ $(OBJECTS)
-	$(RANLIB) $@
+	$(RANLIB) $(LIBNAME)

 #This rule makes the hash program included with libtomcrypt
 hashsum: library $(HASHOBJECTS)
@@ -143,45 +164,69 @@ small: library $(SMALLOBJECTS)
 small: library $(SMALLOBJECTS)
 	$(CC) $(SMALLOBJECTS) $(LIBNAME) -o $(SMALL) $(WARN)

-x86_prof: library $(PROFS)
-	$(CC) $(PROFS) $(LIBNAME) $(EXTRALIBS) -o $(PROF)
-
 tv_gen: library $(TVS)
 	$(CC) $(TVS) $(LIBNAME) $(EXTRALIBS) -o $(TV)

+multi: library $(MULTIS)
+	$(CC) $(MULTIS) $(LIBNAME) -o $(MULTI)
+
+timing: library $(TIMINGS)
+	$(CC) $(TIMINGS) $(LIBTEST) $(LIBNAME) -o $(TIMING)
+
+test: library $(TESTS)
+	$(CC) $(TESTS) $(LIBTEST) $(LIBNAME) -o $(TEST)
+
+
 #This rule installs the library and the header files. This must be run
 #as root in order to have a high enough permission to write to the correct
 #directories and to set the owner and group to root.
 install: library docs
-	install -d -g root -o root $(DESTDIR)$(LIBPATH)
-	install -d -g root -o root $(DESTDIR)$(INCPATH)
-	install -d -g root -o root $(DESTDIR)$(DATAPATH)
-	install -g root -o root $(LIBNAME) $(DESTDIR)$(LIBPATH)
-	install -g root -o root $(HEADERS) $(DESTDIR)$(INCPATH)
-	install -g root -o root doc/crypt.pdf $(DESTDIR)$(DATAPATH)
+	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH)
+	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH)
+	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(DATAPATH)
+	install -g $(GROUP) -o $(USER) $(LIBNAME) $(DESTDIR)$(LIBPATH)
+	install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH)
+	install -g $(GROUP) -o $(USER) doc/crypt.pdf $(DESTDIR)$(DATAPATH)

 install_lib: library
-	install -d -g root -o root $(DESTDIR)$(LIBPATH)
-	install -d -g root -o root $(DESTDIR)$(INCPATH)
-	install -g root -o root $(LIBNAME) $(DESTDIR)$(LIBPATH)
-	install -g root -o root $(HEADERS) $(DESTDIR)$(INCPATH)
+	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(LIBPATH)
+	install -d -g $(GROUP) -o $(USER) $(DESTDIR)$(INCPATH)
+	install -g $(GROUP) -o $(USER) $(LIBNAME) $(DESTDIR)$(LIBPATH)
+	install -g $(GROUP) -o $(USER) $(HEADERS) $(DESTDIR)$(INCPATH)

 #This rule cleans the source tree of all compiled code, not including the pdf
 #documentation.
 clean:
-	-rm -f $(OBJECTS) $(TESTOBJECTS) $(HASHOBJECTS) $(CRYPTOBJECTS) $(SMALLOBJECTS) $(LEFTOVERS) $(LIBNAME)
-	-rm -f $(TEST) $(HASH) $(COMPRESSED) $(PROFS) $(PROF) $(TVS) $(TV)
-	-rm -f *.la *.lo *.o *.a *.dll *stackdump *.lib *.exe *.obj demos/*.obj demos/*.o *.bat *.txt *.il *.da demos/*.il demos/*.da *.dyn *.dpi \
-	*.gcda *.gcno demos/*.gcno demos/*.gcda *~ doc/*
-	-cd demos/test && make clean
-	-rm -rf .libs demos/.libs demos/test/.libs
+	rm -f `find . -type f | grep "[.]o" | xargs`
+	rm -f `find . -type f | grep "[.]lo"  | xargs`
+	rm -f `find . -type f | grep "[.]a" | xargs`
+	rm -f `find . -type f | grep "[.]la"  | xargs`
+	rm -f `find . -type f | grep "[.]obj" | xargs`
+	rm -f `find . -type f | grep "[.]lib" | xargs`
+	rm -f `find . -type f | grep "[.]exe" | xargs`
+	rm -f `find . -type f | grep "[.]gcda" | xargs`
+	rm -f `find . -type f | grep "[.]gcno" | xargs`
+	rm -f `find . -type f | grep "[.]il" | xargs`
+	rm -f `find . -type f | grep "[.]dyn" | xargs`
+	rm -f `find . -type f | grep "[.]dpi" | xargs`
+	rm -rf `find . -type d | grep "[.]libs" | xargs`
+	rm -f crypt.aux  crypt.dvi  crypt.idx  crypt.ilg  crypt.ind  crypt.log crypt.toc
+	rm -f $(TV) $(PROF) $(SMALL) $(CRYPT) $(HASHSUM) $(MULTI) $(TIMING) $(TEST)
+	rm -rf doc/doxygen
+	rm -f doc/*.pdf
+
+#build the doxy files (requires Doxygen, tetex and patience)
+doxy:
+	doxygen
+	cd doc/doxygen/latex ; make ; mv -f refman.pdf ../../.
+	echo The huge doxygen PDF should be available as doc/refman.pdf

 #This builds the crypt.pdf file. Note that the rm -f *.pdf has been removed
 #from the clean command! This is because most people would like to keep the
 #nice pre-compiled crypt.pdf that comes with libtomcrypt! We only need to
 #delete it if we are rebuilding it.
 docs: crypt.tex
-	-rm -f doc/crypt.pdf $(LEFTOVERS)
+	rm -f doc/crypt.pdf $(LEFTOVERS)
 	echo "hello" > crypt.ind
 	latex crypt > /dev/null
 	latex crypt > /dev/null
@@ -189,7 +234,7 @@ docs: crypt.tex
 	latex crypt > /dev/null
 	dvipdf crypt
 	mv -ivf crypt.pdf doc/crypt.pdf
-	-rm -f $(LEFTOVERS)
+	rm -f $(LEFTOVERS)

 docdvi: crypt.tex
 	echo hello > crypt.ind
@@ -198,21 +243,15 @@ docdvi: crypt.tex
 	makeindex crypt.idx
 	latex crypt > /dev/null

-#pretty build
-pretty:
-	perl pretty.build
+#zipup the project (take that!)
+no_oops: clean
+	cd .. ; cvs commit

-#for GCC 3.4+
-profiled:
-	make clean
-	make CFLAGS="$(CFLAGS) -fprofile-generate" EXTRALIBS=-lgcov x86_prof
-	./x86_prof
-	rm *.o *.a x86_prof
-	make CFLAGS="$(CFLAGS) -fprofile-use" EXTRALIBS=-lgcov x86_prof
-
-#zipup the project (take that!)
-zipup: clean docs
+zipup: no_oops docs
 	cd .. ; rm -rf crypt* libtomcrypt-$(VERSION) ; mkdir libtomcrypt-$(VERSION) ; \
+	cp -R ./libtomcrypt/* ./libtomcrypt-$(VERSION)/ ; \
+	cd libtomcrypt-$(VERSION) ; rm -rf `find . -type d | grep CVS | xargs` ; cd .. ; \
+	tar -cjvf crypt-$(VERSION).tar.bz2 libtomcrypt-$(VERSION) ; \
+	zip -9r crypt-$(VERSION).zip libtomcrypt-$(VERSION) ; \
+	gpg -b -a crypt-$(VERSION).tar.bz2 ; gpg -b -a crypt-$(VERSION).zip ; \
+	mv -fv crypt* ~ ; rm -rf libtomcrypt-$(VERSION)
-	cp -R ./libtomcrypt/* ./libtomcrypt-$(VERSION)/ ; tar -c libtomcrypt-$(VERSION)/* > crypt-$(VERSION).tar ; \
-	bzip2 -9vv crypt-$(VERSION).tar ; zip -9 -r crypt-$(VERSION).zip libtomcrypt-$(VERSION)/* ; \
-	gpg -b -a crypt-$(VERSION).tar.bz2 ; gpg -b -a crypt-$(VERSION).zip
============================================================
--- src/ciphers/des.c	4824c110130a61c8d47b376aa4015c9994ade590
+++ src/ciphers/des.c	94725b9892450212bf776fd4b701fdc40334ef0a
@@ -1856,6 +1856,7 @@ void des_done(symmetric_key *skey)
 void des_done(symmetric_key *skey)
 {
 }
+#endif

 /** Terminate the context
    @param skey    The scheduled key
@@ -1865,6 +1866,7 @@ void des3_done(symmetric_key *skey)
 }


+#if 0
 /**
   Gets suitable key size
   @param keysize [in/out] The length of the recommended key (in bytes).  This function will store the suitable size back in this variable.
============================================================
--- src/ciphers/twofish/twofish.c	955a08c6d734bb659b32b2d85b5ab96443525b6f
+++ src/ciphers/twofish/twofish.c	e92756325032dd319325d4144769aff494bb3890
@@ -578,7 +578,7 @@ void twofish_ecb_decrypt(const unsigned
         b = RORc(b ^ (t2 + t1 + k[3]), 1);

         t2 = g1_func(b, skey);
-        t1 = g_func(a, key) + t2;
+        t1 = g_func(a, skey) + t2;
         c = ROLc(c, 1) ^ (t1 + k[0]);
         d = RORc(d ^ (t2 +  t1 + k[1]), 1);
         k -= 4;
============================================================
--- src/hashes/md5.c	f6e422f7f081c8fa0c337ea2ffc61683ee9b1e09
+++ src/hashes/md5.c	e80689df83c9bd087ba1b23c0784a93d931f2856
@@ -26,13 +26,10 @@ const struct ltc_hash_descriptor md5_des
     64,

     /* DER identifier */
-#if 0
-	/* matt */
     { 0x30, 0x20, 0x30, 0x0C, 0x06, 0x08, 0x2A, 0x86,
       0x48, 0x86, 0xF7, 0x0D, 0x02, 0x05, 0x05, 0x00,
       0x04, 0x10 },
     18,
-#endif

     &md5_init,
     &md5_process,
============================================================
--- src/hashes/sha1.c	11d80424b8c7ba077b6b5d8d11f21090012f49be
+++ src/hashes/sha1.c	928cfd671d995ed512e398a050c8cd21c69a3de8
@@ -25,13 +25,9 @@ const struct ltc_hash_descriptor sha1_de
     20,
     64,

-#if 0
-	/* matt */
-    /* DER identifier */
     { 0x30, 0x21, 0x30, 0x09, 0x06, 0x05, 0x2B, 0x0E,
       0x03, 0x02, 0x1A, 0x05, 0x00, 0x04, 0x14 },
     15,
-#endif

     &sha1_init,
     &sha1_process,
============================================================
--- src/misc/crypt/crypt.c	241103c9efc2c8e19c41f0fbb71ebd4fa94d634d
+++ src/misc/crypt/crypt.c	e259676da511645310599e62a08a44330c83624e
@@ -15,6 +15,7 @@
   Build strings, Tom St Denis
 */

+/*
 const char *crypt_build_settings =
    "LibTomCrypt " SCRYPT " (Tom St Denis, tomstdenis@gmail.com)\n"
    "LibTomCrypt is public domain software.\n"