Skip to content
Snippets Groups Projects
Select Git revision
  • a0b72cf12ebcf1d4fc008a8487b97b863e3987e6
  • master default
  • wip-slh-dsa-sha2-128s
  • master-updates
  • release-3.10-fixes
  • getopt-prototype
  • fix-bcrypt-warning
  • refactor-hmac
  • wip-use-alignas
  • trim-sha3-context
  • fix-gitlab-ci
  • check-fat-emulate
  • delete-digest_func-size
  • slh-dsa-shake-128f-nettle
  • slh-dsa-shake-128s-nettle
  • slh-dsa-shake-128s
  • delete-openpgp
  • ppc64-sha512
  • delete-md5-compat
  • cleanup-hmac-tests
  • ppc64-sha256
  • nettle_3.10.2_release_20250626
  • nettle_3.10.1_release_20241230
  • nettle_3.10_release_20240616
  • nettle_3.10rc2
  • nettle_3.10rc1
  • nettle_3.9.1_release_20230601
  • nettle_3.9_release_20230514
  • nettle_3.8.1_release_20220727
  • nettle_3.8_release_20220602
  • nettle_3.7.3_release_20210606
  • nettle_3.7.2_release_20210321
  • nettle_3.7.1_release_20210217
  • nettle_3.7_release_20210104
  • nettle_3.7rc1
  • nettle_3.6_release_20200429
  • nettle_3.6rc3
  • nettle_3.6rc2
  • nettle_3.6rc1
  • nettle_3.5.1_release_20190627
  • nettle_3.5_release_20190626
41 results

nettle-internal.h

  • nettle-internal.h 4.50 KiB
    /* 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 NETTLE_INTERNAL_H_INCLUDED
    #define NETTLE_INTERNAL_H_INCLUDED
    
    #include <assert.h>
    
    #include "nettle-meta.h"
    
    /* For definition of NETTLE_MAX_HASH_CONTEXT_SIZE. */
    #include "sha3.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)]