3 ### Script to construct OCB test vectors
5 ### (c) 2017 Mark Wooding
8 ###----- Licensing notice ---------------------------------------------------
10 ### This program is free software; you can redistribute it and/or modify
11 ### it under the terms of the GNU General Public License as published by
12 ### the Free Software Foundation; either version 2 of the License, or
13 ### (at your option) any later version.
15 ### This program is distributed in the hope that it will be useful,
16 ### but WITHOUT ANY WARRANTY; without even the implied warranty of
17 ### MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
18 ### GNU General Public License for more details.
20 ### You should have received a copy of the GNU General Public License
21 ### along with this program; if not, write to the Free Software Foundation,
22 ### Inc., 59 Temple Place - Suite 330, Boston, MA 02111-1307, USA.
27 v_tag
= $(call v_tag_
$V,$1)
28 v_tag_0
= @printf
" %-8s %s\n" "$1" "$@";
32 misc128_K0
= 000102030405060708090a0b0c0d0e0f
33 misc128_K1
= 0f0e0d0c0b0a09080706050403020100
35 misc192_K0
= 000102030405060708090a0b0c0d0e0f1011121314151617
36 misc192_K1
= 17161514131211100f0e0d0c0b0a09080706050403020100
38 misc256_K0
= 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f
39 misc256_K1
= 1f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100
41 misc512_K0
= 000102030405060708090a0b0c0d0e0f101112131415161718191a1b1c1d1e1f202122232425262728292a2b2c2d2e2f303132333435363738393a3b3c3d3e3f
42 misc512_K1
= 3f3e3d3c3b3a393837363534333231302f2e2d2c2b2a292827262524232221201f1e1d1c1b1a191817161514131211100f0e0d0c0b0a09080706050403020100
45 b96_N0
= 887766554433221100
46 b128_N0
= bbaa99887766554433221100
47 b192_N0
= 2110ffeeddccbbaa99887766554433221100
48 b256_N0
= 8776655443322110ffeeddccbbaa99887766554433221100
49 b512_N0
= aa9998887776665554443332221110000ffeeddccbbaa9988776655443322110ffeeddccbbaa99887766554433221100
55 des3_K0
= 010102020404070708080b0b0d0d0e0e1010131315151616
56 des3_K1
= fefedcdcbaba98987676545432321010fedcba9876543210
57 des3_KSZS
= 64 128 192
63 aes_K0
= $(misc128_K0
)
64 aes_K1
= $(misc128_K1
)
65 aes_KSZS
= 128 192 256
68 rijndael192_PRETTY
= Rijndael192
69 rijndael192_NAME
= rijndael192
70 rijndael192_BLKSZ
= 192
71 rijndael192_K0
= $(misc192_K0
)
72 rijndael192_K1
= $(misc192_K1
)
73 rijndael192_KSZS
= $(aes_KSZS
)
76 rijndael256_PRETTY
= Rijndael256
77 rijndael256_NAME
= rijndael256
78 rijndael256_BLKSZ
= 256
79 rijndael256_K0
= $(misc256_K0
)
80 rijndael256_K1
= $(misc256_K1
)
81 rijndael256_KSZS
= $(aes_KSZS
)
88 kalyna128_PRETTY
= Kalyna-128
89 kalyna128_NAME
= kalyna128
91 kalyna128_K0
= $(misc128_K0
)
92 kalyna128_K1
= $(misc128_K1
)
93 kalyna128_KSZS
= 128 256
96 kalyna256_PRETTY
= Kalyna-256
97 kalyna256_NAME
= kalyna256
99 kalyna256_K0
= $(misc256_K0
)
100 kalyna256_K1
= $(misc256_K1
)
101 kalyna256_KSZS
= 256 512
104 kalyna512_PRETTY
= Kalyna-512
105 kalyna512_NAME
= kalyna512
106 kalyna512_BLKSZ
= 512
107 kalyna512_K0
= $(misc512_K0
)
108 kalyna512_K1
= $(misc512_K1
)
114 lraes
$1_PRETTY = LRAES
$1
115 lraes
$1_NAME = lraes
$1
117 lraes
$1_K0 = $(misc
$2_K0)
118 lraes
$1_K1 = $(misc
$2_K1)
119 lraes
$1_KSZS = $(aes_KSZS
)
122 $(eval
$(call def-lraes
,64,128))
123 $(eval
$(call def-lraes
,96,128))
124 $(eval
$(call def-lraes
,128,128))
125 $(eval
$(call def-lraes
,192,192))
126 $(eval
$(call def-lraes
,256,256))
129 dlraes512_PRETTY
= DLRAES512
130 dlraes512_NAME
= dlraes512
131 dlraes512_BLKSZ
= 512
132 dlraes512_K0
= $(misc256_K0
)
133 dlraes512_K1
= $(misc256_K1
)
134 dlraes512_KSZS
= $(aes_KSZS
)
136 BLKSZS
= $(sort $(foreach c
,$(BLKC
),$($c_BLKSZ)))
141 $(call v_tag
,GEN
)set
-e
; exec
>$@.new
; \
142 echo
'### -*-makefile-*- AUTOMATICALLY GENERATED: DO NOT EDIT'; \
143 $(foreach b
,$(BLKSZS
),b
$b_N0=$(b
$b_N0); ) \
145 for blksz in
$(BLKSZS
); do \
148 for i in
1 2 3 4 5; do \
149 w
=$$(( $$i*$$blksz/16 )); \
150 hm
="$$hm $$w,$$w $$w,0 0,$$w"; \
152 echo
"b$${blksz}_HMSZS = $$hm"; \
153 echo
"b$${blksz}_HMSZV = $$w,$$w"; \
155 printf
"b$${blksz}_TSZ0 = %d\n" $$(( $$blksz )); \
156 printf
"b$${blksz}_TSZ1 = %d\n" $$(( $$blksz*3/4 )); \
157 printf
"b$${blksz}_TSZ2 = %d\n" $$(( $$blksz/2 )); \
159 eval n0
=\
$$b$${blksz}_N0
; \
160 N0
=$$(echo
$$n0 | tr a-f A-F
); \
161 n1
=$$(echo
"16o 16i $$N0 D + p" | dc | tr A-F a-f | tr
-d
'\\\n'); \
162 nsz
=$$(( 4*($$(echo
$$n0 | wc
-c
) - 1) )); \
163 echo
"b$${blksz}_N1 = $$n1"; \
164 echo
"b$${blksz}_NSZ0 = $$nsz"; \
171 blkc
= $(word 1,$(subst -, ,$(subst .
, ,$1)))
172 blkc-blksz
= $($(call blkc
,$1)_BLKSZ
)
173 blkc-pretty
= $($(call blkc
,$1)_PRETTY
)
174 blkc-name
= $($(call blkc
,$1)_NAME
)
175 blkc-k0
= $($(call blkc
,$1)_K0
)
176 blkc-k1
= $($(call blkc
,$1)_K1
)
177 blkc-kszs
= $($(call blkc
,$1)_KSZS
)
179 blkc-hmszs
= $(b
$(call blkc-blksz
,$1)_HMSZS
)
180 blkc-hmszv
= $(b
$(call blkc-blksz
,$1)_HMSZV
)
181 blkc-tsz0
= $(b
$(call blkc-blksz
,$1)_TSZ0
)
182 blkc-tsz1
= $(b
$(call blkc-blksz
,$1)_TSZ1
)
183 blkc-tsz2
= $(b
$(call blkc-blksz
,$1)_TSZ2
)
184 blkc-n0
= $(b
$(call blkc-blksz
,$1)_N0
)
185 blkc-n1
= $(b
$(call blkc-blksz
,$1)_N1
)
186 blkc-nsz0
= $(b
$(call blkc-blksz
,$1)_NSZ0
)
190 TARGETS
+= $(OCBKAT0
)
191 OCBKAT0
= $(foreach b
,$(BLKC
), ocb3-
$b-t
$(b
$($b_BLKSZ)_TSZ0
)-n
$(b
$($b_BLKSZ)_NSZ0
).kat
)
192 $(OCBKAT0
): ocb3-
%: ocbgen Makefile
193 $(call v_tag
,KAT
).
/ocbgen
>$@.new ocb3
$(call blkc-name
,$*) kat \
194 $(call blkc-k0
,$*) $(call blkc-n0
,$*)+ \
195 $$(( $(call blkc-tsz0
,$*)/8 )) $(call blkc-hmszs
,$*)
198 TARGETS
+= $(OCBKAT1
)
199 OCBKAT1
= $(foreach b
,$(BLKC
), ocb3-
$b-t
$(b
$($b_BLKSZ)_TSZ1
)-n
$(b
$($b_BLKSZ)_NSZ0
).kat
)
200 $(OCBKAT1
): ocb3-
%: ocbgen Makefile
201 $(call v_tag
,KAT
).
/ocbgen
>$@.new ocb3
$(call blkc-name
,$*) kat \
202 $(call blkc-k1
,$*) $(call blkc-n0
,$*)+ \
203 $$(( $(call blkc-tsz1
,$*)/8 )) $(call blkc-hmszs
,$*)
206 TARGETS
+= $(OCBVERBOSE
)
207 OCBVERBOSE
= $(foreach b
,$(BLKC
), ocb3-
$b-t
$(b
$($b_BLKSZ)_TSZ0
)-n
$(b
$($b_BLKSZ)_NSZ0
).verbose
)
208 $(OCBVERBOSE
): ocb3-
%: ocbgen Makefile
209 $(call v_tag
,VERBOSE
).
/ocbgen
>$@.new
-v ocb3
$(call blkc-name
,$*) kat \
210 $(call blkc-k0
,$*) $(call blkc-n1
,$*) \
211 $$(( $(call blkc-tsz0
,$*)/8 )) $(call blkc-hmszv
,$*)
215 OCBMCT
= $(foreach b
,$(BLKC
), ocb3-
$b-n
$(b
$($b_BLKSZ)_NSZ0
).mct
)
216 $(OCBMCT
): ocb3-
%: ocbgen Makefile
217 $(call v_tag
,MCT
)set
-e
; \
219 $(call blkc-tsz0
,$*) \
220 $(call blkc-tsz1
,$*) \
221 $(call blkc-tsz2
,$*); \
223 for k in
$(call blkc-kszs
,$*); do \
224 printf
"OCB3-%s-%d-TAGLEN%d: " \
225 $(call blkc-pretty
,$*) $$k $$t; \
226 .
/ocbgen ocb3
$(call blkc-name
,$*) mct \
227 $$(( $$k/8 )) $$(( $(call blkc-nsz0
,$*)/8 )) $$(( $$t/8 )); \
232 lraes64_M0
= 0011223344556677
233 lraes96_M0
= 00112233445566778899aabb
234 lraes128_M0
= 00112233445566778899aabbccddeeff
235 lraes192_M0
= 00112233445566778899aabbccddeeff0112233445566778
236 lraes256_M0
= 00112233445566778899aabbccddeeff0112233445566778899aabbccddeeff0
237 lraes512_M0
= 00112233445566778899aabbccddeeff0112233445566778899aabbccddeeff00000111122223333444455556666777788889999aaaabbbbccccddddeeeeffff
239 TARGETS
+= $(LRAESVERBOSE
)
240 LRAESVERBOSE
= $(foreach w
,$(LRAES
), lraes
$w.verbose
)
241 $(LRAESVERBOSE
): lraes
%.verbose
: ocbgen Makefile
242 $(call v_tag
,LRAES
).
/ocbgen
>$@.new ocb3 rijndael lraes
$$(( $*/8 )) \
243 $(lraes
$*_K0
) $(lraes
$*_M0
)
246 TARGETS
+= dlraes512.verbose
247 dlraes512.verbose
: ocbgen Makefile
248 $(call v_tag
,LRAES
).
/ocbgen
>$@.new ocb3 lraes256 lraes
64 \
249 $(dlraes512_K0
) $(lraes512_M0
)
261 for i in
$(DIST
); do ln
$$i $(DISTDIR
)/; done
262 for i in
$(TARGETS
); do ln
$$i $(DISTDIR
)/; done
263 tar cvfa
$(DISTDIR
).
tar.gz
$(DISTDIR
)
267 clean::; rm -f
$(CLEAN
)