From d70d1d77bab1a5f5278227d674bc59da0378fe15 Mon Sep 17 00:00:00 2001 From: bg Date: Sun, 26 Sep 2010 18:22:40 +0200 Subject: [PATCH] updated build system --- Makefile | 105 +++++---- aes/aes_dec.c | 2 +- aes/aes_enc.c | 4 +- aes/aes_keyschedule.c | 2 +- aes/aes_sbox.h | 2 +- arm-makefile.inc | 1 - bcal-basic.c => bcal/bcal-basic.c | 0 bcal-basic.h => bcal/bcal-basic.h | 0 bcal-cbc.c => bcal/bcal-cbc.c | 2 +- bcal-cbc.h => bcal/bcal-cbc.h | 0 bcal-cfb_bit.c => bcal/bcal-cfb_bit.c | 0 bcal-cfb_bit.h => bcal/bcal-cfb_bit.h | 0 bcal-cfb_byte.c => bcal/bcal-cfb_byte.c | 2 +- bcal-cfb_byte.h => bcal/bcal-cfb_byte.h | 0 bcal-cmac.c => bcal/bcal-cmac.c | 2 +- bcal-cmac.h => bcal/bcal-cmac.h | 0 bcal-ctr.c => bcal/bcal-ctr.c | 2 +- bcal-ctr.h => bcal/bcal-ctr.h | 0 bcal-eax.c => bcal/bcal-eax.c | 2 +- bcal-eax.h => bcal/bcal-eax.h | 0 bcal-ofb.c => bcal/bcal-ofb.c | 2 +- bcal-ofb.h => bcal/bcal-ofb.h | 0 bcal-performance.c => bcal/bcal-performance.c | 0 bcal-performance.h => bcal/bcal-performance.h | 0 bcal_aes128.c => bcal/bcal_aes128.c | 0 bcal_aes128.h => bcal/bcal_aes128.h | 0 bcal_aes192.c => bcal/bcal_aes192.c | 0 bcal_aes192.h => bcal/bcal_aes192.h | 0 bcal_aes256.c => bcal/bcal_aes256.c | 0 bcal_aes256.h => bcal/bcal_aes256.h | 0 bcal/bcal_camellia128.c | 52 +++++ bcal/bcal_camellia128.h | 33 +++ bcal/bcal_cast5.c | 52 +++++ bcal/bcal_cast5.h | 33 +++ bcal/bcal_cast6.c | 52 +++++ bcal/bcal_cast6.h | 33 +++ bcal/bcal_des.c | 61 +++++ echo/aes_sbox.h => bcal/bcal_des.h | 16 +- bcal/bcal_noekeon.c | 41 ++++ bcal/bcal_noekeon.h | 10 + bcal/bcal_present.c | 52 +++++ bcal/bcal_present.h | 33 +++ bcal/bcal_rc5.c | 59 +++++ groestl/aes_sbox.h => bcal/bcal_rc5.h | 16 +- bcal/bcal_rc6.c | 52 +++++ echo/gf256mul.h => bcal/bcal_rc6.h | 26 +-- echo/gf256mul.c => bcal/bcal_seed.c | 56 +++-- bcal/bcal_seed.h | 33 +++ bcal/bcal_serpent.c | 52 +++++ bcal/bcal_serpent.h | 33 +++ bcal/bcal_skipjack.c | 52 +++++ bcal/bcal_skipjack.h | 33 +++ bcal/bcal_tdes.c | 62 +++++ bcal/bcal_tdes.h | 33 +++ bcal/bcal_tdes2.c | 70 ++++++ bcal/bcal_tdes2.h | 38 +++ bcal/bcal_threefish1024.c | 56 +++++ bcal/bcal_threefish1024.h | 33 +++ bcal/bcal_threefish256.c | 56 +++++ bcal/bcal_threefish256.h | 33 +++ bcal/bcal_threefish512.c | 56 +++++ bcal/bcal_threefish512.h | 33 +++ bcal/bcal_xtea.c | 62 +++++ bcal/bcal_xtea.h | 33 +++ .../keysize_descriptor.c | 0 .../keysize_descriptor.h | 0 blake/blake_large.c | 2 +- blake/blake_small.c | 2 +- bmw/bmw_small.c | 2 +- bmw/bmw_small_speed.c | 1 - bmw/memxor.c | 12 - bmw/memxor.h | 7 - cubehash/cubehash.c | 11 +- cubehash/memxor.c | 12 - cubehash/memxor.h | 7 - echo/aes_enc_round.c | 4 +- echo/aes_sbox.c | 39 ---- echo/echo.c | 4 +- echo/memxor.c | 12 - echo/memxor.h | 7 - {aes => gf256mul}/gf256mul.c | 0 {aes => gf256mul}/gf256mul.h | 0 groestl/aes_sbox.c | 39 ---- groestl/groestl_large.c | 6 +- groestl/groestl_small.c | 6 +- groestl/memxor.c | 12 - groestl/memxor.h | 7 - hfal-basic.c => hfal/hfal-basic.c | 0 hfal-basic.h => hfal/hfal-basic.h | 0 hfal/hfal-hmac.c | 127 ++++++++++ hfal/hfal-hmac.h | 41 ++++ hfal/hfal-nessie.c | 58 +++++ hfal/hfal-nessie.h | 36 +++ hfal/hfal-performance.c | 221 ++++++++++++++++++ hfal/hfal-performance.h | 35 +++ groestl/gf256mul.c => hfal/hfal-test.c | 46 ++-- hfal/hfal-test.h | 36 +++ hfal_blake_large.c => hfal/hfal_blake_large.c | 0 hfal_blake_large.h => hfal/hfal_blake_large.h | 0 hfal_blake_small.c => hfal/hfal_blake_small.c | 0 hfal_blake_small.h => hfal/hfal_blake_small.h | 0 hfal_bmw_large.c => hfal/hfal_bmw_large.c | 0 hfal_bmw_large.h => hfal/hfal_bmw_large.h | 0 hfal_bmw_small.c => hfal/hfal_bmw_small.c | 0 hfal_bmw_small.h => hfal/hfal_bmw_small.h | 0 hfal_cubehash.c => hfal/hfal_cubehash.c | 0 hfal_cubehash.h => hfal/hfal_cubehash.h | 0 hfal_echo.c => hfal/hfal_echo.c | 0 hfal_echo.h => hfal/hfal_echo.h | 0 .../hfal_groestl_large.c | 0 .../hfal_groestl_large.h | 0 .../hfal_groestl_small.c | 0 .../hfal_groestl_small.h | 0 hfal_keccak.c => hfal/hfal_keccak.c | 0 hfal_keccak.h => hfal/hfal_keccak.h | 0 hfal_md5.c => hfal/hfal_md5.c | 0 hfal_md5.h => hfal/hfal_md5.h | 0 hfal_sha1.c => hfal/hfal_sha1.c | 0 hfal_sha1.h => hfal/hfal_sha1.h | 0 hfal_sha256.c => hfal/hfal_sha256.c | 0 hfal_sha256.h => hfal/hfal_sha256.h | 0 hfal_shabal.c => hfal/hfal_shabal.c | 0 hfal_shabal.h => hfal/hfal_shabal.h | 0 hfal_skein1024.c => hfal/hfal_skein1024.c | 0 hfal_skein1024.h => hfal/hfal_skein1024.h | 0 hfal_skein256.c => hfal/hfal_skein256.c | 0 hfal_skein256.h => hfal/hfal_skein256.h | 0 hfal_skein512.c => hfal/hfal_skein512.c | 0 hfal_skein512.h => hfal/hfal_skein512.h | 0 keccak/keccak.c | 5 +- keccak/memxor.c | 12 - keccak/memxor.h | 7 - {aes => memxor}/memxor.c | 2 +- {blake => memxor}/memxor.h | 0 blake/memxor.c => memxor/memxor_c.c | 2 +- mkfiles/aes_c.mk | 1 + mkfiles/blake_c.mk | 1 + mkfiles/bmw_c.mk | 1 + mkfiles/bmw_c_speed.mk | 1 + mkfiles/cubehash_c.mk | 1 + mkfiles/echo_c.mk | 1 + mkfiles/groestl_c.mk | 1 + mkfiles/keccak_c.mk | 1 + mkfiles/sha1_c.mk | 1 + mkfiles/sha256_c.mk | 1 + mkfiles/shabal_c.mk | 1 + mkfiles/skein_c.mk | 1 + noekeon/noekeon.c | 199 ++++++++++++++++ noekeon/noekeon.h | 85 +++++++ noekeon/noekeon_cbc_enc.h | 9 + groestl/gf256mul.h => noekeon/noekeon_ctr.h | 25 +- noekeon/noekeon_prng.c | 67 ++++++ noekeon/noekeon_prng.h | 40 ++++ noekeon/omac_noekeon.h | 44 ++++ noekeon/omac_noekeon_C.c | 74 ++++++ skein/memxor.c | 12 - skein/memxor.h | 7 - skein/ubi1024.c | 2 +- skein/ubi256.c | 2 +- skein/ubi512.c | 2 +- test_src/cmacvs.c | 4 +- test_src/main-aes-test.c | 22 +- test_src/main-blake-test.c | 10 +- test_src/main-bmw-test.c | 10 +- test_src/main-cubehash-test.c | 8 +- test_src/main-echo-test.c | 8 +- test_src/main-groestl-test.c | 10 +- test_src/main-keccak-test.c | 8 +- test_src/main-md5-test.c | 4 +- test_src/main-sha1-test.c | 8 +- test_src/main-sha256-test.c | 8 +- test_src/main-shabal-test.c | 8 +- test_src/main-skein-test.c | 12 +- test_src/shavs.c | 2 +- 174 files changed, 2668 insertions(+), 427 deletions(-) rename bcal-basic.c => bcal/bcal-basic.c (100%) rename bcal-basic.h => bcal/bcal-basic.h (100%) rename bcal-cbc.c => bcal/bcal-cbc.c (98%) rename bcal-cbc.h => bcal/bcal-cbc.h (100%) rename bcal-cfb_bit.c => bcal/bcal-cfb_bit.c (100%) rename bcal-cfb_bit.h => bcal/bcal-cfb_bit.h (100%) rename bcal-cfb_byte.c => bcal/bcal-cfb_byte.c (99%) rename bcal-cfb_byte.h => bcal/bcal-cfb_byte.h (100%) rename bcal-cmac.c => bcal/bcal-cmac.c (99%) rename bcal-cmac.h => bcal/bcal-cmac.h (100%) rename bcal-ctr.c => bcal/bcal-ctr.c (99%) rename bcal-ctr.h => bcal/bcal-ctr.h (100%) rename bcal-eax.c => bcal/bcal-eax.c (99%) rename bcal-eax.h => bcal/bcal-eax.h (100%) rename bcal-ofb.c => bcal/bcal-ofb.c (98%) rename bcal-ofb.h => bcal/bcal-ofb.h (100%) rename bcal-performance.c => bcal/bcal-performance.c (100%) rename bcal-performance.h => bcal/bcal-performance.h (100%) rename bcal_aes128.c => bcal/bcal_aes128.c (100%) rename bcal_aes128.h => bcal/bcal_aes128.h (100%) rename bcal_aes192.c => bcal/bcal_aes192.c (100%) rename bcal_aes192.h => bcal/bcal_aes192.h (100%) rename bcal_aes256.c => bcal/bcal_aes256.c (100%) rename bcal_aes256.h => bcal/bcal_aes256.h (100%) create mode 100644 bcal/bcal_camellia128.c create mode 100644 bcal/bcal_camellia128.h create mode 100644 bcal/bcal_cast5.c create mode 100644 bcal/bcal_cast5.h create mode 100644 bcal/bcal_cast6.c create mode 100644 bcal/bcal_cast6.h create mode 100644 bcal/bcal_des.c rename echo/aes_sbox.h => bcal/bcal_des.h (80%) create mode 100644 bcal/bcal_noekeon.c create mode 100644 bcal/bcal_noekeon.h create mode 100644 bcal/bcal_present.c create mode 100644 bcal/bcal_present.h create mode 100644 bcal/bcal_rc5.c rename groestl/aes_sbox.h => bcal/bcal_rc5.h (80%) create mode 100644 bcal/bcal_rc6.c rename echo/gf256mul.h => bcal/bcal_rc6.h (72%) rename echo/gf256mul.c => bcal/bcal_seed.c (51%) create mode 100644 bcal/bcal_seed.h create mode 100644 bcal/bcal_serpent.c create mode 100644 bcal/bcal_serpent.h create mode 100644 bcal/bcal_skipjack.c create mode 100644 bcal/bcal_skipjack.h create mode 100644 bcal/bcal_tdes.c create mode 100644 bcal/bcal_tdes.h create mode 100644 bcal/bcal_tdes2.c create mode 100644 bcal/bcal_tdes2.h create mode 100644 bcal/bcal_threefish1024.c create mode 100644 bcal/bcal_threefish1024.h create mode 100644 bcal/bcal_threefish256.c create mode 100644 bcal/bcal_threefish256.h create mode 100644 bcal/bcal_threefish512.c create mode 100644 bcal/bcal_threefish512.h create mode 100644 bcal/bcal_xtea.c create mode 100644 bcal/bcal_xtea.h rename keysize_descriptor.c => bcal/keysize_descriptor.c (100%) rename keysize_descriptor.h => bcal/keysize_descriptor.h (100%) delete mode 100644 bmw/memxor.c delete mode 100644 bmw/memxor.h delete mode 100644 cubehash/memxor.c delete mode 100644 cubehash/memxor.h delete mode 100644 echo/aes_sbox.c delete mode 100644 echo/memxor.c delete mode 100644 echo/memxor.h rename {aes => gf256mul}/gf256mul.c (100%) rename {aes => gf256mul}/gf256mul.h (100%) delete mode 100644 groestl/aes_sbox.c delete mode 100644 groestl/memxor.c delete mode 100644 groestl/memxor.h rename hfal-basic.c => hfal/hfal-basic.c (100%) rename hfal-basic.h => hfal/hfal-basic.h (100%) create mode 100644 hfal/hfal-hmac.c create mode 100644 hfal/hfal-hmac.h create mode 100644 hfal/hfal-nessie.c create mode 100644 hfal/hfal-nessie.h create mode 100644 hfal/hfal-performance.c create mode 100644 hfal/hfal-performance.h rename groestl/gf256mul.c => hfal/hfal-test.c (53%) create mode 100644 hfal/hfal-test.h rename hfal_blake_large.c => hfal/hfal_blake_large.c (100%) rename hfal_blake_large.h => hfal/hfal_blake_large.h (100%) rename hfal_blake_small.c => hfal/hfal_blake_small.c (100%) rename hfal_blake_small.h => hfal/hfal_blake_small.h (100%) rename hfal_bmw_large.c => hfal/hfal_bmw_large.c (100%) rename hfal_bmw_large.h => hfal/hfal_bmw_large.h (100%) rename hfal_bmw_small.c => hfal/hfal_bmw_small.c (100%) rename hfal_bmw_small.h => hfal/hfal_bmw_small.h (100%) rename hfal_cubehash.c => hfal/hfal_cubehash.c (100%) rename hfal_cubehash.h => hfal/hfal_cubehash.h (100%) rename hfal_echo.c => hfal/hfal_echo.c (100%) rename hfal_echo.h => hfal/hfal_echo.h (100%) rename hfal_groestl_large.c => hfal/hfal_groestl_large.c (100%) rename hfal_groestl_large.h => hfal/hfal_groestl_large.h (100%) rename hfal_groestl_small.c => hfal/hfal_groestl_small.c (100%) rename hfal_groestl_small.h => hfal/hfal_groestl_small.h (100%) rename hfal_keccak.c => hfal/hfal_keccak.c (100%) rename hfal_keccak.h => hfal/hfal_keccak.h (100%) rename hfal_md5.c => hfal/hfal_md5.c (100%) rename hfal_md5.h => hfal/hfal_md5.h (100%) rename hfal_sha1.c => hfal/hfal_sha1.c (100%) rename hfal_sha1.h => hfal/hfal_sha1.h (100%) rename hfal_sha256.c => hfal/hfal_sha256.c (100%) rename hfal_sha256.h => hfal/hfal_sha256.h (100%) rename hfal_shabal.c => hfal/hfal_shabal.c (100%) rename hfal_shabal.h => hfal/hfal_shabal.h (100%) rename hfal_skein1024.c => hfal/hfal_skein1024.c (100%) rename hfal_skein1024.h => hfal/hfal_skein1024.h (100%) rename hfal_skein256.c => hfal/hfal_skein256.c (100%) rename hfal_skein256.h => hfal/hfal_skein256.h (100%) rename hfal_skein512.c => hfal/hfal_skein512.c (100%) rename hfal_skein512.h => hfal/hfal_skein512.h (100%) delete mode 100644 keccak/memxor.c delete mode 100644 keccak/memxor.h rename {aes => memxor}/memxor.c (88%) rename {blake => memxor}/memxor.h (100%) rename blake/memxor.c => memxor/memxor_c.c (88%) create mode 100644 noekeon/noekeon.c create mode 100644 noekeon/noekeon.h create mode 100644 noekeon/noekeon_cbc_enc.h rename groestl/gf256mul.h => noekeon/noekeon_ctr.h (72%) create mode 100644 noekeon/noekeon_prng.c create mode 100644 noekeon/noekeon_prng.h create mode 100644 noekeon/omac_noekeon.h create mode 100644 noekeon/omac_noekeon_C.c delete mode 100644 skein/memxor.c delete mode 100644 skein/memxor.h diff --git a/Makefile b/Makefile index 7fd75c6..8ed3e1a 100644 --- a/Makefile +++ b/Makefile @@ -1,4 +1,4 @@ -# Makefile for the AVR-Crypto-Lib project +# Makefile for the ARM-Crypto-Lib project # # This file is part of the AVR-Crypto-Lib. # Copyright (C) 2010 Daniel Otte (daniel.otte@rub.de) @@ -28,10 +28,14 @@ SIGNATURE := PK_CIPHERS := AUX := + # we use the gnu make standard library include gmsl include arm-makefile.inc + +GLOBAL_INCDIR := ./ $(TESTSRC_DIR) + #------------------------------------------------------------------------------- # inclusion of make stubs include mkfiles/*.mk @@ -59,29 +63,8 @@ $(foreach a, $(ALGORITHMS), $(eval $(call Assert_Template, \ ))) -#$(foreach a, $(ALGORITHMS), \ -# $(if $(def $(a)_DIR), \ -# $(eval $(call Assert_Template, \ -# $(a)_DIR, \ -# . \ -# ) \ -# )) \ -#) -# -#$(foreach a, $(ALGORITHMS), \ -# $(if $(call seq($(strip($($(a)_DIR))),)), \ -# $(eval $(call Assert_Template, \ -# $(a)_DIR, \ -# . \ -# ) \ -# )) \ -#) #------------------------------------------------------------------------------- -# -### ifeq 'blafoo' '' -### $(error no source ($(2)) for $(1) in TargetSource_Template) -### endif define TargetSource_Template $(1): $(2) @@ -90,11 +73,26 @@ $(1): $(2) @$(CC) $(CFLAGS_A) -I./$(strip $(3)) -c -o $(1) $(2) endef +# ---------------------------------------------------------------------------- +# Function: find_source_file +# Arguments: 1: name of the binary file (.o extension) to search +# 2: list of directorys to search for file +# Returns: Returns paths to source file (mathing the pattern in +# $(SOURCE_PATTERN) +# ---------------------------------------------------------------------------- +SOURCE_PATTERN := %.S %.c +find_source_file = $(firstword $(foreach d, $(2), \ + $(filter $(SOURCE_PATTERN), \ + $(wildcard $(d)$(notdir $(patsubst %.o,%,$1)).*) \ + ) \ + ) ) + + $(foreach a, $(ALGORITHMS), \ $(foreach b, $($(a)_OBJ), \ $(eval $(call TargetSource_Template, \ $(BIN_DIR)$(call lc, $(a))/$(b), \ - $(filter %.S %.c, $(wildcard $($(a)_DIR)$(notdir $(patsubst %.o,%,$(b))).*)), \ + $(call find_source_file, $(b), $($(a)_DIR) $($(a)_INCDIR) $(GLOBAL_INCDIR) ),\ $($(a)_DIR) \ )) \ ) \ @@ -103,15 +101,13 @@ $(foreach a, $(ALGORITHMS), \ $(foreach a, $(ALGORITHMS), \ $(foreach b, $($(a)_TEST_BIN), \ $(eval $(call TargetSource_Template, \ - $(BIN_DIR)$(call lc, $(a))/$(TEST_DIR)$(b), \ - $(if $(call sne,$(strip $(filter %.S %.c, $(wildcard $(TESTSRC_DIR)$(notdir $(patsubst %.o,%,$(b))).*))),), \ - $(filter %.S %.c, $(wildcard $(TESTSRC_DIR)$(notdir $(patsubst %.o,%,$(b))).*)), \ - $(filter %.S %.c, $(wildcard ./$(notdir $(patsubst %.o,%,$(b))).*))\ - ), \ + $(BIN_DIR)$(call lc, $(a))/$(TEST_DIR)$(b), \ + $(call find_source_file, $(b), $($(a)_DIR) $($(a)_INCDIR) $(GLOBAL_INCDIR) ),\ $($(a)_DIR) \ )) \ ) \ ) + #------------------------------------------------------------------------------- define MainTestElf_Template @@ -162,7 +158,7 @@ endef $(foreach algo, $(ALGORITHMS), $(eval $(call Flash_Template, \ $(algo), \ - $(BIN_DIR)$(call lc, $(algo))/$(TEST_DIR)main-$(call lc, $(algo))-test.elf \ + $(BIN_DIR)$(call lc, $(algo))/$(TEST_DIR)main-$(call lc, $(algo))-test.hex \ ))) #------------------------------------------------------------------------------- @@ -179,6 +175,8 @@ $(foreach algo, $(ALGORITHMS), $(eval $(call Speed_Template, \ .PHONY: hash_speed hash_speed: $(foreach algo, $(HASHES), $(algo)_SPEED) +.PHONY: blockcipher_speed +blockcipher_speed: $(foreach algo, $(BLOCK_CIPHERS), $(algo)_SPEED) #------------------------------------------------------------------------------- @@ -195,6 +193,9 @@ $(foreach algo, $(ALGORITHMS), $(eval $(call Size_Template, \ .PHONY: hash_size hash_size: $(foreach algo, $(HASHES), $(algo)_SIZE) +.PHONY: blockcipher_size +blockcipher_size: $(foreach algo, $(BLOCK_CIPHERS), $(algo)_SIZE) + #------------------------------------------------------------------------------- .PHONY: tests @@ -277,27 +278,29 @@ info: @echo " auxiliary functions:" @echo " $(AUX)" @echo " targets:" - @echo " all - all algorithm cores" - @echo " cores - all algorithm cores" - @echo " listings - all algorithm core listings" - @echo " tests - all algorithm test programs" - @echo " stats - all algorithm size statistics" - @echo " blockciphers - all blockcipher cores" - @echo " streamciphers - all streamcipher cores" - @echo " hashes - all hash cores" - @echo " macs - all MAC cores" - @echo " prngs - all PRNG cores" - @echo " all_testrun - testrun all algorithms" - @echo " hash_size - measure size of all hash functions" - @echo " hash_speed - measure performance of all hash functions" - @echo " docu - build doxygen documentation" - @echo " clean - remove a lot of builded files" - @echo " depclean - also remove dependency files" - @echo " *_TEST_BIN - build test program" - @echo " *_TESTRUN - run nessie test" - @echo " *_OBJ - build algorithm core" - @echo " *_FLASH - flash test program" - @echo " *_LIST - build assembler listing" + @echo " all - all algorithm cores" + @echo " cores - all algorithm cores" + @echo " listings - all algorithm core listings" + @echo " tests - all algorithm test programs" + @echo " stats - all algorithm size statistics" + @echo " blockciphers - all blockcipher cores" + @echo " streamciphers - all streamcipher cores" + @echo " hashes - all hash cores" + @echo " macs - all MAC cores" + @echo " prngs - all PRNG cores" + @echo " all_testrun - testrun all algorithms" + @echo " hash_size - measure size of all hash functions" + @echo " hash_speed - measure performance of all hash functions" + @echo " blockcipher_size - measure size of all blockciphers" + @echo " blockcipher_speed - measure performance of all blockciphers" + @echo " docu - build doxygen documentation" + @echo " clean - remove a lot of builded files" + @echo " depclean - also remove dependency files" + @echo " *_TEST_BIN - build test program" + @echo " *_TESTRUN - run nessie test" + @echo " *_OBJ - build algorithm core" + @echo " *_FLASH - flash test program" + @echo " *_LIST - build assembler listing" #------------------------------------------------------------------------------- @@ -308,7 +311,7 @@ clean: .PHONY: depclean depclean: clean - rm $(DEP_DIR)*.d + rm -f $(DEP_DIR)*.d #------------------------------------------------------------------------------- # dependency inclusion diff --git a/aes/aes_dec.c b/aes/aes_dec.c index 51af9c7..64f87c2 100644 --- a/aes/aes_dec.c +++ b/aes/aes_dec.c @@ -19,7 +19,7 @@ #include #include -#include "gf256mul.h" +#include "gf256mul/gf256mul.h" #include "aes.h" #include "aes_invsbox.h" #include "aes_dec.h" diff --git a/aes/aes_enc.c b/aes/aes_enc.c index 3d45af6..959667d 100644 --- a/aes/aes_enc.c +++ b/aes/aes_enc.c @@ -28,8 +28,8 @@ #include #include #include "aes.h" -#include "gf256mul.h" -#include "aes_sbox.h" +#include "gf256mul/gf256mul.h" +#include "aes/aes_sbox.h" #include "aes_enc.h" void aes_shiftcol(void* data, uint8_t shift){ diff --git a/aes/aes_keyschedule.c b/aes/aes_keyschedule.c index 2c7953a..32e4bad 100644 --- a/aes/aes_keyschedule.c +++ b/aes/aes_keyschedule.c @@ -28,7 +28,7 @@ #include #include "aes.h" #include "aes_keyschedule.h" -#include "aes_sbox.h" +#include "aes/aes_sbox.h" #include static diff --git a/aes/aes_sbox.h b/aes/aes_sbox.h index 5bc03b7..421b576 100644 --- a/aes/aes_sbox.h +++ b/aes/aes_sbox.h @@ -28,6 +28,6 @@ #define AES_SBOX_H_ #include -extern uint8_t aes_sbox[]; +extern const uint8_t aes_sbox[]; #endif diff --git a/arm-makefile.inc b/arm-makefile.inc index 4987aec..98ac3be 100644 --- a/arm-makefile.inc +++ b/arm-makefile.inc @@ -6,7 +6,6 @@ FLASHCMD = arm-elf-gdb -x gdb-flash # DEP_DIR = deps/ TEST_DIR = test/ BIN_DIR = bin/ -TESTBIN_DIR = test_bin/ TESTSRC_DIR = test_src/ ERASECMD = TESTPORT = /dev/ttyUSB1 diff --git a/bcal-basic.c b/bcal/bcal-basic.c similarity index 100% rename from bcal-basic.c rename to bcal/bcal-basic.c diff --git a/bcal-basic.h b/bcal/bcal-basic.h similarity index 100% rename from bcal-basic.h rename to bcal/bcal-basic.h diff --git a/bcal-cbc.c b/bcal/bcal-cbc.c similarity index 98% rename from bcal-cbc.c rename to bcal/bcal-cbc.c index 16d27a1..a5181d4 100644 --- a/bcal-cbc.c +++ b/bcal/bcal-cbc.c @@ -21,7 +21,7 @@ #include #include "bcal-cbc.h" #include "bcal-basic.h" -#include "memxor.h" +#include "memxor/memxor.h" uint8_t bcal_cbc_init(const bcdesc_t* desc, const void* key, uint16_t keysize_b, bcal_cbc_ctx_t* ctx){ ctx->desc = (bcdesc_t*)desc; diff --git a/bcal-cbc.h b/bcal/bcal-cbc.h similarity index 100% rename from bcal-cbc.h rename to bcal/bcal-cbc.h diff --git a/bcal-cfb_bit.c b/bcal/bcal-cfb_bit.c similarity index 100% rename from bcal-cfb_bit.c rename to bcal/bcal-cfb_bit.c diff --git a/bcal-cfb_bit.h b/bcal/bcal-cfb_bit.h similarity index 100% rename from bcal-cfb_bit.h rename to bcal/bcal-cfb_bit.h diff --git a/bcal-cfb_byte.c b/bcal/bcal-cfb_byte.c similarity index 99% rename from bcal-cfb_byte.c rename to bcal/bcal-cfb_byte.c index 0f6f31d..36e2ecc 100644 --- a/bcal-cfb_byte.c +++ b/bcal/bcal-cfb_byte.c @@ -22,7 +22,7 @@ #include #include "bcal-cfb_byte.h" #include "bcal-basic.h" -#include "memxor.h" +#include "memxor/memxor.h" uint8_t bcal_cfb_B_init(const bcdesc_t* desc, const void* key, uint16_t keysize_b, uint16_t size_b, bcal_cfb_B_ctx_t* ctx){ diff --git a/bcal-cfb_byte.h b/bcal/bcal-cfb_byte.h similarity index 100% rename from bcal-cfb_byte.h rename to bcal/bcal-cfb_byte.h diff --git a/bcal-cmac.c b/bcal/bcal-cmac.c similarity index 99% rename from bcal-cmac.c rename to bcal/bcal-cmac.c index 32ddfeb..f9aa086 100644 --- a/bcal-cmac.c +++ b/bcal/bcal-cmac.c @@ -22,7 +22,7 @@ #include #include "bcal-basic.h" #include "bcal-cmac.h" -#include "memxor.h" +#include "memxor/memxor.h" static uint8_t left_shift_be_block(void* block, uint8_t blocksize_B){ diff --git a/bcal-cmac.h b/bcal/bcal-cmac.h similarity index 100% rename from bcal-cmac.h rename to bcal/bcal-cmac.h diff --git a/bcal-ctr.c b/bcal/bcal-ctr.c similarity index 99% rename from bcal-ctr.c rename to bcal/bcal-ctr.c index ec1b1d4..7b73594 100644 --- a/bcal-ctr.c +++ b/bcal/bcal-ctr.c @@ -22,7 +22,7 @@ #include #include "bcal-basic.h" #include "bcal-ctr.h" -#include "memxor.h" +#include "memxor/memxor.h" static void increment_be(void* block, uint8_t size_B){ uint16_t c=1; diff --git a/bcal-ctr.h b/bcal/bcal-ctr.h similarity index 100% rename from bcal-ctr.h rename to bcal/bcal-ctr.h diff --git a/bcal-eax.c b/bcal/bcal-eax.c similarity index 99% rename from bcal-eax.c rename to bcal/bcal-eax.c index 72d68bd..e7b61f7 100644 --- a/bcal-eax.c +++ b/bcal/bcal-eax.c @@ -24,7 +24,7 @@ #include "bcal-cmac.h" #include "bcal-ctr.h" #include "bcal-eax.h" -#include "memxor.h" +#include "memxor/memxor.h" uint8_t bcal_eax_init(const bcdesc_t* desc, const void* key, uint16_t keysize_b, bcal_eax_ctx_t* ctx){ uint8_t r; diff --git a/bcal-eax.h b/bcal/bcal-eax.h similarity index 100% rename from bcal-eax.h rename to bcal/bcal-eax.h diff --git a/bcal-ofb.c b/bcal/bcal-ofb.c similarity index 98% rename from bcal-ofb.c rename to bcal/bcal-ofb.c index 6494fb8..059515f 100644 --- a/bcal-ofb.c +++ b/bcal/bcal-ofb.c @@ -21,7 +21,7 @@ #include #include "bcal-ofb.h" #include "bcal-basic.h" -#include "memxor.h" +#include "memxor/memxor.h" uint8_t bcal_ofb_init(const bcdesc_t* desc, const void* key, uint16_t keysize_b, bcal_ofb_ctx_t* ctx){ diff --git a/bcal-ofb.h b/bcal/bcal-ofb.h similarity index 100% rename from bcal-ofb.h rename to bcal/bcal-ofb.h diff --git a/bcal-performance.c b/bcal/bcal-performance.c similarity index 100% rename from bcal-performance.c rename to bcal/bcal-performance.c diff --git a/bcal-performance.h b/bcal/bcal-performance.h similarity index 100% rename from bcal-performance.h rename to bcal/bcal-performance.h diff --git a/bcal_aes128.c b/bcal/bcal_aes128.c similarity index 100% rename from bcal_aes128.c rename to bcal/bcal_aes128.c diff --git a/bcal_aes128.h b/bcal/bcal_aes128.h similarity index 100% rename from bcal_aes128.h rename to bcal/bcal_aes128.h diff --git a/bcal_aes192.c b/bcal/bcal_aes192.c similarity index 100% rename from bcal_aes192.c rename to bcal/bcal_aes192.c diff --git a/bcal_aes192.h b/bcal/bcal_aes192.h similarity index 100% rename from bcal_aes192.h rename to bcal/bcal_aes192.h diff --git a/bcal_aes256.c b/bcal/bcal_aes256.c similarity index 100% rename from bcal_aes256.c rename to bcal/bcal_aes256.c diff --git a/bcal_aes256.h b/bcal/bcal_aes256.h similarity index 100% rename from bcal_aes256.h rename to bcal/bcal_aes256.h diff --git a/bcal/bcal_camellia128.c b/bcal/bcal_camellia128.c new file mode 100644 index 0000000..767c1b8 --- /dev/null +++ b/bcal/bcal_camellia128.c @@ -0,0 +1,52 @@ +/* bcal_camellia128.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_camellia128.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "camellia.h" +#include "keysize_descriptor.h" + +const char camellia128_str[] PROGMEM = "Camellia-128"; + +const uint8_t camellia128_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(128), + KS_TYPE_TERMINATOR }; + +const bcdesc_t camellia128_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_2, + camellia128_str, + sizeof(camellia128_ctx_t), + 128, + {(void_fpt)camellia128_init}, + {(void_fpt)camellia128_enc}, + {(void_fpt)camellia128_dec}, + (bc_free_fpt)NULL, + camellia128_keysize_desc +}; + + diff --git a/bcal/bcal_camellia128.h b/bcal/bcal_camellia128.h new file mode 100644 index 0000000..bbe0199 --- /dev/null +++ b/bcal/bcal_camellia128.h @@ -0,0 +1,33 @@ +/* bcal_camellia128.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_camellia128.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "camellia.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t camellia128_desc; diff --git a/bcal/bcal_cast5.c b/bcal/bcal_cast5.c new file mode 100644 index 0000000..1818e10 --- /dev/null +++ b/bcal/bcal_cast5.c @@ -0,0 +1,52 @@ +/* bcal_cast5.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_cast5.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "cast5.h" +#include "keysize_descriptor.h" + +const char cast5_str[] PROGMEM = "CAST5"; + +const uint8_t cast5_keysize_desc[] PROGMEM = { KS_TYPE_RANGE, KS_INT(0), KS_INT(128), + KS_TYPE_TERMINATOR }; + +const bcdesc_t cast5_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_2, + cast5_str, + sizeof(cast5_ctx_t), + 128, + {(void_fpt)cast5_init}, + {(void_fpt)cast5_enc}, + {(void_fpt)cast5_dec}, + (bc_free_fpt)NULL, + cast5_keysize_desc +}; + + diff --git a/bcal/bcal_cast5.h b/bcal/bcal_cast5.h new file mode 100644 index 0000000..2b620ea --- /dev/null +++ b/bcal/bcal_cast5.h @@ -0,0 +1,33 @@ +/* bcal_cast5.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_cast5.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "cast5.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t cast5_desc; diff --git a/bcal/bcal_cast6.c b/bcal/bcal_cast6.c new file mode 100644 index 0000000..4a24ed5 --- /dev/null +++ b/bcal/bcal_cast6.c @@ -0,0 +1,52 @@ +/* bcal_cast6.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_cast6.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-04-03 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "cast6.h" +#include "keysize_descriptor.h" + +const char cast6_str[] PROGMEM = "CAST-256"; + +const uint8_t cast6_keysize_desc[] PROGMEM = { KS_TYPE_RANGE, KS_INT(0), KS_INT(256), + KS_TYPE_TERMINATOR }; + +const bcdesc_t cast6_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_2, + cast6_str, + sizeof(cast6_ctx_t), + 128, + {(void_fpt)cast6_init}, + {(void_fpt)cast6_enc}, + {(void_fpt)cast6_dec}, + (bc_free_fpt)NULL, + cast6_keysize_desc +}; + + diff --git a/bcal/bcal_cast6.h b/bcal/bcal_cast6.h new file mode 100644 index 0000000..c327cf6 --- /dev/null +++ b/bcal/bcal_cast6.h @@ -0,0 +1,33 @@ +/* bcal_cast6.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_cast6.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-04-03 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "cast6.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t cast6_desc; diff --git a/bcal/bcal_des.c b/bcal/bcal_des.c new file mode 100644 index 0000000..737e1d9 --- /dev/null +++ b/bcal/bcal_des.c @@ -0,0 +1,61 @@ +/* bcal_des.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_des.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "des.h" +#include "keysize_descriptor.h" + +const char des_str[] PROGMEM = "DES"; + +const uint8_t des_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(64), + KS_TYPE_TERMINATOR }; +static +void des_dummy_enc(void* block, void* key){ + des_enc(block, block, key); +} + +static +void des_dummy_dec(void* block, void* key){ + des_dec(block, block, key); +} + +const bcdesc_t des_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_1, + des_str, + 8, + 128, + {(void_fpt)NULL}, + {(void_fpt)des_dummy_enc}, + {(void_fpt)des_dummy_dec}, + (bc_free_fpt)NULL, + des_keysize_desc +}; + + diff --git a/echo/aes_sbox.h b/bcal/bcal_des.h similarity index 80% rename from echo/aes_sbox.h rename to bcal/bcal_des.h index 421b576..84f76d2 100644 --- a/echo/aes_sbox.h +++ b/bcal/bcal_des.h @@ -1,4 +1,4 @@ -/* aes_sbox.h */ +/* bcal_des.h */ /* This file is part of the AVR-Crypto-Lib. Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) @@ -17,17 +17,17 @@ along with this program. If not, see . */ /** - * \file aes_sbox.h + * \file bcal_des.h * \email daniel.otte@rub.de * \author Daniel Otte - * \date 2008-12-30 + * \date 2009-01-09 * \license GPLv3 or later * */ -#ifndef AES_SBOX_H_ -#define AES_SBOX_H_ -#include -extern const uint8_t aes_sbox[]; +#include +#include "blockcipher_descriptor.h" +#include "des.h" +#include "keysize_descriptor.h" -#endif +extern const bcdesc_t des_desc; diff --git a/bcal/bcal_noekeon.c b/bcal/bcal_noekeon.c new file mode 100644 index 0000000..47e1c59 --- /dev/null +++ b/bcal/bcal_noekeon.c @@ -0,0 +1,41 @@ +/* bcal_noekeon.c */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "noekeon/noekeon.h" +#include "keysize_descriptor.h" + +const char noekeon_direct_str[] PROGMEM = "Noekeon-Direct"; +const char noekeon_indirect_str[] PROGMEM = "Noekeon-Indirect"; + +const uint8_t noekeon_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(128), + KS_TYPE_TERMINATOR }; + +const bcdesc_t noekeon_direct_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_ENC_TYPE_1, + noekeon_direct_str, + 16, + 128, + {(void_fpt)NULL}, + {(void_fpt)noekeon_enc}, + {(void_fpt)noekeon_dec}, + (bc_free_fpt)NULL, + noekeon_keysize_desc +}; + +const bcdesc_t noekeon_indirect_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_1 | BC_ENC_TYPE_1, + noekeon_indirect_str, + 16, + 128, + {(void_fpt)noekeon_init}, + {(void_fpt)noekeon_enc}, + {(void_fpt)noekeon_dec}, + (bc_free_fpt)NULL, + noekeon_keysize_desc +}; + + diff --git a/bcal/bcal_noekeon.h b/bcal/bcal_noekeon.h new file mode 100644 index 0000000..16a8179 --- /dev/null +++ b/bcal/bcal_noekeon.h @@ -0,0 +1,10 @@ +/* bcal_noekeon.h */ + +#include +#include "blockcipher_descriptor.h" +#include "noekeon/noekeon.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t noekeon_direct_desc; +extern const bcdesc_t noekeon_indirect_desc; + diff --git a/bcal/bcal_present.c b/bcal/bcal_present.c new file mode 100644 index 0000000..6442c1e --- /dev/null +++ b/bcal/bcal_present.c @@ -0,0 +1,52 @@ +/* bcal_present.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_present.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "present.h" +#include "keysize_descriptor.h" + +const char present_str[] PROGMEM = "Present"; + +const uint8_t present_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(80), + KS_TYPE_TERMINATOR }; + +const bcdesc_t present_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_1, + present_str, + sizeof(present_ctx_t), + 64, + {(void_fpt)present_init}, + {(void_fpt)present_enc}, + {(void_fpt)present_dec}, + (bc_free_fpt)NULL, + present_keysize_desc +}; + + diff --git a/bcal/bcal_present.h b/bcal/bcal_present.h new file mode 100644 index 0000000..1de8365 --- /dev/null +++ b/bcal/bcal_present.h @@ -0,0 +1,33 @@ +/* bcal_present.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_present.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "present.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t present_desc; diff --git a/bcal/bcal_rc5.c b/bcal/bcal_rc5.c new file mode 100644 index 0000000..9634111 --- /dev/null +++ b/bcal/bcal_rc5.c @@ -0,0 +1,59 @@ +/* bcal_rc5.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_rc5.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "rc5.h" +#include "keysize_descriptor.h" + +#define RC5_ROUNDS 12 + +const char rc5_str[] PROGMEM = "RC5"; + +const uint8_t rc5_keysize_desc[] PROGMEM = { KS_TYPE_RANGE, KS_INT(1), KS_INT(2040), + KS_TYPE_TERMINATOR }; + +static +void rc5_dummy_init(void* key, uint16_t keysize_b, void* ctx){ + rc5_init(key, keysize_b, RC5_ROUNDS, ctx); +} + +const bcdesc_t rc5_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_2, + rc5_str, + sizeof(rc5_ctx_t), + 128, + {(void_fpt)rc5_dummy_init}, + {(void_fpt)rc5_enc}, + {(void_fpt)rc5_dec}, + (bc_free_fpt)rc5_free, + rc5_keysize_desc +}; + + diff --git a/groestl/aes_sbox.h b/bcal/bcal_rc5.h similarity index 80% rename from groestl/aes_sbox.h rename to bcal/bcal_rc5.h index 5bc03b7..30d2100 100644 --- a/groestl/aes_sbox.h +++ b/bcal/bcal_rc5.h @@ -1,4 +1,4 @@ -/* aes_sbox.h */ +/* bcal_rc5.h */ /* This file is part of the AVR-Crypto-Lib. Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) @@ -17,17 +17,17 @@ along with this program. If not, see . */ /** - * \file aes_sbox.h + * \file bcal_rc5.h * \email daniel.otte@rub.de * \author Daniel Otte - * \date 2008-12-30 + * \date 2009-01-09 * \license GPLv3 or later * */ -#ifndef AES_SBOX_H_ -#define AES_SBOX_H_ -#include -extern uint8_t aes_sbox[]; +#include +#include "blockcipher_descriptor.h" +#include "rc5.h" +#include "keysize_descriptor.h" -#endif +extern const bcdesc_t rc5_desc; diff --git a/bcal/bcal_rc6.c b/bcal/bcal_rc6.c new file mode 100644 index 0000000..5866b49 --- /dev/null +++ b/bcal/bcal_rc6.c @@ -0,0 +1,52 @@ +/* bcal_rc6.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_rc6.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "rc6.h" +#include "keysize_descriptor.h" + +const char rc6_str[] PROGMEM = "RC6"; + +const uint8_t rc6_keysize_desc[] PROGMEM = { KS_TYPE_RANGE, KS_INT(1), KS_INT(2040), + KS_TYPE_TERMINATOR }; + +const bcdesc_t rc6_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_2, + rc6_str, + sizeof(rc6_ctx_t), + 128, + {(void_fpt)rc6_init}, + {(void_fpt)rc6_enc}, + {(void_fpt)rc6_dec}, + (bc_free_fpt)rc6_free, + rc6_keysize_desc +}; + + diff --git a/echo/gf256mul.h b/bcal/bcal_rc6.h similarity index 72% rename from echo/gf256mul.h rename to bcal/bcal_rc6.h index 87f1cb3..f6d0d1b 100644 --- a/echo/gf256mul.h +++ b/bcal/bcal_rc6.h @@ -1,4 +1,4 @@ -/* gf256mul.h */ +/* bcal_rc6.h */ /* This file is part of the AVR-Crypto-Lib. Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) @@ -16,22 +16,18 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef GF256MUL_H_ -#define GF256MUL_H_ - /** - * \author Daniel Otte - * \email daniel.otte@rub.de - * \date 2008-12-19 - * \license GPLv3 - * \brief - * + * \file bcal_rc6.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later * */ -#include - -uint8_t gf256mul(uint8_t a, uint8_t b, uint8_t reducer); - -#endif /* GF256MUL_H_ */ +#include +#include "blockcipher_descriptor.h" +#include "rc6.h" +#include "keysize_descriptor.h" +extern const bcdesc_t rc6_desc; diff --git a/echo/gf256mul.c b/bcal/bcal_seed.c similarity index 51% rename from echo/gf256mul.c rename to bcal/bcal_seed.c index a473646..966f71d 100644 --- a/echo/gf256mul.c +++ b/bcal/bcal_seed.c @@ -1,4 +1,4 @@ -/* gf256mul.c */ +/* bcal_seed.c */ /* This file is part of the ARM-Crypto-Lib. Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) @@ -16,25 +16,37 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +/** + * \file bcal_seed.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "seed.h" +#include "keysize_descriptor.h" + +const char seed_str[] PROGMEM = "SEED"; + +const uint8_t seed_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(128), + KS_TYPE_TERMINATOR }; + +const bcdesc_t seed_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_1, + seed_str, + sizeof(seed_ctx_t), + 128, + {(void_fpt)seed_init}, + {(void_fpt)seed_enc}, + {(void_fpt)seed_dec}, + (bc_free_fpt)NULL, + seed_keysize_desc +}; + -#include - -uint8_t gf256mul(uint8_t a, uint8_t b, uint8_t reducer){ - uint8_t r=0; - while(a&0xFE){ - if(a&1){ - r ^= b; - } - a >>= 1; - if(b&0x80){ - b <<= 1; - b ^= reducer; - }else{ - b <<= 1; - } - } - if(a&1){ - r ^= b; - } - return r; -} diff --git a/bcal/bcal_seed.h b/bcal/bcal_seed.h new file mode 100644 index 0000000..a8bdf2c --- /dev/null +++ b/bcal/bcal_seed.h @@ -0,0 +1,33 @@ +/* bcal_seed.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_seed.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "seed.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t seed_desc; diff --git a/bcal/bcal_serpent.c b/bcal/bcal_serpent.c new file mode 100644 index 0000000..50bb799 --- /dev/null +++ b/bcal/bcal_serpent.c @@ -0,0 +1,52 @@ +/* bcal_serpent.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_serpent.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "serpent.h" +#include "keysize_descriptor.h" + +const char serpent_str[] PROGMEM = "serpent"; + +const uint8_t serpent_keysize_desc[] PROGMEM = { KS_TYPE_RANGE, KS_INT(1), KS_INT(256), + KS_TYPE_TERMINATOR }; + +const bcdesc_t serpent_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_2, + serpent_str, + sizeof(serpent_ctx_t), + 128, + {(void_fpt)serpent_init}, + {(void_fpt)serpent_enc}, + {(void_fpt)serpent_dec}, + (bc_free_fpt)NULL, + serpent_keysize_desc +}; + + diff --git a/bcal/bcal_serpent.h b/bcal/bcal_serpent.h new file mode 100644 index 0000000..60fc8cc --- /dev/null +++ b/bcal/bcal_serpent.h @@ -0,0 +1,33 @@ +/* bcal_serpent.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_serpent.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "serpent.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t serpent_desc; diff --git a/bcal/bcal_skipjack.c b/bcal/bcal_skipjack.c new file mode 100644 index 0000000..892c6b6 --- /dev/null +++ b/bcal/bcal_skipjack.c @@ -0,0 +1,52 @@ +/* bcal_skipjack.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_skipjack.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "skipjack.h" +#include "keysize_descriptor.h" + +const char skipjack_str[] PROGMEM = "Skipjack"; + +const uint8_t skipjack_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(80), + KS_TYPE_TERMINATOR }; + +const bcdesc_t skipjack_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_1, + skipjack_str, + 10, + 64, + {(void_fpt)NULL}, + {(void_fpt)skipjack_enc}, + {(void_fpt)skipjack_dec}, + (bc_free_fpt)NULL, + skipjack_keysize_desc +}; + + diff --git a/bcal/bcal_skipjack.h b/bcal/bcal_skipjack.h new file mode 100644 index 0000000..e238141 --- /dev/null +++ b/bcal/bcal_skipjack.h @@ -0,0 +1,33 @@ +/* bcal_skipjack.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_skipjack.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "skipjack.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t skipjack_desc; diff --git a/bcal/bcal_tdes.c b/bcal/bcal_tdes.c new file mode 100644 index 0000000..914a1f0 --- /dev/null +++ b/bcal/bcal_tdes.c @@ -0,0 +1,62 @@ +/* bcal_tdes.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_tdes.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "des.h" +#include "keysize_descriptor.h" + +const char tdes_str[] PROGMEM = "TDES"; + +const uint8_t tdes_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(192), + KS_TYPE_TERMINATOR }; + +static +void tdes_dummy_enc(void* block, void* key){ + tdes_enc(block, block, key); +} + +static +void tdes_dummy_dec(void* block, void* key){ + tdes_dec(block, block, key); +} + +const bcdesc_t tdes_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_1, + tdes_str, + 24, + 64, + {(void_fpt)NULL}, + {(void_fpt)tdes_dummy_enc}, + {(void_fpt)tdes_dummy_dec}, + (bc_free_fpt)NULL, + tdes_keysize_desc +}; + + diff --git a/bcal/bcal_tdes.h b/bcal/bcal_tdes.h new file mode 100644 index 0000000..e2f2b31 --- /dev/null +++ b/bcal/bcal_tdes.h @@ -0,0 +1,33 @@ +/* bcal_tdes.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_tdes.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "des.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t tdes_desc; diff --git a/bcal/bcal_tdes2.c b/bcal/bcal_tdes2.c new file mode 100644 index 0000000..7c70cf0 --- /dev/null +++ b/bcal/bcal_tdes2.c @@ -0,0 +1,70 @@ +/* bcal_tdes2.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_tdes.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2010-02-02 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "des.h" +#include "keysize_descriptor.h" + +const char tdes2_str[] PROGMEM = "TDES-2"; + +const uint8_t tdes2_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(128), + KS_TYPE_TERMINATOR }; + +static +void tdes_dummy_enc(void* block, void* key){ + tdes_enc(block, block, key); +} + +static +void tdes_dummy_dec(void* block, void* key){ + tdes_dec(block, block, key); +} + +static +void tdes2_init(void* key, void* ctx){ + memcpy(ctx, key, 16); + memcpy((uint8_t*)ctx+16, key, 8); +} + + + +const bcdesc_t tdes2_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_1, + tdes2_str, + 24, + 64, + {(void_fpt)tdes2_init}, + {(void_fpt)tdes_dummy_enc}, + {(void_fpt)tdes_dummy_dec}, + (bc_free_fpt)NULL, + tdes2_keysize_desc +}; + + diff --git a/bcal/bcal_tdes2.h b/bcal/bcal_tdes2.h new file mode 100644 index 0000000..4dac992 --- /dev/null +++ b/bcal/bcal_tdes2.h @@ -0,0 +1,38 @@ +/* bcal_tdes2.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_tdes.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#ifndef BCAL_TDES2_H_ +#define BCAL_TDES2_H_ + +#include +#include "blockcipher_descriptor.h" +#include "des.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t tdes2_desc; + +#endif /* BCAL_TDES2_H_ */ diff --git a/bcal/bcal_threefish1024.c b/bcal/bcal_threefish1024.c new file mode 100644 index 0000000..26de027 --- /dev/null +++ b/bcal/bcal_threefish1024.c @@ -0,0 +1,56 @@ +/* bcal_threefish1024.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_threefish1024.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2010-02-20 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "threefish.h" +#include "keysize_descriptor.h" + +const char threefish1024_str[] PROGMEM = "Threefish-1024"; + +const uint8_t threefish1024_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(1024), + KS_TYPE_TERMINATOR }; + +static void threefish1024_dummy_init(void* key, void* ctx){ + threefish1024_init(key, NULL, ctx); +} + +const bcdesc_t threefish1024_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_1, + threefish1024_str, + sizeof(threefish1024_ctx_t), + 1024, + {(void_fpt)threefish1024_dummy_init}, + {(void_fpt)threefish1024_enc}, + {(void_fpt)threefish1024_dec}, + (bc_free_fpt)NULL, + threefish1024_keysize_desc +}; + + diff --git a/bcal/bcal_threefish1024.h b/bcal/bcal_threefish1024.h new file mode 100644 index 0000000..67c9b3c --- /dev/null +++ b/bcal/bcal_threefish1024.h @@ -0,0 +1,33 @@ +/* bcal_threefis1024.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_threefish1024.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2010-02-20 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "threefish.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t threefish1024_desc; diff --git a/bcal/bcal_threefish256.c b/bcal/bcal_threefish256.c new file mode 100644 index 0000000..30f0ca3 --- /dev/null +++ b/bcal/bcal_threefish256.c @@ -0,0 +1,56 @@ +/* bcal_threefish256.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_threefish256.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2010-02-20 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "threefish.h" +#include "keysize_descriptor.h" + +const char threefish256_str[] PROGMEM = "Threefish-256"; + +const uint8_t threefish256_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(256), + KS_TYPE_TERMINATOR }; + +static void threefish256_dummy_init(void* key, void* ctx){ + threefish256_init(key, NULL, ctx); +} + +const bcdesc_t threefish256_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_1, + threefish256_str, + sizeof(threefish256_ctx_t), + 256, + {(void_fpt)threefish256_dummy_init}, + {(void_fpt)threefish256_enc}, + {(void_fpt)threefish256_dec}, + (bc_free_fpt)NULL, + threefish256_keysize_desc +}; + + diff --git a/bcal/bcal_threefish256.h b/bcal/bcal_threefish256.h new file mode 100644 index 0000000..d2819bf --- /dev/null +++ b/bcal/bcal_threefish256.h @@ -0,0 +1,33 @@ +/* bcal_threefis256.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_threefish256.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2010-02-20 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "threefish.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t threefish256_desc; diff --git a/bcal/bcal_threefish512.c b/bcal/bcal_threefish512.c new file mode 100644 index 0000000..7e8d8ba --- /dev/null +++ b/bcal/bcal_threefish512.c @@ -0,0 +1,56 @@ +/* bcal_threefish512.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_threefish512.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2010-02-20 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "threefish.h" +#include "keysize_descriptor.h" + +const char threefish512_str[] PROGMEM = "Threefish-512"; + +const uint8_t threefish512_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(512), + KS_TYPE_TERMINATOR }; + +static void threefish512_dummy_init(void* key, void* ctx){ + threefish512_init(key, NULL, ctx); +} + +const bcdesc_t threefish512_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_1, + threefish512_str, + sizeof(threefish512_ctx_t), + 512, + {(void_fpt)threefish512_dummy_init}, + {(void_fpt)threefish512_enc}, + {(void_fpt)threefish512_dec}, + (bc_free_fpt)NULL, + threefish512_keysize_desc +}; + + diff --git a/bcal/bcal_threefish512.h b/bcal/bcal_threefish512.h new file mode 100644 index 0000000..8f87d65 --- /dev/null +++ b/bcal/bcal_threefish512.h @@ -0,0 +1,33 @@ +/* bcal_threefis512.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_threefish512.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2010-02-20 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "threefish.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t threefish512_desc; diff --git a/bcal/bcal_xtea.c b/bcal/bcal_xtea.c new file mode 100644 index 0000000..2d37f68 --- /dev/null +++ b/bcal/bcal_xtea.c @@ -0,0 +1,62 @@ +/* bcal_xtea.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_xtea.c + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include +#include "blockcipher_descriptor.h" +#include "xtea.h" +#include "keysize_descriptor.h" + +const char xtea_str[] PROGMEM = "XTEA"; + +const uint8_t xtea_keysize_desc[] PROGMEM = { KS_TYPE_LIST, 1, KS_INT(128), + KS_TYPE_TERMINATOR }; + +static +void xtea_dummy_enc(void* block, void* key){ + xtea_enc(block, block, key); +} + +static +void xtea_dummy_dec(void* block, void* key){ + xtea_dec(block, block, key); +} + +const bcdesc_t xtea_desc PROGMEM = { + BCDESC_TYPE_BLOCKCIPHER, + BC_INIT_TYPE_2, + xtea_str, + 16, + 64, + {(void_fpt)NULL}, + {(void_fpt)xtea_dummy_enc}, + {(void_fpt)xtea_dummy_dec}, + (bc_free_fpt)NULL, + xtea_keysize_desc +}; + + diff --git a/bcal/bcal_xtea.h b/bcal/bcal_xtea.h new file mode 100644 index 0000000..66e6d26 --- /dev/null +++ b/bcal/bcal_xtea.h @@ -0,0 +1,33 @@ +/* bcal_xtea.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/** + * \file bcal_xtea.h + * \email daniel.otte@rub.de + * \author Daniel Otte + * \date 2009-01-09 + * \license GPLv3 or later + * + */ + +#include +#include "blockcipher_descriptor.h" +#include "xtea.h" +#include "keysize_descriptor.h" + +extern const bcdesc_t xtea_desc; diff --git a/keysize_descriptor.c b/bcal/keysize_descriptor.c similarity index 100% rename from keysize_descriptor.c rename to bcal/keysize_descriptor.c diff --git a/keysize_descriptor.h b/bcal/keysize_descriptor.h similarity index 100% rename from keysize_descriptor.h rename to bcal/keysize_descriptor.h diff --git a/blake/blake_large.c b/blake/blake_large.c index 15eb680..d00919f 100644 --- a/blake/blake_large.c +++ b/blake/blake_large.c @@ -27,7 +27,7 @@ #include #include -#include "memxor.h" +#include "memxor/memxor.h" #include "blake_large.h" #include "blake_common.h" diff --git a/blake/blake_small.c b/blake/blake_small.c index bdf70cb..0b3fca2 100644 --- a/blake/blake_small.c +++ b/blake/blake_small.c @@ -27,7 +27,7 @@ #include #include -#include "memxor.h" +#include "memxor/memxor.h" #include "blake_small.h" #include "blake_common.h" diff --git a/bmw/bmw_small.c b/bmw/bmw_small.c index 74c6b9c..6a53158 100644 --- a/bmw/bmw_small.c +++ b/bmw/bmw_small.c @@ -28,7 +28,7 @@ #include #include #include "bmw_small.h" -#include "memxor.h" +#include "memxor/memxor.h" #define SHL32(a,n) ((a)<<(n)) #define SHR32(a,n) ((a)>>(n)) diff --git a/bmw/bmw_small_speed.c b/bmw/bmw_small_speed.c index d1d70e0..0a102c0 100644 --- a/bmw/bmw_small_speed.c +++ b/bmw/bmw_small_speed.c @@ -28,7 +28,6 @@ #include #include #include "bmw_small.h" -#include "memxor.h" #define SHL32(a,n) ((a)<<(n)) #define SHR32(a,n) ((a)>>(n)) diff --git a/bmw/memxor.c b/bmw/memxor.c deleted file mode 100644 index 7485b3e..0000000 --- a/bmw/memxor.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "memxor.h" - -void memxor(void* dest, const void* src, uint16_t n){ - while(n--){ - *((uint8_t*)dest) ^= *((uint8_t*)src); - dest = (uint8_t*)dest +1; - src = (uint8_t*)src +1; - } -} - diff --git a/bmw/memxor.h b/bmw/memxor.h deleted file mode 100644 index a62a616..0000000 --- a/bmw/memxor.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef MEMXOR_H_ -#define MEMXOR_H_ -#include - -void memxor(void* dest, const void* src, uint16_t n); - -#endif diff --git a/cubehash/cubehash.c b/cubehash/cubehash.c index 72c0d75..76040b0 100644 --- a/cubehash/cubehash.c +++ b/cubehash/cubehash.c @@ -26,21 +26,22 @@ */ -#include "memxor.h" +#include "memxor/memxor.h" #include "cubehash.h" #include #include +inline static uint32_t rol32(uint32_t a, uint8_t r){ return (a<>(32-r)); } /* -• Add x_0jklm into x_1jklm modulo 232 , for each (j, k, l, m). +• Add x_0jklm into x_1jklm modulo 2**32 , for each (j, k, l, m). • Rotate x_0jklm upwards by 7 bits, for each (j, k, l, m). • Swap x_00klm with x_01klm , for each (k, l, m). • Xor x_1jklm into x_0jklm , for each (j, k, l, m). • Swap x_1jk0m with x_1jk1m , for each (j, k, m). -• Add x_0jklm into x_1jklm modulo 232 , for each (j, k, l, m). +• Add x_0jklm into x_1jklm modulo 2**32 , for each (j, k, l, m). • Rotate x_0jklm upwards by 11 bits, for each (j, k, l, m). • Swap x_0j0lm with x_0j1lm , for each (j, l, m). • Xor x_1jklm into x_0jklm , for each (j, k, l, m). @@ -52,8 +53,6 @@ static void cubehash_round(cubehash_ctx_t* ctx){ uint32_t t; for(i=0; i<16; ++i){ ctx->a[i+16] += ctx->a[i]; - } - for(i=0; i<16; ++i){ ctx->a[i] = rol32(ctx->a[i], 7); } for(i=0; i<8; ++i){ @@ -74,8 +73,6 @@ static void cubehash_round(cubehash_ctx_t* ctx){ } for(i=0; i<16; ++i){ ctx->a[i+16] += ctx->a[i]; - } - for(i=0; i<16; ++i){ ctx->a[i] = rol32(ctx->a[i], 11); } for(i=0; i<4; ++i){ diff --git a/cubehash/memxor.c b/cubehash/memxor.c deleted file mode 100644 index 7485b3e..0000000 --- a/cubehash/memxor.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "memxor.h" - -void memxor(void* dest, const void* src, uint16_t n){ - while(n--){ - *((uint8_t*)dest) ^= *((uint8_t*)src); - dest = (uint8_t*)dest +1; - src = (uint8_t*)src +1; - } -} - diff --git a/cubehash/memxor.h b/cubehash/memxor.h deleted file mode 100644 index a62a616..0000000 --- a/cubehash/memxor.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef MEMXOR_H_ -#define MEMXOR_H_ -#include - -void memxor(void* dest, const void* src, uint16_t n); - -#endif diff --git a/echo/aes_enc_round.c b/echo/aes_enc_round.c index 20ebd98..d1d97a9 100644 --- a/echo/aes_enc_round.c +++ b/echo/aes_enc_round.c @@ -19,8 +19,8 @@ #include #include "aes_enc_round.h" -#include "gf256mul.h" -#include "aes_sbox.h" +#include "gf256mul/gf256mul.h" +#include "aes/aes_sbox.h" static void aes_shiftcol(void* data, uint8_t shift){ diff --git a/echo/aes_sbox.c b/echo/aes_sbox.c deleted file mode 100644 index 73849dd..0000000 --- a/echo/aes_sbox.c +++ /dev/null @@ -1,39 +0,0 @@ -/* aes sbox */ -/* - This file is part of the ARM-Crypto-Lib. - Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - 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. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include -const uint8_t aes_sbox[256] = { - 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, - 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, - 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, - 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, - 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, - 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, - 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, - 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, - 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, - 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, - 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, - 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, - 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, - 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, - 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, - 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 -}; - diff --git a/echo/echo.c b/echo/echo.c index 97ab73c..b460f96 100644 --- a/echo/echo.c +++ b/echo/echo.c @@ -19,8 +19,8 @@ #include "echo.h" -#include "gf256mul.h" -#include "memxor.h" +#include "gf256mul/gf256mul.h" +#include "memxor/memxor.h" #include "aes_enc_round.h" #include #include diff --git a/echo/memxor.c b/echo/memxor.c deleted file mode 100644 index 7485b3e..0000000 --- a/echo/memxor.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "memxor.h" - -void memxor(void* dest, const void* src, uint16_t n){ - while(n--){ - *((uint8_t*)dest) ^= *((uint8_t*)src); - dest = (uint8_t*)dest +1; - src = (uint8_t*)src +1; - } -} - diff --git a/echo/memxor.h b/echo/memxor.h deleted file mode 100644 index a62a616..0000000 --- a/echo/memxor.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef MEMXOR_H_ -#define MEMXOR_H_ -#include - -void memxor(void* dest, const void* src, uint16_t n); - -#endif diff --git a/aes/gf256mul.c b/gf256mul/gf256mul.c similarity index 100% rename from aes/gf256mul.c rename to gf256mul/gf256mul.c diff --git a/aes/gf256mul.h b/gf256mul/gf256mul.h similarity index 100% rename from aes/gf256mul.h rename to gf256mul/gf256mul.h diff --git a/groestl/aes_sbox.c b/groestl/aes_sbox.c deleted file mode 100644 index 73849dd..0000000 --- a/groestl/aes_sbox.c +++ /dev/null @@ -1,39 +0,0 @@ -/* aes sbox */ -/* - This file is part of the ARM-Crypto-Lib. - Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) - - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. - - 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. See the - GNU General Public License for more details. - - You should have received a copy of the GNU General Public License - along with this program. If not, see . -*/ - -#include -const uint8_t aes_sbox[256] = { - 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, - 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, - 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, - 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, - 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, - 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, - 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, - 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, - 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, - 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, - 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, - 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, - 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, - 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, - 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, - 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 -}; - diff --git a/groestl/groestl_large.c b/groestl/groestl_large.c index 0650196..9381935 100644 --- a/groestl/groestl_large.c +++ b/groestl/groestl_large.c @@ -26,9 +26,9 @@ */ #include "groestl_large.h" -#include "aes_sbox.h" -#include "gf256mul.h" -#include "memxor.h" +#include "aes/aes_sbox.h" +#include "gf256mul/gf256mul.h" +#include "memxor/memxor.h" #include #include diff --git a/groestl/groestl_small.c b/groestl/groestl_small.c index 5996c10..d23a466 100644 --- a/groestl/groestl_small.c +++ b/groestl/groestl_small.c @@ -26,9 +26,9 @@ */ #include "groestl_small.h" -#include "aes_sbox.h" -#include "gf256mul.h" -#include "memxor.h" +#include "aes/aes_sbox.h" +#include "gf256mul/gf256mul.h" +#include "memxor/memxor.h" #include #include diff --git a/groestl/memxor.c b/groestl/memxor.c deleted file mode 100644 index 7485b3e..0000000 --- a/groestl/memxor.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "memxor.h" - -void memxor(void* dest, const void* src, uint16_t n){ - while(n--){ - *((uint8_t*)dest) ^= *((uint8_t*)src); - dest = (uint8_t*)dest +1; - src = (uint8_t*)src +1; - } -} - diff --git a/groestl/memxor.h b/groestl/memxor.h deleted file mode 100644 index a62a616..0000000 --- a/groestl/memxor.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef MEMXOR_H_ -#define MEMXOR_H_ -#include - -void memxor(void* dest, const void* src, uint16_t n); - -#endif diff --git a/hfal-basic.c b/hfal/hfal-basic.c similarity index 100% rename from hfal-basic.c rename to hfal/hfal-basic.c diff --git a/hfal-basic.h b/hfal/hfal-basic.h similarity index 100% rename from hfal-basic.h rename to hfal/hfal-basic.h diff --git a/hfal/hfal-hmac.c b/hfal/hfal-hmac.c new file mode 100644 index 0000000..0232cca --- /dev/null +++ b/hfal/hfal-hmac.c @@ -0,0 +1,127 @@ +/* hfal-hmac.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#include +#include "hashfunction_descriptor.h" +#include "hfal-basic.h" +#include + +#define IPAD 0x36 +#define OPAD 0x5C + +uint8_t hfal_hmac_init(const hfdesc_t* hash_descriptor, + hfhmacgen_ctx_t* ctx, + const void* key, uint16_t keylength_b){ + uint16_t bs = hfal_hash_getBlocksize(); + uint8_t buffer[bs/8]; + uint8_t i; + hf_init_fpt init; + hf_nextBlock_fpt nextBlock; + memset(buffer, 0, bs/8); + ctx->desc = hash_descriptor; + ctx->ctx = malloc(pgm_read_word(&(hash_descriptor->ctxsize_B))); + ctx->finctx = malloc(pgm_read_word(&(hash_descriptor->ctxsize_B))); + if(ctx->ctx==NULL && ctx->finctx==NULL) + return 3; + if(ctx->finctx==NULL){ + free(ctx->ctx) + return 2; + } + if(ctx->ctx==NULL){ + free(ctx->finctx) + return 1; + } + if(keylength_b>bs){ + hfal_hash_mem(hash_descriptor, buffer, key, keylength_b); + } else { + memcpy(buffer, key, (keylength_b+7)/8); + } + for(i=0; iinit)); + nextBlock = pgm_read_word(&(hash_descriptor->nextBlock)); + init(ctx->ctx); + init(ctx->finctx); + nextBlock(ctx->ctx, buffer); + for(i=0; ifinctx, buffer); + memset(buffer, 0, bs/8); +} + +void hfal_hmac_nextBlock(hfhmacgen_ctx_t* ctx, const void* block){ + hf_nextBlock_fpt nextBlock; + nextBlock = pgm_read_word(&(hash_descriptor->nextBlock)); + nextBlock(ctx->ctx, block); +} + +void hfal_hmac_lastBlock(hfhmacgen_ctx_t* ctx, const void* block, uint16_t length_b){ + hf_lastBlock_fpt lastBlock; + hf_ctx2hash_fpt ctx2hash; + uint16_t hs = pgm_read_word(&(hash_descriptor->hashsize_b)); + uint8_t buffer[(hs+7)/8]; + lastBlock = pgm_read_word(&(hash_descriptor->lastBlock)); + ctx2hash = pgm_read_word(&(hash_descriptor->ctx2hash)); + lastBlock(ctx->ctx, block, length_b); + ctx2hash(buffer, ctx->ctx); + lastBlock(ctx->finctx, buffer, hs); +} + +void hfal_hmac_ctx2mac(void* dest, hfhmacgen_ctx_t* ctx){ + hf_ctx2hash_fpt ctx2hash; + ctx2hash = pgm_read_word(&(hash_descriptor->ctx2hash)); + ctx2hash(dest, ctx->finctx); +} + +void hfal_hmac_free(hfhmacgen_ctx_t* ctx){ + hf_free_fpt free_fpt; + free_fpt = pgm_read_word(&(hash_descriptor->free)); + if(free_fpt){ + free_fpt(ctx->ctx); + free_fpt(ctx->finctx); + } + free(ctx->ctx) + free(ctx->finctx) +} + +void hfal_hmac_mem(const hfdesc_t* hash_descriptor, const void* key, uint16_t keylength_b, void* dest, const void* msg, uint32_t length_b){ + hfhmacgen_ctx_t ctx; + uint16_t bs = hfal_hash_getBlocksize(); + hfal_hmac_init(hash_descriptor, &ctx, key, keylength_b); + while(length_b>bs){ + hfal_hmac_nextBlock(&ctx, msg); + msg = msg + bs/8; + length_b-=bs; + } + hfal_hmac_lastBlock(&ctx, msg, length_b); + hfal_hmac_ctx2mac(dest, &ctx); + hfal_free(&ctx); +} + +uint16_t hfal_hmac_getBlocksize(const hfdesc_t* hash_descriptor){ + return hfal_hash_getBlocksize(hash_descriptor); +} + +uint16_t hfal_hmac_getMACsize(const hfdesc_t* hash_descriptor){ + return hfal_hash_getHashsize(hash_descriptor); +} + + diff --git a/hfal/hfal-hmac.h b/hfal/hfal-hmac.h new file mode 100644 index 0000000..8c9b899 --- /dev/null +++ b/hfal/hfal-hmac.h @@ -0,0 +1,41 @@ +/* hfal-hmac.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ + +#ifndef HFAL_HMAC_H_ +#define HFAL_HMAC_H_ + +#include +#include "hashfunction_descriptor.h" + +typedef struct { + hfdesc_t* desc; + void* ctx; + void* finctx; +} hfhmacgen_ctx_t; + +uint8_t hfal_hmac_init(const hfdesc_t* hash_descriptor, hfhmacgen_ctx_t* ctx, const void* key, uint16_t keylength_b); +void hfal_hmac_nextBlock(hfhmacgen_ctx_t* ctx, const void* block); +void hfal_hmac_lastBlock(hfhmacgen_ctx_t* ctx, const void* block, uint16_t length_b); +void hfal_hmac_ctx2mac(void* dest, hfhmacgen_ctx_t* ctx); +void hfal_hmac_free(hfhmacgen_ctx_t* ctx); +void hfal_hmac_mem(const hfdesc_t* hash_descriptor, const void* key, uint16_t keylength_b, void* dest, const void* msg, uint32_t length_b); +uint16_t hfal_hmac_getBlocksize(const hfdesc_t* hash_descriptor); +uint16_t hfal_hmac_getMACsize(const hfdesc_t* hash_descriptor); + +#endif /* HFAL_HMAC_H_ */ diff --git a/hfal/hfal-nessie.c b/hfal/hfal-nessie.c new file mode 100644 index 0000000..75f2ea8 --- /dev/null +++ b/hfal/hfal-nessie.c @@ -0,0 +1,58 @@ +/* hfal-nessie.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* + * \file hfal-nessie.c + * \author Daniel Otte + * \email daniel.otte@rub.de + * \date 2009-05-10 + * \license GPLv3 or later + * + */ + +#include "nessie_hash_test.h" +#include "hashfunction_descriptor.h" +#include + +void hfal_nessie(const hfdesc_t* hd){ + if(hd->type!=HFDESC_TYPE_HASHFUNCTION) + return; + + nessie_hash_ctx.hashsize_b = hd->hashsize_b; + nessie_hash_ctx.name = (char*)(hd->name); /* needs a nicer fix */ + nessie_hash_ctx.blocksize_B = hd->blocksize_b/8; + nessie_hash_ctx.ctx_size_B = hd->ctxsize_B; + nessie_hash_ctx.hash_init = (nessie_hash_init_fpt)(hd->init); + nessie_hash_ctx.hash_next = (nessie_hash_next_fpt)(hd->nextBlock); + nessie_hash_ctx.hash_last = (nessie_hash_last_fpt)(hd->lastBlock); + nessie_hash_ctx.hash_conv = (nessie_hash_conv_fpt)(hd->ctx2hash); + + nessie_hash_run(); +} + +void hfal_nessie_multiple(const hfdesc_t** hd_list){ + const hfdesc_t* hd; + for(;;){ + hd = *hd_list; + if(!hd) + return; + hfal_nessie(hd); + hd_list += 1; + } +} + diff --git a/hfal/hfal-nessie.h b/hfal/hfal-nessie.h new file mode 100644 index 0000000..e9be131 --- /dev/null +++ b/hfal/hfal-nessie.h @@ -0,0 +1,36 @@ +/* hfal-nessie.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* + * \file hfal-nessie.h + * \author Daniel Otte + * \email daniel.otte@rub.de + * \date 2009-05-10 + * \license GPLv3 or later + * + */ + +#ifndef HFAL_NESSIE_H_ +#define HFAL_NESSIE_H_ + +#include "hashfunction_descriptor.h" + +void hfal_nessie(const hfdesc_t* hd); +void hfal_nessie_multiple(const hfdesc_t** hd_list); + +#endif /* HFAL_NESSIE_H_ */ diff --git a/hfal/hfal-performance.c b/hfal/hfal-performance.c new file mode 100644 index 0000000..2679e48 --- /dev/null +++ b/hfal/hfal-performance.c @@ -0,0 +1,221 @@ +/* hfal-performance.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* + * \file hfal-performance.c + * \author Daniel Otte + * \email daniel.otte@rub.de + * \date 2009-05-10 + * \license GPLv3 or later + * + */ + +#include "hfal-performance.h" +#include "hashfunction_descriptor.h" +/* #include "stack_measuring.h" */ +#include "cli.h" +#include "performance_test.h" +#include "string-extras.h" +#include +#include +#include + + +#define PATTERN_A 0xAA +#define PATTERN_B 0x55 + +static +void printvalue(unsigned long v){ + char str[20]; + int i; + ultoa(v, str, 10); + for(i=0; i<10-strlen(str); ++i){ + cli_putc(' '); + } + cli_putstr(str); +} + +void hfal_performance(const hfdesc_t* hd){ + hfdesc_t hf; + memcpy(&hf, hd, sizeof(hfdesc_t)); + uint8_t ctx[hf.ctxsize_B]; + uint8_t data[(hf.blocksize_b+7)/8]; + uint8_t digest[(hf.hashsize_b+7)/8]; + uint64_t t; + uint8_t i; + + if(hf.type!=HFDESC_TYPE_HASHFUNCTION) + return; + calibrateTimer(); + print_overhead(); + cli_putstr("\r\n\r\n === "); + cli_putstr(hf.name); + cli_putstr(" performance === " + "\r\n type: hashfunction" + "\r\n hashsize (bits): "); + printvalue(hf.hashsize_b); + + cli_putstr("\r\n ctxsize (bytes): "); + printvalue(hf.ctxsize_B); + + cli_putstr("\r\n blocksize (bits): "); + printvalue(hf.blocksize_b); + + t=0; + for(i=0; i<32; ++i){ + startTimer(0); + START_TIMER; + hf.init(&ctx); + STOP_TIMER; + t += stopTimer(); + if(i!=31 && hf.free){ + hf.free(&ctx); + } + } + t>>=5; + cli_putstr("\r\n init (cycles): "); + printvalue(t); + + t=0; + for(i=0; i<32; ++i){ + startTimer(0); + START_TIMER; + hf.nextBlock(&ctx, data); + STOP_TIMER; + t += stopTimer(); + } + t>>=5; + cli_putstr("\r\n nextBlock (cycles): "); + printvalue(t); + + t=0; + for(i=0; i<32; ++i){ + startTimer(0); + START_TIMER; + hf.lastBlock(&ctx, data, 0); + STOP_TIMER; + t += stopTimer(); + } + t>>=5; + cli_putstr("\r\n lastBlock (cycles): "); + printvalue(t); + + t=0; + for(i=0; i<32; ++i){ + startTimer(0); + START_TIMER; + hf.ctx2hash(digest, &ctx); + STOP_TIMER; + t += stopTimer(); + } + t>>=5; + cli_putstr("\r\n ctx2hash (cycles): "); + printvalue(t); + + if(hf.free){ + hf.free(&ctx); + } +} +/* +void hfal_stacksize(const hfdesc_t* hd){ + hfdesc_t hf; + stack_measuring_ctx_t smctx; + memcpy(&hf, hd, sizeof(hfdesc_t)); + uint8_t ctx[hf.ctxsize_B]; + uint8_t data[(hf.blocksize_b+7)/8]; + uint8_t digest[(hf.hashsize_b+7)/8]; + uint16_t t1, t2; + + if(hf.type!=HFDESC_TYPE_HASHFUNCTION) + return; + cli_putstr("\r\n\r\n === "); + cli_putstr_P(hf.name); + cli_putstr(" stack-usage === "); + + cli(); + stack_measure_init(&smctx, PATTERN_A); + hf.init(&ctx); + t1 = stack_measure_final(&smctx); + stack_measure_init(&smctx, PATTERN_B); + hf.init(&ctx); + t2 = stack_measure_final(&smctx); + sei(); + + t1 = (t1>t2)?t1:t2; + cli_putstr("\r\n init (bytes): "); + printvalue((unsigned long)t1); + + cli(); + stack_measure_init(&smctx, PATTERN_A); + hf.nextBlock(&ctx, data); + t1 = stack_measure_final(&smctx); + stack_measure_init(&smctx, PATTERN_B); + hf.nextBlock(&ctx, data); + t2 = stack_measure_final(&smctx); + sei(); + + t1 = (t1>t2)?t1:t2; + cli_putstr("\r\n nextBlock (bytes): "); + printvalue((unsigned long)t1); + + cli(); + stack_measure_init(&smctx, PATTERN_A); + hf.lastBlock(&ctx, data, 0); + t1 = stack_measure_final(&smctx); + stack_measure_init(&smctx, PATTERN_B); + hf.lastBlock(&ctx, data, 0); + t2 = stack_measure_final(&smctx); + sei(); + + t1 = (t1>t2)?t1:t2; + cli_putstr("\r\n lastBlock (bytes): "); + printvalue((unsigned long)t1); + + cli(); + stack_measure_init(&smctx, PATTERN_A); + hf.ctx2hash(digest, &ctx); + t1 = stack_measure_final(&smctx); + stack_measure_init(&smctx, PATTERN_B); + hf.ctx2hash(digest, &ctx); + t2 = stack_measure_final(&smctx); + sei(); + + t1 = (t1>t2)?t1:t2; + cli_putstr("\r\n ctx2hash (bytes): "); + printvalue((unsigned long)t1); + + if(hf.free){ + hf.free(&ctx); + } +} +*/ + +void hfal_performance_multiple(const hfdesc_t** hd_list){ + const hfdesc_t* hd; + for(;;){ + hd = *hd_list; + if(!hd){ + cli_putstr("\r\n\r\n End of performance figures\r\n"); + return; + } + hfal_performance(hd); +// hfal_stacksize(hd); + hd_list += 1; + } +} + diff --git a/hfal/hfal-performance.h b/hfal/hfal-performance.h new file mode 100644 index 0000000..65b0473 --- /dev/null +++ b/hfal/hfal-performance.h @@ -0,0 +1,35 @@ +/* hfal-performance.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* + * \file hfal-performance.h + * \author Daniel Otte + * \email daniel.otte@rub.de + * \date 2009-05-10 + * \license GPLv3 or later + * + */ + +#ifndef HFAL_PERFORMANCE_H_ +#define HFAL_PERFORMANCE_H_ + +#include "hashfunction_descriptor.h" + +void hfal_performance(const hfdesc_t* hd); +void hfal_performance_multiple(const hfdesc_t** hd_list); +#endif /* HFAL_PERFORMANCE_H_ */ diff --git a/groestl/gf256mul.c b/hfal/hfal-test.c similarity index 53% rename from groestl/gf256mul.c rename to hfal/hfal-test.c index a473646..f78375d 100644 --- a/groestl/gf256mul.c +++ b/hfal/hfal-test.c @@ -1,4 +1,4 @@ -/* gf256mul.c */ +/* hfal-test.c */ /* This file is part of the ARM-Crypto-Lib. Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) @@ -16,25 +16,33 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ +/* + * \file hfal-test.c + * \author Daniel Otte + * \email daniel.otte@rub.de + * \date 2009-05-10 + * \license GPLv3 or later + * + */ +#include "hfal-basic.h" +#include "hashfunction_descriptor.h" +#include "cli.h" #include -uint8_t gf256mul(uint8_t a, uint8_t b, uint8_t reducer){ - uint8_t r=0; - while(a&0xFE){ - if(a&1){ - r ^= b; - } - a >>= 1; - if(b&0x80){ - b <<= 1; - b ^= reducer; - }else{ - b <<= 1; - } - } - if(a&1){ - r ^= b; - } - return r; +void hfal_test(const hfdesc_t* hd, const void* msg, uint32_t length_b){ + if(hd->type!=HFDESC_TYPE_HASHFUNCTION) + return; + uint16_t dlen = (hd->hashsize_b+7)/8; + uint8_t digest[dlen]; + cli_putstr("\r\n=== "); + cli_putstr(hd->name); + cli_putstr(" ===\r\n message:"); + cli_hexdump_block(msg, (length_b+7)/8, 4, 16); + hfal_hash_mem(hd, digest, msg, length_b); + cli_putstr(" \r\n digest:"); + cli_hexdump_block(digest, dlen, 4, 16); + cli_putstr("\r\n"); } + + diff --git a/hfal/hfal-test.h b/hfal/hfal-test.h new file mode 100644 index 0000000..1d76a2c --- /dev/null +++ b/hfal/hfal-test.h @@ -0,0 +1,36 @@ +/* hfal-test.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2009 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* + * \file hfal-test.h + * \author Daniel Otte + * \email daniel.otte@rub.de + * \date 2009-05-10 + * \license GPLv3 or later + * + */ + +#ifndef HFAL_TEST_H_ +#define HFAL_TEST_H_ + +#include "hashfunction_descriptor.h" +#include + +void hfal_test(const hfdesc_t* hd,const void* msg, uint32_t length_b); + +#endif /* HFAL_TEST_H_ */ diff --git a/hfal_blake_large.c b/hfal/hfal_blake_large.c similarity index 100% rename from hfal_blake_large.c rename to hfal/hfal_blake_large.c diff --git a/hfal_blake_large.h b/hfal/hfal_blake_large.h similarity index 100% rename from hfal_blake_large.h rename to hfal/hfal_blake_large.h diff --git a/hfal_blake_small.c b/hfal/hfal_blake_small.c similarity index 100% rename from hfal_blake_small.c rename to hfal/hfal_blake_small.c diff --git a/hfal_blake_small.h b/hfal/hfal_blake_small.h similarity index 100% rename from hfal_blake_small.h rename to hfal/hfal_blake_small.h diff --git a/hfal_bmw_large.c b/hfal/hfal_bmw_large.c similarity index 100% rename from hfal_bmw_large.c rename to hfal/hfal_bmw_large.c diff --git a/hfal_bmw_large.h b/hfal/hfal_bmw_large.h similarity index 100% rename from hfal_bmw_large.h rename to hfal/hfal_bmw_large.h diff --git a/hfal_bmw_small.c b/hfal/hfal_bmw_small.c similarity index 100% rename from hfal_bmw_small.c rename to hfal/hfal_bmw_small.c diff --git a/hfal_bmw_small.h b/hfal/hfal_bmw_small.h similarity index 100% rename from hfal_bmw_small.h rename to hfal/hfal_bmw_small.h diff --git a/hfal_cubehash.c b/hfal/hfal_cubehash.c similarity index 100% rename from hfal_cubehash.c rename to hfal/hfal_cubehash.c diff --git a/hfal_cubehash.h b/hfal/hfal_cubehash.h similarity index 100% rename from hfal_cubehash.h rename to hfal/hfal_cubehash.h diff --git a/hfal_echo.c b/hfal/hfal_echo.c similarity index 100% rename from hfal_echo.c rename to hfal/hfal_echo.c diff --git a/hfal_echo.h b/hfal/hfal_echo.h similarity index 100% rename from hfal_echo.h rename to hfal/hfal_echo.h diff --git a/hfal_groestl_large.c b/hfal/hfal_groestl_large.c similarity index 100% rename from hfal_groestl_large.c rename to hfal/hfal_groestl_large.c diff --git a/hfal_groestl_large.h b/hfal/hfal_groestl_large.h similarity index 100% rename from hfal_groestl_large.h rename to hfal/hfal_groestl_large.h diff --git a/hfal_groestl_small.c b/hfal/hfal_groestl_small.c similarity index 100% rename from hfal_groestl_small.c rename to hfal/hfal_groestl_small.c diff --git a/hfal_groestl_small.h b/hfal/hfal_groestl_small.h similarity index 100% rename from hfal_groestl_small.h rename to hfal/hfal_groestl_small.h diff --git a/hfal_keccak.c b/hfal/hfal_keccak.c similarity index 100% rename from hfal_keccak.c rename to hfal/hfal_keccak.c diff --git a/hfal_keccak.h b/hfal/hfal_keccak.h similarity index 100% rename from hfal_keccak.h rename to hfal/hfal_keccak.h diff --git a/hfal_md5.c b/hfal/hfal_md5.c similarity index 100% rename from hfal_md5.c rename to hfal/hfal_md5.c diff --git a/hfal_md5.h b/hfal/hfal_md5.h similarity index 100% rename from hfal_md5.h rename to hfal/hfal_md5.h diff --git a/hfal_sha1.c b/hfal/hfal_sha1.c similarity index 100% rename from hfal_sha1.c rename to hfal/hfal_sha1.c diff --git a/hfal_sha1.h b/hfal/hfal_sha1.h similarity index 100% rename from hfal_sha1.h rename to hfal/hfal_sha1.h diff --git a/hfal_sha256.c b/hfal/hfal_sha256.c similarity index 100% rename from hfal_sha256.c rename to hfal/hfal_sha256.c diff --git a/hfal_sha256.h b/hfal/hfal_sha256.h similarity index 100% rename from hfal_sha256.h rename to hfal/hfal_sha256.h diff --git a/hfal_shabal.c b/hfal/hfal_shabal.c similarity index 100% rename from hfal_shabal.c rename to hfal/hfal_shabal.c diff --git a/hfal_shabal.h b/hfal/hfal_shabal.h similarity index 100% rename from hfal_shabal.h rename to hfal/hfal_shabal.h diff --git a/hfal_skein1024.c b/hfal/hfal_skein1024.c similarity index 100% rename from hfal_skein1024.c rename to hfal/hfal_skein1024.c diff --git a/hfal_skein1024.h b/hfal/hfal_skein1024.h similarity index 100% rename from hfal_skein1024.h rename to hfal/hfal_skein1024.h diff --git a/hfal_skein256.c b/hfal/hfal_skein256.c similarity index 100% rename from hfal_skein256.c rename to hfal/hfal_skein256.c diff --git a/hfal_skein256.h b/hfal/hfal_skein256.h similarity index 100% rename from hfal_skein256.h rename to hfal/hfal_skein256.h diff --git a/hfal_skein512.c b/hfal/hfal_skein512.c similarity index 100% rename from hfal_skein512.c rename to hfal/hfal_skein512.c diff --git a/hfal_skein512.h b/hfal/hfal_skein512.h similarity index 100% rename from hfal_skein512.h rename to hfal/hfal_skein512.h diff --git a/keccak/keccak.c b/keccak/keccak.c index f8e78dc..5d7cfe7 100644 --- a/keccak/keccak.c +++ b/keccak/keccak.c @@ -20,7 +20,7 @@ #include #include #include -#include "memxor.h" +#include "memxor/memxor.h" #include "keccak.h" #ifdef DEBUG @@ -74,6 +74,7 @@ static const uint64_t rc[] = { 0x0000000080000001LL, 0x8000000080008008LL }; +static inline uint64_t rotl64(uint64_t a, uint8_t r){ return (a<>(64-r)); } @@ -95,8 +96,6 @@ void keccak_round(uint64_t a[5][5], uint8_t rci){ } for(i=0; i<5; ++i){ b[i][1] = b[(4+i)%5][0] ^ rotl64(b[(i+1)%5][0], 1); - } - for(i=0; i<5; ++i){ for(j=0; j<5; ++j){ a[j][i] ^= b[i][1]; } diff --git a/keccak/memxor.c b/keccak/memxor.c deleted file mode 100644 index 7485b3e..0000000 --- a/keccak/memxor.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "memxor.h" - -void memxor(void* dest, const void* src, uint16_t n){ - while(n--){ - *((uint8_t*)dest) ^= *((uint8_t*)src); - dest = (uint8_t*)dest +1; - src = (uint8_t*)src +1; - } -} - diff --git a/keccak/memxor.h b/keccak/memxor.h deleted file mode 100644 index a62a616..0000000 --- a/keccak/memxor.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef MEMXOR_H_ -#define MEMXOR_H_ -#include - -void memxor(void* dest, const void* src, uint16_t n); - -#endif diff --git a/aes/memxor.c b/memxor/memxor.c similarity index 88% rename from aes/memxor.c rename to memxor/memxor.c index 7485b3e..e438d5d 100644 --- a/aes/memxor.c +++ b/memxor/memxor.c @@ -1,6 +1,6 @@ #include -#include "memxor.h" +#include "memxor/memxor.h" void memxor(void* dest, const void* src, uint16_t n){ while(n--){ diff --git a/blake/memxor.h b/memxor/memxor.h similarity index 100% rename from blake/memxor.h rename to memxor/memxor.h diff --git a/blake/memxor.c b/memxor/memxor_c.c similarity index 88% rename from blake/memxor.c rename to memxor/memxor_c.c index 7485b3e..e438d5d 100644 --- a/blake/memxor.c +++ b/memxor/memxor_c.c @@ -1,6 +1,6 @@ #include -#include "memxor.h" +#include "memxor/memxor.h" void memxor(void* dest, const void* src, uint16_t n){ while(n--){ diff --git a/mkfiles/aes_c.mk b/mkfiles/aes_c.mk index 2659f86..2e459bf 100644 --- a/mkfiles/aes_c.mk +++ b/mkfiles/aes_c.mk @@ -6,6 +6,7 @@ BLOCK_CIPHERS += $(ALGO_NAME) $(ALGO_NAME)_DIR := aes/ +$(ALGO_NAME)_INCDIR := gf256mul/ memxor/ bcal/ $(ALGO_NAME)_OBJ := aes_enc.o aes_dec.o aes_sbox.o aes_invsbox.o \ aes_keyschedule.o gf256mul.o \ aes128_enc.o aes128_dec.o aes192_enc.o aes192_dec.o \ diff --git a/mkfiles/blake_c.mk b/mkfiles/blake_c.mk index c79b89b..f6feec6 100644 --- a/mkfiles/blake_c.mk +++ b/mkfiles/blake_c.mk @@ -5,6 +5,7 @@ ALGO_NAME := BLAKE_C HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := blake/ +$(ALGO_NAME)_INCDIR := memxor/ hfal/ $(ALGO_NAME)_OBJ := blake_small.o blake_large.o blake_common.o memxor.o $(ALGO_NAME)_TEST_BIN := main-blake-test.o hfal_blake_small.o hfal_blake_large.o $(CLI_STD) $(HFAL_STD) $(ALGO_NAME)_NESSIE_TEST := test nessie diff --git a/mkfiles/bmw_c.mk b/mkfiles/bmw_c.mk index 03a1e9e..839859b 100644 --- a/mkfiles/bmw_c.mk +++ b/mkfiles/bmw_c.mk @@ -5,6 +5,7 @@ ALGO_NAME := BMW_C HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := bmw/ +$(ALGO_NAME)_INCDIR := memxor/ hfal/ $(ALGO_NAME)_OBJ := bmw_small.o bmw_large.o memxor.o $(ALGO_NAME)_TEST_BIN := main-bmw-test.o hfal_bmw_small.o hfal_bmw_large.o $(CLI_STD) $(HFAL_STD) $(ALGO_NAME)_NESSIE_TEST := test nessie diff --git a/mkfiles/bmw_c_speed.mk b/mkfiles/bmw_c_speed.mk index fb85d6b..42b9465 100644 --- a/mkfiles/bmw_c_speed.mk +++ b/mkfiles/bmw_c_speed.mk @@ -5,6 +5,7 @@ ALGO_NAME := BMW_C_SPEED HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := bmw/ +$(ALGO_NAME)_INCDIR := memxor/ hfal/ $(ALGO_NAME)_OBJ := bmw_small_speed.o bmw_large_speed.o memxor.o $(ALGO_NAME)_TEST_BIN := main-bmw-test.o hfal_bmw_small.o hfal_bmw_large.o $(CLI_STD) $(HFAL_STD) $(ALGO_NAME)_NESSIE_TEST := test nessie diff --git a/mkfiles/cubehash_c.mk b/mkfiles/cubehash_c.mk index 7ed0169..c47561a 100644 --- a/mkfiles/cubehash_c.mk +++ b/mkfiles/cubehash_c.mk @@ -5,6 +5,7 @@ ALGO_NAME := CUBEHASH_C HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := cubehash/ +$(ALGO_NAME)_INCDIR := memxor/ hfal/ $(ALGO_NAME)_OBJ := cubehash.o memxor.o $(ALGO_NAME)_TEST_BIN := main-cubehash-test.o hfal_cubehash.o $(CLI_STD) $(HFAL_STD) $(ALGO_NAME)_NESSIE_TEST := test nessie diff --git a/mkfiles/echo_c.mk b/mkfiles/echo_c.mk index 87d9846..2d80958 100644 --- a/mkfiles/echo_c.mk +++ b/mkfiles/echo_c.mk @@ -5,6 +5,7 @@ ALGO_NAME := ECHO_C HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := echo/ +$(ALGO_NAME)_INCDIR := memxor/ aes/ gf256mul/ hfal/ $(ALGO_NAME)_OBJ := echo.o memxor.o aes_enc_round.o aes_sbox.o gf256mul.o $(ALGO_NAME)_TEST_BIN := main-echo-test.o hfal_echo.o $(CLI_STD) $(HFAL_STD) $(ALGO_NAME)_NESSIE_TEST := test nessie diff --git a/mkfiles/groestl_c.mk b/mkfiles/groestl_c.mk index 7d63a0d..c219abf 100644 --- a/mkfiles/groestl_c.mk +++ b/mkfiles/groestl_c.mk @@ -5,6 +5,7 @@ ALGO_NAME := GROESTL_C HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := groestl/ +$(ALGO_NAME)_INCDIR := memxor/ aes/ gf256mul/ hfal/ $(ALGO_NAME)_OBJ := groestl_small.o groestl_large.o memxor.o aes_sbox.o gf256mul.o $(ALGO_NAME)_TEST_BIN := hfal_groestl_large.o hfal_groestl_small.o main-groestl-test.o $(CLI_STD) $(HFAL_STD) $(ALGO_NAME)_NESSIE_TEST := test nessie diff --git a/mkfiles/keccak_c.mk b/mkfiles/keccak_c.mk index 2041438..a76ff42 100644 --- a/mkfiles/keccak_c.mk +++ b/mkfiles/keccak_c.mk @@ -5,6 +5,7 @@ ALGO_NAME := KECCAK_C HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := keccak/ +$(ALGO_NAME)_INCDIR := memxor/ hfal/ $(ALGO_NAME)_OBJ := keccak.o memxor.o $(ALGO_NAME)_TEST_BIN := main-keccak-test.o hfal_keccak.o $(CLI_STD) $(HFAL_STD) $(ALGO_NAME)_NESSIE_TEST := test nessie diff --git a/mkfiles/sha1_c.mk b/mkfiles/sha1_c.mk index 4fef34b..d77ca26 100644 --- a/mkfiles/sha1_c.mk +++ b/mkfiles/sha1_c.mk @@ -5,6 +5,7 @@ ALGO_NAME := SHA1_C HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := sha1/ +$(ALGO_NAME)_INCDIR := hfal/ $(ALGO_NAME)_OBJ := sha1.o $(ALGO_NAME)_TEST_BIN := main-sha1-test.o hfal_sha1.o $(CLI_STD) $(HFAL_STD) $(ALGO_NAME)_NESSIE_TEST := "nessie" diff --git a/mkfiles/sha256_c.mk b/mkfiles/sha256_c.mk index 1caf822..ec9bc6e 100644 --- a/mkfiles/sha256_c.mk +++ b/mkfiles/sha256_c.mk @@ -5,6 +5,7 @@ ALGO_NAME := SHA256_C HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := sha256/ +$(ALGO_NAME)_INCDIR := hfal/ $(ALGO_NAME)_OBJ := sha256.o $(ALGO_NAME)_TEST_BIN := main-sha256-test.o $(CLI_STD) $(HFAL_STD) hfal_sha256.o $(ALGO_NAME)_NESSIE_TEST := "nessie" diff --git a/mkfiles/shabal_c.mk b/mkfiles/shabal_c.mk index d55c033..6b0ff0a 100644 --- a/mkfiles/shabal_c.mk +++ b/mkfiles/shabal_c.mk @@ -5,6 +5,7 @@ ALGO_NAME := SHABAL_C HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := shabal/ +$(ALGO_NAME)_INCDIR := hfal/ $(ALGO_NAME)_OBJ := shabal.o shabal192.o shabal224.o shabal256.o shabal384.o shabal512.o $(ALGO_NAME)_TEST_BIN := main-shabal-test.o hfal_shabal.o $(CLI_STD) $(HFAL_STD) $(ALGO_NAME)_NESSIE_TEST := test nessie diff --git a/mkfiles/skein_c.mk b/mkfiles/skein_c.mk index 676a024..3e94a41 100644 --- a/mkfiles/skein_c.mk +++ b/mkfiles/skein_c.mk @@ -5,6 +5,7 @@ ALGO_NAME := SKEIN_C HASHES += $(ALGO_NAME) $(ALGO_NAME)_DIR := skein/ +$(ALGO_NAME)_INCDIR := threefish/ memxor/ hfal/ $(ALGO_NAME)_OBJ := threefish256_enc.o threefish512_enc.o threefish1024_enc.o threefish_mix_c.o\ ubi256.o ubi512.o ubi1024.o memxor.o skein256.o skein512.o skein1024.o $(ALGO_NAME)_TEST_BIN := main-skein-test.o hfal_skein256.o hfal_skein512.o hfal_skein1024.o $(CLI_STD) $(HFAL_STD) diff --git a/noekeon/noekeon.c b/noekeon/noekeon.c new file mode 100644 index 0000000..b487047 --- /dev/null +++ b/noekeon/noekeon.c @@ -0,0 +1,199 @@ +/* noekeon.c */ +/* + This file is part of the ARM-Crypto-Lib. + Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* + * author: Daniel Otte + * email: daniel.otte@rub.de + * license: GPLv3 or later + * + * + * + */ + +#include +#include + +#ifdef __AVR__ + #include +#endif +#include "noekeon/noekeon.h" +// #include "cli.h" + +#define ROUND_NR 16 + +#define RC_POS 0 + +static +void gamma(uint32_t* a){ + uint32_t tmp; + + a[1] ^= ~((a[3]) | (a[2])); + a[0] ^= a[2] & a[1]; + + tmp=a[3]; a[3]=a[0]; a[0]=tmp; + a[2] ^= a[0] ^ a[1] ^ a[3]; + + a[1] ^= ~((a[3]) | (a[2])); + a[0] ^= a[2] & a[1]; +} + +#define ROTL32(a,n) (((a)<>(32-n))) +#define ROTR32(a,n) (((a)>>n)|((a)<<(32-n))) + +static +void pi1(uint32_t* a){ + a[1] = ROTL32(a[1], 1); + a[2] = ROTL32(a[2], 5); + a[3] = ROTL32(a[3], 2); +} + +static +void pi2(uint32_t* a){ + a[1] = ROTR32(a[1], 1); + a[2] = ROTR32(a[2], 5); + a[3] = ROTR32(a[3], 2); +} + +static +void theta(const uint32_t* k, uint32_t* a){ + uint32_t temp; + + temp = a[0] ^ a[2]; temp ^= ROTR32(temp, 8) ^ ROTL32(temp, 8); + a[1] ^= temp; + a[3] ^= temp; + + a[0] ^= k[0]; + a[1] ^= k[1]; + a[2] ^= k[2]; + a[3] ^= k[3]; + + temp = a[1] ^ a[3]; temp ^= ROTR32(temp, 8) ^ ROTL32(temp, 8); + a[0] ^= temp; + a[2] ^= temp; + +} + +static +void noekeon_round(uint32_t* key, uint32_t* state, uint8_t const1, uint8_t const2){ + ((uint8_t*)state)[RC_POS] ^= const1; + theta(key, state); + ((uint8_t*)state)[RC_POS] ^= const2; + pi1(state); + gamma(state); + pi2(state); +} + +uint8_t rc_tab[] +#ifdef __AVR__ + PROGMEM +#endif + = { +/* 0x80, */ + 0x1B, 0x36, 0x6C, 0xD8, 0xAB, 0x4D, 0x9A, + 0x2F, 0x5E, 0xBC, 0x63, 0xC6, 0x97, 0x35, 0x6A, + 0xD4 +}; +/* for more rounds + 0xD4, 0xB3, 0x7D, 0xFA, 0xEF, 0xC5, 0x91, 0x39, + 0x72, 0xE4, 0xD3, 0xBD, 0x61, 0xC2, 0x9F, 0x25, +*/ + +static +void changendian32(void* a){ + ((uint8_t*)a)[0] ^= ((uint8_t*)a)[3]; + ((uint8_t*)a)[3] ^= ((uint8_t*)a)[0]; + ((uint8_t*)a)[0] ^= ((uint8_t*)a)[3]; + + ((uint8_t*)a)[1] ^= ((uint8_t*)a)[2]; + ((uint8_t*)a)[2] ^= ((uint8_t*)a)[1]; + ((uint8_t*)a)[1] ^= ((uint8_t*)a)[2]; +} + +static +void changendian(void* a){ + changendian32((uint32_t*)(&(((uint32_t*)a)[0]))); + changendian32((uint32_t*)(&(((uint32_t*)a)[1]))); + changendian32((uint32_t*)(&(((uint32_t*)a)[2]))); + changendian32((uint32_t*)(&(((uint32_t*)a)[3]))); +} + +/******************************************************************************/ + +void noekeon_enc(void* buffer, const void* key){ + uint8_t rc=0x80; + uint8_t keyb[16]; + int8_t i; + + memcpy(keyb, key, 16); + changendian(buffer); + changendian(keyb); + + for(i=0; i=0; --i){ +#ifdef __AVR__ + rc = pgm_read_byte(rc_tab+i); +#else + rc = rc_tab[i]; +#endif + noekeon_round((uint32_t*)dkey, (uint32_t*)buffer, 0, rc); + } + theta((uint32_t*)dkey, (uint32_t*)buffer); + ((uint8_t*)buffer)[RC_POS] ^= 0x80; + + changendian(buffer); +} + +void noekeon_init(const void* key, noekeon_ctx_t* ctx){ + uint8_t nullv[16]; + + memset(nullv, 0, 16); + memcpy(ctx, key, 16); + noekeon_enc(ctx, nullv); +} + diff --git a/noekeon/noekeon.h b/noekeon/noekeon.h new file mode 100644 index 0000000..9c046f3 --- /dev/null +++ b/noekeon/noekeon.h @@ -0,0 +1,85 @@ +/* noekeon.h */ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +#ifndef NOEKEON_H_ +#define NOEKEON_H_ + +/** + * \file noekeon.h + * \author Daniel Otte + * \email daniel.otte@rub.de + * \date 2008-04-11 + * \license GPLv3 or later + * \brief Implementation of the Noekeon block cipher + * \ingroup Noekeon + * This is an implementation of the Noekeon block cipher. + * For more details on Noekeon see http://gro.noekeon.org/ + */ + +#include + +/** \typedef noekeon_ctx_t + * \brief holds key data for indirect mode + * + * A variable of this type may hold the key data for the indirect mode. + * For direct mode simply pass the key directly to the encryption or + * decryption function. + */ +typedef uint8_t noekeon_ctx_t[16]; + +/** \fn void noekeon_enc(void* buffer, const void* key) + * \brief noekeon encrytion funtion + * + * This function encrypts a block (64 bit = 8 byte) with the noekeon encrytion + * algorithm. Due to the two modes of noekeon (direct mode and indirect mode) + * the second parameter either points directly to the key (direct mode) or to a + * context generated by the noekeon_init() function (indirect mode). + * \param buffer pointer to the 64 bit (8 byte) block to encrypt + * \param key pointer to either the key (128 bit = 16 byte; direct mode) or + * to the context (indirect mode) + */ +void noekeon_enc(void* buffer, const void* key); + +/** \fn void noekeon_dec(void* buffer, const void* key) + * \brief noekeon encrytion funtion + * + * This function decrypts a block (64 bit = 8 byte) encrypted with the noekeon + * encrytion algorithm. Due to the two modes of noekeon (direct mode and + * indirect mode) the second parameter either points directly to the key + * (direct mode) or to a context generated by the noekeon_init() function + * (indirect mode). + * \param buffer pointer to the 64 bit (8 byte) block to decrypt + * \param key pointer to either the key (128 bit = 16 byte; direct mode) or + * to the context (indirect mode) + */ +void noekeon_dec(void* buffer, const void* key); + + +/** \fn void noekeon_init(const void* key, noekeon_ctx_t* ctx) + * \brief noekeon context generation function for indirect mode + * + * This function generates a context from the supplied key for using + * noekeon in indirect mode. For using noekeon in direct mode supply the key + * direct to the noekeon_enc() and noekeon_dec() functions. + * \param key pointer to the key (128 bit = 16 byte) + * \param ctx pointer to the context to fill with key material + * to the context (indirect mode) + */ +void noekeon_init(const void* key, noekeon_ctx_t* ctx); + +#endif /*NOEKEON_H_*/ diff --git a/noekeon/noekeon_cbc_enc.h b/noekeon/noekeon_cbc_enc.h new file mode 100644 index 0000000..b47048f --- /dev/null +++ b/noekeon/noekeon_cbc_enc.h @@ -0,0 +1,9 @@ +#ifndef NOEKEON_CBC_ENC_H_ +#define NOEKEON_CBC_ENC_H_ + +#include +#include "noekeon/noekeon.h" + +void noekeon_cbc_enc(void* buffer, uint8_t block_cnt, const void* key); + +#endif /*NOEKEON_CBC_ENC_H_*/ diff --git a/groestl/gf256mul.h b/noekeon/noekeon_ctr.h similarity index 72% rename from groestl/gf256mul.h rename to noekeon/noekeon_ctr.h index 87f1cb3..19cbe36 100644 --- a/groestl/gf256mul.h +++ b/noekeon/noekeon_ctr.h @@ -1,4 +1,4 @@ -/* gf256mul.h */ +/* noekeon_ctr.h */ /* This file is part of the AVR-Crypto-Lib. Copyright (C) 2008 Daniel Otte (daniel.otte@rub.de) @@ -16,22 +16,27 @@ You should have received a copy of the GNU General Public License along with this program. If not, see . */ -#ifndef GF256MUL_H_ -#define GF256MUL_H_ - -/** +/* * \author Daniel Otte * \email daniel.otte@rub.de - * \date 2008-12-19 - * \license GPLv3 - * \brief + * \date 2008-08-06 + * \license GPLv3 or later + * * * */ + +#ifndef NOEKEON_CTR_H_ +#define NOEKEON_CTR_H_ #include +#include "noekeon/noekeon.h" -uint8_t gf256mul(uint8_t a, uint8_t b, uint8_t reducer); +typedef struct{ + uint8_t counter[16]; + uint8_t key[16]; +}noekeon_ctr_ctx_t; -#endif /* GF256MUL_H_ */ +void noekeon_ctr_next(void* buffer, const noekeon_ctr_ctx_t* ctx); +#endif /*NOEKEON_CTR_H_*/ diff --git a/noekeon/noekeon_prng.c b/noekeon/noekeon_prng.c new file mode 100644 index 0000000..17c71a5 --- /dev/null +++ b/noekeon/noekeon_prng.c @@ -0,0 +1,67 @@ +/* noekeon_prng.c */ +/* + * This file is part of the ARM-Crypto-Lib. + * Copyright (C) 2006-2010 Daniel Otte (daniel.otte@rub.de) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +/** + * \author Daniel Otte + * \date 2008-08-24 + * \license GPLv3 or later + * \brief random number generator based on noekeon running in CFB-mode + * + */ + +#include "noekeon/noekeon.h" +#include "memxor/memxor.h" +#include +#include + +static uint8_t random_state[16]; +static uint8_t random_key[16]; +static uint8_t i=0; + +uint8_t random8(void){ + static uint8_t sr[16]; + + if(i==0){ + noekeon_enc(random_state, random_key); + memcpy(sr, random_state, 16); + i=15; + return sr[15]; + } + --i; + return sr[i]; +} + +void random_block(void* dest){ + i=0; + noekeon_enc(random_state, random_key); + memcpy(dest, random_state, 16); +} + +void srandom32(uint32_t seed){ + memcpy(random_key, &seed, 4); +} + +void random_seed(const void* buffer){ + memcpy(random_key, buffer, 16); +} + +void random_add(const void* buffer){ + memxor(random_key, buffer, 16); +} + + diff --git a/noekeon/noekeon_prng.h b/noekeon/noekeon_prng.h new file mode 100644 index 0000000..ff9ca03 --- /dev/null +++ b/noekeon/noekeon_prng.h @@ -0,0 +1,40 @@ +/* noekeon_prng.h */ +/* + * This file is part of the AVR-Crypto-Lib. + * Copyright (C) 2006, 2007, 2008 Daniel Otte (daniel.otte@rub.de) + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU General Public License as published by + * the Free Software Foundation, either version 3 of the License, or + * (at your option) any later version. + * + * 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. See the + * GNU General Public License for more details. + * + * You should have received a copy of the GNU General Public License + * along with this program. If not, see . + */ +/** + * \author Daniel Otte + * \date 2008-08-24 + * \license GPLv3 or later + * \brief random number generator based on noekeon running in CFB-mode + * + */ + +#ifndef PRNG_H_ +#define PRNG_H_ + +#include + +uint8_t random8(void); +void random_block(void* dest); +void srandom32(uint32_t seed); +void random_seed(const void* buffer); +void random_add(const void* buffer); + +#endif /* PRNG_H_*/ + + diff --git a/noekeon/omac_noekeon.h b/noekeon/omac_noekeon.h new file mode 100644 index 0000000..c9f1067 --- /dev/null +++ b/noekeon/omac_noekeon.h @@ -0,0 +1,44 @@ +/* + This file is part of the AVR-Crypto-Lib. + Copyright (C) 2008, 2009 Daniel Otte (daniel.otte@rub.de) + + This program is free software: you can redistribute it and/or modify + it under the terms of the GNU General Public License as published by + the Free Software Foundation, either version 3 of the License, or + (at your option) any later version. + + 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. See the + GNU General Public License for more details. + + You should have received a copy of the GNU General Public License + along with this program. If not, see . +*/ +/* + * \author Daniel Otte + * \email daniel.otte@rub.de + * \license GPLv3 or later + * + * + * + */ + +#ifndef NOEKEON_OMAC_H_ +#define NOEKEON_OMAC_H_ + +#include "noekeon/noekeon.h" +#include + +typedef uint8_t omac_noekeon_ctx_t[16]; + +void omac_noekeon_init(omac_noekeon_ctx_t* ctx); +void omac_noekeon_tweak(uint8_t t, const void* key, omac_noekeon_ctx_t* ctx); +void omac_noekeon_next(const void* buffer, const void* key, + omac_noekeon_ctx_t* ctx); +void omac_noekeon_last(const void* buffer, uint8_t length_b, const void* key, + omac_noekeon_ctx_t* ctx); +void omac_noekeon(void* dest, const void* msg, uint16_t msglength_b, + const void* key, uint8_t t); + +#endif /*NOEKEON_OMAC_H_*/ diff --git a/noekeon/omac_noekeon_C.c b/noekeon/omac_noekeon_C.c new file mode 100644 index 0000000..923fc48 --- /dev/null +++ b/noekeon/omac_noekeon_C.c @@ -0,0 +1,74 @@ +#include "noekeon/noekeon.h" +#include "omac_noekeon.h" +#include "memxor/memxor.h" +#include +#include + + +void omac_noekeon_init(omac_noekeon_ctx_t* ctx){ + memset(ctx, 0, 16); +} + + +void omac_noekeon_tweak(uint8_t t, const void* key, omac_noekeon_ctx_t* ctx){ + *ctx[15] = t; + noekeon_enc(ctx, key); +} + +void omac_noekeon_next(const void* buffer, const void* key, omac_noekeon_ctx_t* ctx){ + memxor(ctx, buffer, 16); + noekeon_enc(ctx, key); +} + +static +void omac_noekeon_comppad(uint8_t* pad, const void* key, uint8_t length_b){ + uint8_t c1,c2,r,j; + memset(pad, 0, 16); + noekeon_enc(pad, key); + r=(length_b==128)?1:2; + for(;r!=0;--r){ + c1=0; + for(j=0;j<16;++j){ + c2 = c1; + c1 = (pad[15-j])>>7; + pad[15-j] = ((pad[15-j])<<1) | c2; + } + if(c1){ + pad[15] ^= 0x87; + } + } + if(length_b<128){ + pad[(length_b)/8] ^= 0x80 >> (length_b%8); + } +} + +void omac_noekeon_last(const void* buffer, uint8_t length_b, const void* key, omac_noekeon_ctx_t* ctx){ + while(length_b>128){ + omac_noekeon_next(buffer, key, ctx); + buffer = (uint8_t*)buffer +16; + length_b -= 128; + } + uint8_t pad[16]; + omac_noekeon_comppad(pad, key, length_b); + memxor(pad, buffer, (length_b+7)/8); + omac_noekeon_next(pad, key, ctx); +} + + +void omac_noekeon(void* dest, const void* msg, uint16_t msglength_b, + const void* key, uint8_t t){ + omac_noekeon_init(dest); + if(t!=0xff) + omac_noekeon_tweak(t,key,dest); + while(msglength_b>128){ + omac_noekeon_next(msg, key, dest); + msg = (uint8_t*)msg +16; + msglength_b -= 128; + } + omac_noekeon_last(msg, msglength_b, key, dest); +} + + + + + diff --git a/skein/memxor.c b/skein/memxor.c deleted file mode 100644 index 7485b3e..0000000 --- a/skein/memxor.c +++ /dev/null @@ -1,12 +0,0 @@ -#include - -#include "memxor.h" - -void memxor(void* dest, const void* src, uint16_t n){ - while(n--){ - *((uint8_t*)dest) ^= *((uint8_t*)src); - dest = (uint8_t*)dest +1; - src = (uint8_t*)src +1; - } -} - diff --git a/skein/memxor.h b/skein/memxor.h deleted file mode 100644 index a62a616..0000000 --- a/skein/memxor.h +++ /dev/null @@ -1,7 +0,0 @@ -#ifndef MEMXOR_H_ -#define MEMXOR_H_ -#include - -void memxor(void* dest, const void* src, uint16_t n); - -#endif diff --git a/skein/ubi1024.c b/skein/ubi1024.c index a7d5326..07342b5 100644 --- a/skein/ubi1024.c +++ b/skein/ubi1024.c @@ -27,7 +27,7 @@ #include #include #include "threefish.h" -#include "memxor.h" +#include "memxor/memxor.h" #include "ubi.h" void ubi1024_init(ubi1024_ctx_t* ctx, const void* g, uint8_t type){ diff --git a/skein/ubi256.c b/skein/ubi256.c index 5b0fc57..9eeebd3 100644 --- a/skein/ubi256.c +++ b/skein/ubi256.c @@ -27,7 +27,7 @@ #include #include #include "threefish.h" -#include "memxor.h" +#include "memxor/memxor.h" #include "ubi.h" void ubi256_init(ubi256_ctx_t* ctx, const void* g, uint8_t type){ diff --git a/skein/ubi512.c b/skein/ubi512.c index e0e6dc0..b411690 100644 --- a/skein/ubi512.c +++ b/skein/ubi512.c @@ -27,7 +27,7 @@ #include #include #include "threefish.h" -#include "memxor.h" +#include "memxor/memxor.h" #include "ubi.h" void ubi512_init(ubi512_ctx_t* ctx, const void* g, uint8_t type){ diff --git a/test_src/cmacvs.c b/test_src/cmacvs.c index 393d280..41977c9 100644 --- a/test_src/cmacvs.c +++ b/test_src/cmacvs.c @@ -29,8 +29,8 @@ #include #include #include "blockcipher_descriptor.h" -#include "bcal-basic.h" -#include "bcal-cmac.h" +#include "bcal/bcal-basic.h" +#include "bcal/bcal-cmac.h" #include "cmacvs.h" #include "string-extras.h" #include "cli.h" diff --git a/test_src/main-aes-test.c b/test_src/main-aes-test.c index 8b0f67e..83ec490 100644 --- a/test_src/main-aes-test.c +++ b/test_src/main-aes-test.c @@ -35,18 +35,18 @@ #include "nessie_bc_test.h" #include "performance_test.h" -#include "bcal_aes128.h" -#include "bcal_aes192.h" -#include "bcal_aes256.h" -#include "bcal-cbc.h" -#include "bcal-cfb_byte.h" -#include "bcal-cfb_bit.h" -#include "bcal-ofb.h" -#include "bcal-ctr.h" -#include "bcal-cmac.h" -#include "bcal-eax.h" +#include "bcal/bcal_aes128.h" +#include "bcal/bcal_aes192.h" +#include "bcal/bcal_aes256.h" +#include "bcal/bcal-cbc.h" +#include "bcal/bcal-cfb_byte.h" +#include "bcal/bcal-cfb_bit.h" +#include "bcal/bcal-ofb.h" +#include "bcal/bcal-ctr.h" +#include "bcal/bcal-cmac.h" +#include "bcal/bcal-eax.h" #include "cmacvs.h" -#include "bcal-performance.h" +#include "bcal/bcal-performance.h" char* algo_name = "AES"; diff --git a/test_src/main-blake-test.c b/test_src/main-blake-test.c index 7a6fc12..9159b9a 100644 --- a/test_src/main-blake-test.c +++ b/test_src/main-blake-test.c @@ -33,14 +33,14 @@ #include "shavs.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal-nessie.h" -#include "hfal-performance.h" -#include "hfal-test.h" +#include "hfal/hfal-nessie.h" +#include "hfal/hfal-performance.h" +#include "hfal/hfal-test.h" #include "blake_small.h" #include "blake_large.h" -#include "hfal_blake_small.h" -#include "hfal_blake_large.h" +#include "hfal/hfal_blake_small.h" +#include "hfal/hfal_blake_large.h" char* algo_name = "Blake"; diff --git a/test_src/main-bmw-test.c b/test_src/main-bmw-test.c index 5134743..846fb2b 100644 --- a/test_src/main-bmw-test.c +++ b/test_src/main-bmw-test.c @@ -34,12 +34,12 @@ #include "shavs.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal-nessie.h" -#include "hfal-performance.h" -#include "hfal-test.h" +#include "hfal/hfal-nessie.h" +#include "hfal/hfal-performance.h" +#include "hfal/hfal-test.h" -#include "hfal_bmw_small.h" -#include "hfal_bmw_large.h" +#include "hfal/hfal_bmw_small.h" +#include "hfal/hfal_bmw_large.h" #include "bmw_small.h" #include "bmw_large.h" diff --git a/test_src/main-cubehash-test.c b/test_src/main-cubehash-test.c index e4e7ce7..b998cc3 100644 --- a/test_src/main-cubehash-test.c +++ b/test_src/main-cubehash-test.c @@ -33,12 +33,12 @@ #include "shavs.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal-nessie.h" -#include "hfal-performance.h" -#include "hfal-test.h" +#include "hfal/hfal-nessie.h" +#include "hfal/hfal-performance.h" +#include "hfal/hfal-test.h" #include "cubehash.h" -#include "hfal_cubehash.h" +#include "hfal/hfal_cubehash.h" #include #include diff --git a/test_src/main-echo-test.c b/test_src/main-echo-test.c index a754c2f..75a2add 100644 --- a/test_src/main-echo-test.c +++ b/test_src/main-echo-test.c @@ -33,12 +33,12 @@ #include "shavs.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal-nessie.h" -#include "hfal-performance.h" -#include "hfal-test.h" +#include "hfal/hfal-nessie.h" +#include "hfal/hfal-performance.h" +#include "hfal/hfal-test.h" #include "echo.h" -#include "hfal_echo.h" +#include "hfal/hfal_echo.h" char* algo_name = "Echo"; diff --git a/test_src/main-groestl-test.c b/test_src/main-groestl-test.c index 3ed2409..0a0a944 100644 --- a/test_src/main-groestl-test.c +++ b/test_src/main-groestl-test.c @@ -34,14 +34,14 @@ #include "shavs.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal-nessie.h" -#include "hfal-performance.h" -#include "hfal-test.h" +#include "hfal/hfal-nessie.h" +#include "hfal/hfal-performance.h" +#include "hfal/hfal-test.h" #include "groestl_small.h" #include "groestl_large.h" -#include "hfal_groestl_small.h" -#include "hfal_groestl_large.h" +#include "hfal/hfal_groestl_small.h" +#include "hfal/hfal_groestl_large.h" const char* algo_name = "Groestl"; diff --git a/test_src/main-keccak-test.c b/test_src/main-keccak-test.c index f6ba4de..5823da1 100644 --- a/test_src/main-keccak-test.c +++ b/test_src/main-keccak-test.c @@ -34,12 +34,12 @@ #include "shavs.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal-nessie.h" -#include "hfal-performance.h" -#include "hfal-test.h" +#include "hfal/hfal-nessie.h" +#include "hfal/hfal-performance.h" +#include "hfal/hfal-test.h" #include "keccak.h" -#include "hfal_keccak.h" +#include "hfal/hfal_keccak.h" void uart0_putc(char byte){ uart_putc(UART_0, byte); diff --git a/test_src/main-md5-test.c b/test_src/main-md5-test.c index c0eb562..f3774d3 100644 --- a/test_src/main-md5-test.c +++ b/test_src/main-md5-test.c @@ -29,8 +29,8 @@ #include "md5.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal_md5.h" -#include "hfal-performance.h" +#include "hfal/hfal_md5.h" +#include "hfal/hfal-performance.h" #include #include diff --git a/test_src/main-sha1-test.c b/test_src/main-sha1-test.c index 17e6709..62fa51d 100644 --- a/test_src/main-sha1-test.c +++ b/test_src/main-sha1-test.c @@ -34,12 +34,12 @@ #include "shavs.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal-nessie.h" -#include "hfal-performance.h" -#include "hfal-test.h" +#include "hfal/hfal-nessie.h" +#include "hfal/hfal-performance.h" +#include "hfal/hfal-test.h" #include "sha1.h" -#include "hfal_sha1.h" +#include "hfal/hfal_sha1.h" void uart0_putc(char byte){ uart_putc(UART_0, byte); diff --git a/test_src/main-sha256-test.c b/test_src/main-sha256-test.c index 872e071..66e5018 100644 --- a/test_src/main-sha256-test.c +++ b/test_src/main-sha256-test.c @@ -34,12 +34,12 @@ #include "shavs.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal-nessie.h" -#include "hfal-performance.h" -#include "hfal-test.h" +#include "hfal/hfal-nessie.h" +#include "hfal/hfal-performance.h" +#include "hfal/hfal-test.h" #include "sha256.h" -#include "hfal_sha256.h" +#include "hfal/hfal_sha256.h" void uart0_putc(char byte){ uart_putc(UART_0, byte); diff --git a/test_src/main-shabal-test.c b/test_src/main-shabal-test.c index 27a524a..ab7599d 100644 --- a/test_src/main-shabal-test.c +++ b/test_src/main-shabal-test.c @@ -34,12 +34,12 @@ #include "shavs.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal-nessie.h" -#include "hfal-performance.h" -#include "hfal-test.h" +#include "hfal/hfal-nessie.h" +#include "hfal/hfal-performance.h" +#include "hfal/hfal-test.h" #include "shabal.h" -#include "hfal_shabal.h" +#include "hfal/hfal_shabal.h" void uart0_putc(char byte){ uart_putc(UART_0, byte); diff --git a/test_src/main-skein-test.c b/test_src/main-skein-test.c index b52fd43..3a1d925 100644 --- a/test_src/main-skein-test.c +++ b/test_src/main-skein-test.c @@ -34,14 +34,14 @@ #include "shavs.h" #include "nessie_hash_test.h" #include "performance_test.h" -#include "hfal-nessie.h" -#include "hfal-performance.h" -#include "hfal-test.h" +#include "hfal/hfal-nessie.h" +#include "hfal/hfal-performance.h" +#include "hfal/hfal-test.h" #include "skein.h" -#include "hfal_skein256.h" -#include "hfal_skein512.h" -#include "hfal_skein1024.h" +#include "hfal/hfal_skein256.h" +#include "hfal/hfal_skein512.h" +#include "hfal/hfal_skein1024.h" void uart0_putc(char byte){ diff --git a/test_src/shavs.c b/test_src/shavs.c index 7ac8ec7..70477c6 100644 --- a/test_src/shavs.c +++ b/test_src/shavs.c @@ -29,7 +29,7 @@ #include #include #include "hashfunction_descriptor.h" -#include "hfal-basic.h" +#include "hfal/hfal-basic.h" #include "shavs.h" #include "string-extras.h" #include "cli.h" -- 2.39.5