4 /* nettle, low-level cryptographics library
6 * Copyright (C) 2013 Niels Möller
8 * The nettle library is free software; you can redistribute it and/or modify
9 * it under the terms of the GNU Lesser General Public License as published by
10 * the Free Software Foundation; either version 2.1 of the License, or (at your
11 * option) any later version.
13 * The nettle library is distributed in the hope that it will be useful, but
14 * WITHOUT ANY WARRANTY; without even the implied warranty of MERCHANTABILITY
15 * or FITNESS FOR A PARTICULAR PURPOSE. See the GNU Lesser General Public
16 * License for more details.
18 * You should have received a copy of the GNU Lesser General Public License
19 * along with the nettle library; see the file COPYING.LIB. If not, write to
20 * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor, Boston,
34 _umac_nh (const uint32_t *key
, unsigned length
, const uint8_t *msg
)
39 assert (length
<= 1024);
40 assert (length
% 32 == 0);
41 for (y
= 0; length
> 0; length
-= 32, msg
+= 32, key
+= 8)
44 a
= LE_READ_UINT32 (msg
) + key
[0];
45 b
= LE_READ_UINT32 (msg
+ 16) + key
[4];
46 y
+= (uint64_t) a
* b
;
47 a
= LE_READ_UINT32 (msg
+ 4) + key
[1];
48 b
= LE_READ_UINT32 (msg
+ 20) + key
[5];
49 y
+= (uint64_t) a
* b
;
50 a
= LE_READ_UINT32 (msg
+ 8) + key
[2];
51 b
= LE_READ_UINT32 (msg
+ 24) + key
[6];
52 y
+= (uint64_t) a
* b
;
53 a
= LE_READ_UINT32 (msg
+ 12) + key
[3];
54 b
= LE_READ_UINT32 (msg
+ 28) + key
[7];
55 y
+= (uint64_t) a
* b
;