int/ecdsa-compute-k.c int/ecdsa-compute-k.h \
int/mpn-base256.c int/mpn-base256.h \
int/block8.h backport/block-internal.h \
- int/rsa-pad.c
+ int/rsa-pad.c int/nettle-internal.h
if WINDOWS
if HAVE_BCRYPT
gost/acpkm.c gost/acpkm.h \
gost/cmac.h gost/cmac-magma.c gost/cmac-kuznyechik.c
endif
+
+if NEED_SIV_GCM
+libcrypto_la_SOURCES += \
+ backport/bswap-internal.h \
+ backport/ctr-internal.h \
+ backport/ctr.h \
+ backport/ctr16.c \
+ backport/ghash-internal.h \
+ backport/ghash-set-key.c \
+ backport/ghash-update.c \
+ backport/siv-gcm-aes128.c \
+ backport/siv-gcm-aes256.c \
+ backport/siv-gcm.c \
+ backport/siv-gcm.h \
+ backport/siv-ghash-set-key.c \
+ backport/siv-ghash-update.c \
+ $(NULL)
+endif
--- /dev/null
+/* nettle-internal.h
+
+ Things that are used only by the testsuite and benchmark, and
+ not included in the library.
+
+ Copyright (C) 2002, 2014 Niels Möller
+
+ This file is part of GNU Nettle.
+
+ GNU Nettle is free software: you can redistribute it and/or
+ modify it under the terms of either:
+
+ * the GNU Lesser General Public License as published by the Free
+ Software Foundation; either version 3 of the License, or (at your
+ option) any later version.
+
+ or
+
+ * 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.
+
+ or both in parallel, as here.
+
+ GNU Nettle 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 copies of the GNU General Public License and
+ the GNU Lesser General Public License along with this program. If
+ not, see http://www.gnu.org/licenses/.
+*/
+
+#ifndef GNUTLS_NETTLE_INT_NETTLE_INTERNAL_H_INCLUDED
+#define GNUTLS_NETTLE_INT_NETTLE_INTERNAL_H_INCLUDED
+
+#include <assert.h>
+/* Needed for alloca on bsd systems. */
+#include <stdlib.h>
+
+/* Temporary allocation, for systems that don't support alloca. Note
+ * that the allocation requests should always be reasonably small, so
+ * that they can fit on the stack. For non-alloca systems, we use a
+ * fix maximum size + an assert.
+ *
+ * TMP_DECL and TMP_ALLOC allocate an array of the given type, and
+ * take the array size (not byte size) as argument.
+ *
+ * TMP_DECL_ALIGN and TMP_ALLOC_ALIGN are intended for context
+ * structs, which need proper alignment. They take the size in bytes,
+ * and produce a void *. On systems without alloca, implemented as an
+ * array of uint64_t, to ensure alignment. Since it is used as void *
+ * argument, no type casts are needed.
+ */
+
+#if HAVE_ALLOCA
+#define TMP_DECL(name, type, max) type *name
+#define TMP_ALLOC(name, size) (name = alloca(sizeof(*name) * (size)))
+#define TMP_DECL_ALIGN(name, max) void *name
+#define TMP_ALLOC_ALIGN(name, size) (name = alloca(size))
+#else /* !HAVE_ALLOCA */
+#define TMP_DECL(name, type, max) type name[max]
+#define TMP_ALLOC(name, size) \
+ do { \
+ assert((size_t)(size) <= (sizeof(name) / sizeof(name[0]))); \
+ } while (0)
+#define TMP_DECL_ALIGN(name, max) \
+ uint64_t name[((max) + (sizeof(uint64_t) - 1)) / sizeof(uint64_t)]
+#define TMP_ALLOC_ALIGN(name, size) \
+ do { \
+ assert((size_t)(size) <= (sizeof(name))); \
+ } while (0)
+#endif
+
+#endif /* GNUTLS_NETTLE_INT_NETTLE_INTERNAL_H_INCLUDED */