### -*-makefile-*- ### ### Script to construct OCB test vectors ### ### (c) 2017 Mark Wooding ### ###----- Licensing notice --------------------------------------------------- ### ### 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 2 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, write to the Free Software Foundation, ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA. all:: V = 0 v_tag = $(call v_tag_$V,$1) v_tag_0 = @printf " %-8s %s\n" "$1" "$@"; V_AT = $(V_AT_$V) V_AT_0 = @ misc128_K0 = 000102030405060708090a0b0c0d0e0f misc128_K1 = 0f0e0d0c0b0a09080706050403020100 misc192_K0 = 000102030405060708090a0b0c0d0e0f1011121314151617 misc192_K1 = 17161514131211100f0e0d0c0b0a09080706050403020100 misc256_K0 = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f misc256_K1 = 1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100 misc512_K0 = 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f misc512_K1 = 3f3e3d3c3b3a393837363534333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100 b64_N0 = 554433221100 b96_N0 = 887766554433221100 b128_N0 = bbaa99887766554433221100 b192_N0 = 2110ffeeddccbbaa99887766554433221100 b256_N0 = 8776655443322110ffeeddccbbaa99887766554433221100 b512_N0 = aa9998887776665554443332221110000ffeeddccbbaa9988776655443322110ffeeddccbbaa99887766554433221100 BLKC += des3 des3_PRETTY = 3DES des3_NAME = des3 des3_BLKSZ = 64 des3_K0 = 010102020404070708080b0b0d0d0e0e1010131315151616 des3_K1 = fefedcdcbaba98987676545432321010fedcba9876543210 des3_KSZS = 64 128 192 BLKC += aes aes_PRETTY = AES aes_NAME = rijndael aes_BLKSZ = 128 aes_K0 = $(misc128_K0) aes_K1 = $(misc128_K1) aes_KSZS = 128 192 256 BLKC += rijndael192 rijndael192_PRETTY = Rijndael192 rijndael192_NAME = rijndael192 rijndael192_BLKSZ = 192 rijndael192_K0 = $(misc192_K0) rijndael192_K1 = $(misc192_K1) rijndael192_KSZS = $(aes_KSZS) BLKC += rijndael256 rijndael256_PRETTY = Rijndael256 rijndael256_NAME = rijndael256 rijndael256_BLKSZ = 256 rijndael256_K0 = $(misc256_K0) rijndael256_K1 = $(misc256_K1) rijndael256_KSZS = $(aes_KSZS) ifdef HAVE_KALYNA BLKC += $(KALYNA) endif KALYNA += kalyna128 kalyna128_PRETTY = Kalyna-128 kalyna128_NAME = kalyna128 kalyna128_BLKSZ = 128 kalyna128_K0 = $(misc128_K0) kalyna128_K1 = $(misc128_K1) kalyna128_KSZS = 128 256 KALYNA += kalyna256 kalyna256_PRETTY = Kalyna-256 kalyna256_NAME = kalyna256 kalyna256_BLKSZ = 256 kalyna256_K0 = $(misc256_K0) kalyna256_K1 = $(misc256_K1) kalyna256_KSZS = 256 512 KALYNA += kalyna512 kalyna512_PRETTY = Kalyna-512 kalyna512_NAME = kalyna512 kalyna512_BLKSZ = 512 kalyna512_K0 = $(misc512_K0) kalyna512_K1 = $(misc512_K1) kalyna512_KSZS = 512 define def-lraes LRAES += $1 BLKC += lraes$1 lraes$1_PRETTY = LRAES$1 lraes$1_NAME = lraes$1 lraes$1_BLKSZ = $1 lraes$1_K0 = $(misc$2_K0) lraes$1_K1 = $(misc$2_K1) lraes$1_KSZS = $(aes_KSZS) endef $(eval $(call def-lraes,64,128)) $(eval $(call def-lraes,96,128)) $(eval $(call def-lraes,128,128)) $(eval $(call def-lraes,192,192)) $(eval $(call def-lraes,256,256)) BLKC += dlraes512 dlraes512_PRETTY = DLRAES512 dlraes512_NAME = dlraes512 dlraes512_BLKSZ = 512 dlraes512_K0 = $(misc256_K0) dlraes512_K1 = $(misc256_K1) dlraes512_KSZS = $(aes_KSZS) BLKSZS = $(sort $(foreach c,$(BLKC),$($c_BLKSZ))) DIST += Makefile auto.mk: Makefile $(call v_tag,GEN)set -e; exec >$@.new; \ echo '### -*-makefile-*- AUTOMATICALLY GENERATED: DO NOT EDIT'; \ $(foreach b,$(BLKSZS),b$b_N0=$(b$b_N0); ) \ \ for blksz in $(BLKSZS); do \ echo; \ hm="0,0"; \ for i in 1 2 3 4 5; do \ w=$$(( $$i*$$blksz/16 )); \ hm="$$hm $$w,$$w $$w,0 0,$$w"; \ done; \ echo "b$${blksz}_HMSZS = $$hm"; \ echo "b$${blksz}_HMSZV = $$w,$$w"; \ \ printf "b$${blksz}_TSZ0 = %d\n" $$(( $$blksz )); \ printf "b$${blksz}_TSZ1 = %d\n" $$(( $$blksz*3/4 )); \ printf "b$${blksz}_TSZ2 = %d\n" $$(( $$blksz/2 )); \ \ eval n0=\$$b$${blksz}_N0; \ N0=$$(echo $$n0 | tr a-f A-F); \ n1=$$(echo "16o 16i $$N0 D + p" | dc | tr A-F a-f | tr -d '\\\n'); \ nsz=$$(( 4*($$(echo $$n0 | wc -c) - 1) )); \ echo "b$${blksz}_N1 = $$n1"; \ echo "b$${blksz}_NSZ0 = $$nsz"; \ done; \ \ mv $@.new $@ include auto.mk CLEAN += auto.mk blkc = $(word 1,$(subst -, ,$(subst ., ,$1))) blkc-blksz = $($(call blkc,$1)_BLKSZ) blkc-pretty = $($(call blkc,$1)_PRETTY) blkc-name = $($(call blkc,$1)_NAME) blkc-k0 = $($(call blkc,$1)_K0) blkc-k1 = $($(call blkc,$1)_K1) blkc-kszs = $($(call blkc,$1)_KSZS) blkc-hmszs = $(b$(call blkc-blksz,$1)_HMSZS) blkc-hmszv = $(b$(call blkc-blksz,$1)_HMSZV) blkc-tsz0 = $(b$(call blkc-blksz,$1)_TSZ0) blkc-tsz1 = $(b$(call blkc-blksz,$1)_TSZ1) blkc-tsz2 = $(b$(call blkc-blksz,$1)_TSZ2) blkc-n0 = $(b$(call blkc-blksz,$1)_N0) blkc-n1 = $(b$(call blkc-blksz,$1)_N1) blkc-nsz0 = $(b$(call blkc-blksz,$1)_NSZ0) DIST += ocbgen TARGETS += $(OCBKAT0) OCBKAT0 = $(foreach b,$(BLKC), ocb3-$b-t$(b$($b_BLKSZ)_TSZ0)-n$(b$($b_BLKSZ)_NSZ0).kat) $(OCBKAT0): ocb3-%: ocbgen Makefile $(call v_tag,KAT)./ocbgen >$@.new ocb3 $(call blkc-name,$*) kat \ $(call blkc-k0,$*) $(call blkc-n0,$*)+ \ $$(( $(call blkc-tsz0,$*)/8 )) $(call blkc-hmszs,$*) $(V_AT)mv $@.new $@ TARGETS += $(OCBKAT1) OCBKAT1 = $(foreach b,$(BLKC), ocb3-$b-t$(b$($b_BLKSZ)_TSZ1)-n$(b$($b_BLKSZ)_NSZ0).kat) $(OCBKAT1): ocb3-%: ocbgen Makefile $(call v_tag,KAT)./ocbgen >$@.new ocb3 $(call blkc-name,$*) kat \ $(call blkc-k1,$*) $(call blkc-n0,$*)+ \ $$(( $(call blkc-tsz1,$*)/8 )) $(call blkc-hmszs,$*) $(V_AT)mv $@.new $@ TARGETS += $(OCBVERBOSE) OCBVERBOSE = $(foreach b,$(BLKC), ocb3-$b-t$(b$($b_BLKSZ)_TSZ0)-n$(b$($b_BLKSZ)_NSZ0).verbose) $(OCBVERBOSE): ocb3-%: ocbgen Makefile $(call v_tag,VERBOSE)./ocbgen >$@.new -v ocb3 $(call blkc-name,$*) kat \ $(call blkc-k0,$*) $(call blkc-n1,$*) \ $$(( $(call blkc-tsz0,$*)/8 )) $(call blkc-hmszv,$*) $(V_AT)mv $@.new $@ TARGETS += $(OCBMCT) OCBMCT = $(foreach b,$(BLKC), ocb3-$b-n$(b$($b_BLKSZ)_NSZ0).mct) $(OCBMCT): ocb3-%: ocbgen Makefile $(call v_tag,MCT)set -e; \ for t in \ $(call blkc-tsz0,$*) \ $(call blkc-tsz1,$*) \ $(call blkc-tsz2,$*); \ do \ for k in $(call blkc-kszs,$*); do \ printf "OCB3-%s-%d-TAGLEN%d: " \ $(call blkc-pretty,$*) $$k $$t; \ ./ocbgen ocb3 $(call blkc-name,$*) mct \ $$(( $$k/8 )) $$(( $(call blkc-nsz0,$*)/8 )) $$(( $$t/8 )); \ done; \ done >$@.new $(V_AT)mv $@.new $@ lraes64_M0 = 0011223344556677 lraes96_M0 = 00112233445566778899aabb lraes128_M0 = 00112233445566778899aabbccddeeff lraes192_M0 = 00112233445566778899aabbccddeeff0112233445566778 lraes256_M0 = 00112233445566778899aabbccddeeff0112233445566778899aabbccddeeff0 lraes512_M0 = 00112233445566778899aabbccddeeff0112233445566778899aabbccddeeff00000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff TARGETS += $(LRAESVERBOSE) LRAESVERBOSE = $(foreach w,$(LRAES), lraes$w.verbose) $(LRAESVERBOSE): lraes%.verbose: ocbgen Makefile $(call v_tag,LRAES)./ocbgen >$@.new ocb3 rijndael lraes $$(( $*/8 )) \ $(lraes$*_K0) $(lraes$*_M0) $(V_AT)mv $@.new $@ TARGETS += dlraes512.verbose dlraes512.verbose: ocbgen Makefile $(call v_tag,LRAES)./ocbgen >$@.new ocb3 lraes256 lraes 64 \ $(dlraes512_K0) $(lraes512_M0) $(V_AT)mv $@.new $@ all:: $(TARGETS) DIST += README DISTDIR = ocb-tv dist: all rm -rf $(DISTDIR) mkdir $(DISTDIR) for i in $(DIST); do ln $$i $(DISTDIR)/; done for i in $(TARGETS); do ln $$i $(DISTDIR)/; done tar cvfa $(DISTDIR).tar.gz $(DISTDIR) rm -rf $(DISTDIR) CLEAN += $(TARGETS) clean::; rm -f $(CLEAN)