From 22b35e78f306e87bc79b88135c1806328865ad47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Niels=20M=C3=B6ller?= <nisse@lysator.liu.se> Date: Tue, 16 Apr 2013 08:08:38 +0200 Subject: [PATCH] Generate umac test vectors with incremented nonces. --- ChangeLog | 5 ++ misc/umac/.gitignore | 1 + misc/umac/mkvectors | 25 +++++++- misc/umac/umac.py | 8 ++- misc/umac/vectors.out | 134 +++++++++++++++++++++++++++++++++++++++++- 5 files changed, 166 insertions(+), 7 deletions(-) create mode 100644 misc/umac/.gitignore diff --git a/ChangeLog b/ChangeLog index 59f37bf3..c1c2ad11 100644 --- a/ChangeLog +++ b/ChangeLog @@ -1,5 +1,10 @@ 2013-04-16 Niels Möller <nisse@lysator.liu.se> + * misc/umac/umac.py: UMAC reference implementation. + * misc/umac/rijndael.py: AES implementation used by umac.py. + * misc/umac/mkvectors: Script to generate UMAC test vectors. + * misc/umac/vectors.out: Generated test vectors. + * umac32.c (umac32_digest): Fix nonce increment, use INCREMENT macro. * umac64.c (umac64_digest): Likewise. diff --git a/misc/umac/.gitignore b/misc/umac/.gitignore new file mode 100644 index 00000000..0d20b648 --- /dev/null +++ b/misc/umac/.gitignore @@ -0,0 +1 @@ +*.pyc diff --git a/misc/umac/mkvectors b/misc/umac/mkvectors index dc211ab2..50e3ab64 100755 --- a/misc/umac/mkvectors +++ b/misc/umac/mkvectors @@ -8,7 +8,11 @@ vector () { data="$3" echo "nonce:" $nonce echo "msg length:" $length - echo "data (repeated):" $data + if [ $length != "`expr length "$data"`" ] ; then + echo "data (repeated):" $data + else + echo "data:" $data + fi for tag_len in 32 64 96 128 ; do tag=`python repeat.py "$data" "$length" | python umac.py "$tag_len" "$nonce"` echo "tag$tag_len:" $tag @@ -65,3 +69,22 @@ vector ${NONCE:0:11} 16778241 $DATA vector ${NONCE:0:12} 16778242 $DATA vector ${NONCE:0:13} 16778243 $DATA vector ${NONCE:0:14} 16778244 $DATA + +vector '#00000000000000000000000000000000' 4 zero +vector '#00000000000000000000000000000001' 4 zero +vector '#00000000000000000000000000000002' 4 zero +vector '#00000000000000000000000000000003' 4 zero +vector '#00000000000000000000000000000004' 4 zero +vector '#00000000000000000000000000000005' 4 zero + +vector 'a' 7 nonce-a +vector 'b' 7 nonce-a +vector 'c' 7 nonce-a +vector 'd' 7 nonce-a +vector 'e' 7 nonce-a + +vector '#beafcafe' 15 nonce-beaf-cafe +vector '#beafcaff' 15 nonce-beaf-cafe +vector '#beafcb00' 15 nonce-beaf-cafe +vector '#beafcb01' 15 nonce-beaf-cafe +vector '#beafcb02' 15 nonce-beaf-cafe diff --git a/misc/umac/umac.py b/misc/umac/umac.py index a9383f13..577dd51b 100644 --- a/misc/umac/umac.py +++ b/misc/umac/umac.py @@ -9,6 +9,7 @@ import rijndael import struct import fileinput import sys +import binascii if len(sys.argv) < 3: sys.stderr.write('Usage: umac [taglen] [nonce]\n') @@ -116,9 +117,7 @@ class umac: res += (a & 0xffff) * self.L3Key[i][0][j] a >>= 16 self.L3Out.append(((res % P36) & M32) ^ self.L3Key[i][1]) - print "L1Out:", self.L1Out - print "L2Out:", L2Out - print "L3Out:", self.L3Out + def umacUpdate(self, inString): self.uhashUpdate(inString) @@ -136,6 +135,9 @@ class umac: self.L3Out = list() return result +if nonce[0] == "#": + nonce = binascii.unhexlify(nonce[1:]) + u = umac('abcdefghijklmnop', taglen) last_block = sys.stdin.read(1024) diff --git a/misc/umac/vectors.out b/misc/umac/vectors.out index ebd7ef32..c1d1e90f 100644 --- a/misc/umac/vectors.out +++ b/misc/umac/vectors.out @@ -1,6 +1,6 @@ nonce: bcdefghi msg length: 0 -data (repeated): +data: tag32: 113145fb tag64: 6e155fad26900be1 tag96: 32fedb100c79ad58f07ff764 @@ -48,7 +48,7 @@ tag128: a621c2457c0012e64f3fdae9e7e1870c nonce: bcdefghi msg length: 3 -data (repeated): abc +data: abc tag32: abf3a3a0 tag64: d4d7b9f6bd4fbfcf tag96: 883c3d4b97a61976ffcf2323 @@ -88,7 +88,7 @@ tag128: 1ae6e02d73aa9ab2a27fb89e014dc07b nonce: bcde msg length: 3 -data (repeated): def +data: def tag32: e8c1eb59 tag64: c81cf22342e84302 tag96: 82626d0d575e01038e5e2cc6 @@ -302,3 +302,131 @@ tag64: 04f163b7c2d5d849 tag96: 77a26f7387d1dcd39378a322 tag128: 77a26f7387d1dcd39378a3220652cff7 +nonce: #00000000000000000000000000000000 +msg length: 4 +data: zero +tag32: a0e94011 +tag64: a0e940111c9c2cd5 +tag96: a0e940111c9c2cd5fa59090e +tag128: a0e940111c9c2cd5fa59090e3ac2061f + +nonce: #00000000000000000000000000000001 +msg length: 4 +data: zero +tag32: 8c6fea51 +tag64: 6d8971434be8ee41 +tag96: cbbf18b799fd0f4afb9216e5 +tag128: cbbf18b799fd0f4afb9216e52a89f247 + +nonce: #00000000000000000000000000000002 +msg length: 4 +data: zero +tag32: 6d897143 +tag64: c9c9aef87e2be502 +tag96: c9c9aef87e2be50237716af8 +tag128: c9c9aef87e2be50237716af8e24f8959 + +nonce: #00000000000000000000000000000003 +msg length: 4 +data: zero +tag32: db1b28c5 +tag64: a0a112b593656107 +tag96: d6e96ef461f54d1c85aa66cb +tag128: d6e96ef461f54d1c85aa66cbd76ca336 + +nonce: #00000000000000000000000000000004 +msg length: 4 +data: zero +tag32: a75e23b7 +tag64: a75e23b7d419e03a +tag96: a75e23b7d419e03a02d55ebf +tag128: a75e23b7d419e03a02d55ebf1ba62824 + +nonce: #00000000000000000000000000000005 +msg length: 4 +data: zero +tag32: 44ea26be +tag64: 950526f26a8cc07a +tag96: 2e63031d182a59b84f148d9a +tag128: 2e63031d182a59b84f148d9a91de70a3 + +nonce: a +msg length: 7 +data: nonce-a +tag32: 81b4ac24 +tag64: b7e8aad0da6e7f99 +tag96: d7604bffb5e368da5fe564da +tag128: d7604bffb5e368da5fe564da0068d2cc + +nonce: b +msg length: 7 +data: nonce-a +tag32: b7e8aad0 +tag64: 138814c6a03bdadf +tag96: 138814c6a03bdadff7f1666e +tag128: 138814c6a03bdadff7f1666e1bd881aa + +nonce: c +msg length: 7 +data: nonce-a +tag32: f70246fe +tag64: fb77dd1cd4c7074f +tag96: 86a016d9e67957c8ab5ebb78 +tag128: 86a016d9e67957c8ab5ebb78a673e4e9 + +nonce: d +msg length: 7 +data: nonce-a +tag32: 0595f0bf +tag64: 0595f0bf8585c7e2 +tag96: 0595f0bf8585c7e28dfab005 +tag128: 0595f0bf8585c7e28dfab00598d4e612 + +nonce: e +msg length: 7 +data: nonce-a +tag32: a8e9fe85 +tag64: 817c0b7757cb60f7 +tag96: 3266ec16a9d85b4f0dc74ec8 +tag128: 3266ec16a9d85b4f0dc74ec8272238a9 + +nonce: #beafcafe +msg length: 15 +data: nonce-beaf-cafe +tag32: f19d9dc1 +tag64: 9e878413aa079032 +tag96: 9e878413aa0790329604f3b6 +tag128: 9e878413aa0790329604f3b6ae980e58 + +nonce: #beafcaff +msg length: 15 +data: nonce-beaf-cafe +tag32: 4604a56a +tag64: 9cfd7af0bb107748 +tag96: f2b2dd5dab08bb3bc5e9a83e +tag128: f2b2dd5dab08bb3bc5e9a83e1b4ab2e7 + +nonce: #beafcb00 +msg length: 15 +data: nonce-beaf-cafe +tag32: 4ba9420e +tag64: 4ba9420e55b6ba13 +tag96: 4ba9420e55b6ba137d03443f +tag128: 4ba9420e55b6ba137d03443f6ee01734 + +nonce: #beafcb01 +msg length: 15 +data: nonce-beaf-cafe +tag32: da86ff71 +tag64: 77facd797b686e24 +tag96: 2721ca2e1bcda53a54ae65e0 +tag128: 2721ca2e1bcda53a54ae65e0da139c0d + +nonce: #beafcb02 +msg length: 15 +data: nonce-beaf-cafe +tag32: 77facd79 +tag64: 9000c0de4f5f7236 +tag96: 9000c0de4f5f7236b81ae1a5 +tag128: 9000c0de4f5f7236b81ae1a52e78a821 + -- GitLab