diff options
author | Glenn Morris <rgm@gnu.org> | 2021-10-05 07:50:22 -0700 |
---|---|---|
committer | Glenn Morris <rgm@gnu.org> | 2021-10-05 07:50:22 -0700 |
commit | 2dc88a27a46ab1798383483454e45a7d69caa3d0 (patch) | |
tree | 23d4b8709c7c3c12f65c97ac4f51b9cc13d47f35 /lib/sha256.c | |
parent | 6090e0f23e80945641970a6caa3681870b80e7fa (diff) | |
parent | 63abe976ce65e42d67730d0577854867bc83e69c (diff) | |
download | emacs-2dc88a27a46ab1798383483454e45a7d69caa3d0.tar.gz emacs-2dc88a27a46ab1798383483454e45a7d69caa3d0.tar.bz2 emacs-2dc88a27a46ab1798383483454e45a7d69caa3d0.zip |
Merge from origin/emacs-28
63abe976ce (origin/emacs-28) Document minibuffer-default-prompt-forma...
b5afbedc90 Backward compatibility option for 'nobreak-char-display'
ea1b728a06 ; * lisp/dired.el: Fix typo.
984eafeb98 Unbreak the build after Gnulib update
5946370cd1 Check, whether an FUSE mount has been broken in Tramp
90575a6c0c Disable 'nobreak-char-display' in Eldoc buffers
570e2c9a17 Fix small error in comint-send-input
fd7bb31412 Update documentation of search-whitespace-regexp
1f4ced47a1 Fix cc-compat.el syntax error
b431f54c1b Mention `seq-uniq' in `delete-dups' documentation
0a7bab689c ; Minor stylistic fixes found by checkdoc
e2861e2d08 ; * etc/NEWS: Fix typo.
1a65d49931 Port recent Gnulib changes to MS-Windows
68a256c892 Update from Gnulib
63cb65dcce * Fix mh tests for native comp builds (bug#50975)
e606cc6f40 * Fix `batch-native-compile' not to spawn a subprocess
894dfe70da Fix native-compilation build from tarball on Cygwin
2ce5e08058 Remove U+FE0F from script-representative-chars
# Conflicts:
# etc/NEWS
Diffstat (limited to 'lib/sha256.c')
-rw-r--r-- | lib/sha256.c | 130 |
1 files changed, 10 insertions, 120 deletions
diff --git a/lib/sha256.c b/lib/sha256.c index 129d64b174b..2b8687f1db5 100644 --- a/lib/sha256.c +++ b/lib/sha256.c @@ -3,17 +3,17 @@ Copyright (C) 2005-2006, 2008-2021 Free Software Foundation, Inc. - This program is free software: you can redistribute it and/or modify - it under the terms of the GNU General Public License as published by - the Free Software Foundation, either version 3 of the License, or - (at your option) any later version. + This file is free software: you can redistribute it and/or modify + it under the terms of the GNU Lesser General Public License as + published by the Free Software Foundation; either version 2.1 of the + License, or (at your option) any later version. - This program is distributed in the hope that it will be useful, + This file 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. + GNU Lesser General Public License for more details. - You should have received a copy of the GNU General Public License + You should have received a copy of the GNU Lesser General Public License along with this program. If not, see <https://www.gnu.org/licenses/>. */ /* Written by David Madore, considerably copypasting from @@ -22,6 +22,7 @@ #include <config.h> +/* Specification. */ #if HAVE_OPENSSL_SHA256 # define GL_OPENSSL_INLINE _GL_EXTERN_INLINE #endif @@ -29,13 +30,8 @@ #include <stdalign.h> #include <stdint.h> -#include <stdlib.h> #include <string.h> -#if USE_UNLOCKED_IO -# include "unlocked-io.h" -#endif - #include <byteswap.h> #ifdef WORDS_BIGENDIAN # define SWAP(n) (n) @@ -43,12 +39,8 @@ # define SWAP(n) bswap_32 (n) #endif -#define BLOCKSIZE 32768 -#if BLOCKSIZE % 64 != 0 -# error "invalid BLOCKSIZE" -#endif - #if ! HAVE_OPENSSL_SHA256 + /* This array contains the bytes used to pad the buffer to the next 64-byte boundary. */ static const unsigned char fillbuf[64] = { 0x80, 0 /* , 0, 0, ... */ }; @@ -167,110 +159,7 @@ sha224_finish_ctx (struct sha256_ctx *ctx, void *resbuf) sha256_conclude_ctx (ctx); return sha224_read_ctx (ctx, resbuf); } -#endif - -#ifdef GL_COMPILE_CRYPTO_STREAM - -#include "af_alg.h" - -/* Compute message digest for bytes read from STREAM using algorithm ALG. - Write the message digest into RESBLOCK, which contains HASHLEN bytes. - The initial and finishing operations are INIT_CTX and FINISH_CTX. - Return zero if and only if successful. */ -static int -shaxxx_stream (FILE *stream, char const *alg, void *resblock, - ssize_t hashlen, void (*init_ctx) (struct sha256_ctx *), - void *(*finish_ctx) (struct sha256_ctx *, void *)) -{ - switch (afalg_stream (stream, alg, resblock, hashlen)) - { - case 0: return 0; - case -EIO: return 1; - } - - char *buffer = malloc (BLOCKSIZE + 72); - if (!buffer) - return 1; - - struct sha256_ctx ctx; - init_ctx (&ctx); - size_t sum; - - /* Iterate over full file contents. */ - while (1) - { - /* We read the file in blocks of BLOCKSIZE bytes. One call of the - computation function processes the whole buffer so that with the - next round of the loop another block can be read. */ - size_t n; - sum = 0; - - /* Read block. Take care for partial reads. */ - while (1) - { - /* Either process a partial fread() from this loop, - or the fread() in afalg_stream may have gotten EOF. - We need to avoid a subsequent fread() as EOF may - not be sticky. For details of such systems, see: - https://sourceware.org/bugzilla/show_bug.cgi?id=1190 */ - if (feof (stream)) - goto process_partial_block; - - n = fread (buffer + sum, 1, BLOCKSIZE - sum, stream); - - sum += n; - - if (sum == BLOCKSIZE) - break; - - if (n == 0) - { - /* Check for the error flag IFF N == 0, so that we don't - exit the loop after a partial read due to e.g., EAGAIN - or EWOULDBLOCK. */ - if (ferror (stream)) - { - free (buffer); - return 1; - } - goto process_partial_block; - } - } - - /* Process buffer with BLOCKSIZE bytes. Note that - BLOCKSIZE % 64 == 0 - */ - sha256_process_block (buffer, BLOCKSIZE, &ctx); - } - - process_partial_block:; - - /* Process any remaining bytes. */ - if (sum > 0) - sha256_process_bytes (buffer, sum, &ctx); - - /* Construct result in desired memory. */ - finish_ctx (&ctx, resblock); - free (buffer); - return 0; -} -int -sha256_stream (FILE *stream, void *resblock) -{ - return shaxxx_stream (stream, "sha256", resblock, SHA256_DIGEST_SIZE, - sha256_init_ctx, sha256_finish_ctx); -} - -int -sha224_stream (FILE *stream, void *resblock) -{ - return shaxxx_stream (stream, "sha224", resblock, SHA224_DIGEST_SIZE, - sha224_init_ctx, sha224_finish_ctx); -} -#endif - -#if ! HAVE_OPENSSL_SHA256 /* Compute SHA256 message digest for LEN bytes beginning at BUFFER. The result is always in little endian byte order, so that a byte-wise output yields to the wanted ASCII representation of the message @@ -533,6 +422,7 @@ sha256_process_block (const void *buffer, size_t len, struct sha256_ctx *ctx) h = ctx->state[7] += h; } } + #endif /* |