daemon: Remove OpenSSL hash compatibility wrappers.
* nix/libutil/hash.cc (struct Ctx): Copy from gcrypt-hash.hh. (start, update, finish): Use gcrypt functions directly instead of OpenSSL-like wrappers. * nix/libutil/gcrypt-hash.cc, nix/libutil/gcrypt-hash.hh, nix/libutil/md5.h, nix/libutil/sha1.h, nix/libutil/sha256.h, nix/libutil/sha512.h: Remove. * nix/local.mk (libutil_a_SOURCES, libutil_headers): Adjust accordingly.
This commit is contained in:
		
							parent
							
								
									3fb6b8f304
								
							
						
					
					
						commit
						8dc6c38785
					
				
					 8 changed files with 27 additions and 279 deletions
				
			
		|  | @ -1,51 +0,0 @@ | ||||||
| /* GNU Guix --- Functional package management for GNU
 |  | ||||||
|    Copyright (C) 2012, 2013  Ludovic Courtès <ludo@gnu.org> |  | ||||||
| 
 |  | ||||||
|    This file is part of GNU Guix. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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 a copy of the GNU General Public License |  | ||||||
|    along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.  */
 |  | ||||||
| 
 |  | ||||||
| #include <config.h> |  | ||||||
| 
 |  | ||||||
| #include <gcrypt-hash.hh> |  | ||||||
| #include <assert.h> |  | ||||||
| 
 |  | ||||||
| extern "C" { |  | ||||||
| 
 |  | ||||||
| void |  | ||||||
| guix_hash_init (struct guix_hash_context *ctx, int algo) |  | ||||||
| { |  | ||||||
|   gcry_error_t err; |  | ||||||
| 
 |  | ||||||
|   err = gcry_md_open (&ctx->md_handle, algo, 0); |  | ||||||
|   assert (err == GPG_ERR_NO_ERROR); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void |  | ||||||
| guix_hash_update (struct guix_hash_context *ctx, const void *buffer, size_t len) |  | ||||||
| { |  | ||||||
|   gcry_md_write (ctx->md_handle, buffer, len); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| void |  | ||||||
| guix_hash_final (void *resbuf, struct guix_hash_context *ctx, |  | ||||||
| 		 int algo) |  | ||||||
| { |  | ||||||
|   memcpy (resbuf, gcry_md_read (ctx->md_handle, algo), |  | ||||||
| 	  gcry_md_get_algo_dlen (algo)); |  | ||||||
|   gcry_md_close (ctx->md_handle); |  | ||||||
|   ctx->md_handle = NULL; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| } |  | ||||||
|  | @ -1,50 +0,0 @@ | ||||||
| /* GNU Guix --- Functional package management for GNU
 |  | ||||||
|    Copyright (C) 2012, 2013  Ludovic Courtès <ludo@gnu.org> |  | ||||||
| 
 |  | ||||||
|    This file is part of GNU Guix. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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 a copy of the GNU General Public License |  | ||||||
|    along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.  */
 |  | ||||||
| 
 |  | ||||||
| /* An OpenSSL-like interface to GNU libgcrypt cryptographic hash
 |  | ||||||
|    functions.  */ |  | ||||||
| 
 |  | ||||||
| #pragma once |  | ||||||
| #include <gcrypt.h> |  | ||||||
| #include <unistd.h> |  | ||||||
| 
 |  | ||||||
| struct guix_hash_context |  | ||||||
| { |  | ||||||
|   /* This copy constructor is needed in 'HashSink::currentHash()' where we
 |  | ||||||
|      expect the copy of a 'Ctx' object to yield a truly different context.  */ |  | ||||||
|   guix_hash_context (guix_hash_context &ref) |  | ||||||
|   { |  | ||||||
|     if (ref.md_handle == NULL) |  | ||||||
|       md_handle = NULL; |  | ||||||
|     else |  | ||||||
|       gcry_md_copy (&md_handle, ref.md_handle); |  | ||||||
|   } |  | ||||||
| 
 |  | ||||||
|   /* Make sure 'md_handle' is always initialized.  */ |  | ||||||
|   guix_hash_context (): md_handle (NULL) { }; |  | ||||||
| 
 |  | ||||||
|   gcry_md_hd_t md_handle; |  | ||||||
| }; |  | ||||||
| 
 |  | ||||||
| extern "C" { |  | ||||||
| extern void guix_hash_init (struct guix_hash_context *ctx, int algo); |  | ||||||
| extern void guix_hash_update (struct guix_hash_context *ctx, const void *buffer, |  | ||||||
| 			      size_t len); |  | ||||||
| extern void guix_hash_final (void *resbuf, struct guix_hash_context *ctx, |  | ||||||
| 			     int algo); |  | ||||||
| } |  | ||||||
|  | @ -3,18 +3,6 @@ | ||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <cstring> | #include <cstring> | ||||||
| 
 | 
 | ||||||
| #ifdef HAVE_OPENSSL |  | ||||||
| #include <openssl/md5.h> |  | ||||||
| #include <openssl/sha.h> |  | ||||||
| #else |  | ||||||
| extern "C" { |  | ||||||
| #include "md5.h" |  | ||||||
| #include "sha1.h" |  | ||||||
| #include "sha256.h" |  | ||||||
| #include "sha512.h" |  | ||||||
| } |  | ||||||
| #endif |  | ||||||
| 
 |  | ||||||
| #include "hash.hh" | #include "hash.hh" | ||||||
| #include "archive.hh" | #include "archive.hh" | ||||||
| #include "util.hh" | #include "util.hh" | ||||||
|  | @ -193,41 +181,48 @@ bool isHash(const string & s) | ||||||
|     return true; |     return true; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | /* The "hash context".  */ | ||||||
| struct Ctx | struct Ctx | ||||||
| { | { | ||||||
|     MD5_CTX md5; |   /* This copy constructor is needed in 'HashSink::currentHash()' where we
 | ||||||
|     SHA_CTX sha1; |      expect the copy of a 'Ctx' object to yield a truly different context.  */ | ||||||
|     SHA256_CTX sha256; |   Ctx(Ctx &ref) | ||||||
|     SHA512_CTX sha512; |   { | ||||||
|  |     if (ref.md_handle == NULL) | ||||||
|  |       md_handle = NULL; | ||||||
|  |     else | ||||||
|  |       gcry_md_copy (&md_handle, ref.md_handle); | ||||||
|  |   } | ||||||
|  | 
 | ||||||
|  |   /* Make sure 'md_handle' is always initialized.  */ | ||||||
|  |   Ctx(): md_handle (NULL) { }; | ||||||
|  | 
 | ||||||
|  |   gcry_md_hd_t md_handle; | ||||||
| }; | }; | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static void start(HashType ht, Ctx & ctx) | static void start(HashType ht, Ctx & ctx) | ||||||
| { | { | ||||||
|     if (ht == htMD5) MD5_Init(&ctx.md5); |     gcry_error_t err; | ||||||
|     else if (ht == htSHA1) SHA1_Init(&ctx.sha1); | 
 | ||||||
|     else if (ht == htSHA256) SHA256_Init(&ctx.sha256); |     err = gcry_md_open (&ctx.md_handle, ht, 0); | ||||||
|     else if (ht == htSHA512) SHA512_Init(&ctx.sha512); |     assert (err == GPG_ERR_NO_ERROR); | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static void update(HashType ht, Ctx & ctx, | static void update(HashType ht, Ctx & ctx, | ||||||
|     const unsigned char * bytes, unsigned int len) |     const unsigned char * bytes, unsigned int len) | ||||||
| { | { | ||||||
|     if (ht == htMD5) MD5_Update(&ctx.md5, bytes, len); |     gcry_md_write (ctx.md_handle, bytes, len); | ||||||
|     else if (ht == htSHA1) SHA1_Update(&ctx.sha1, bytes, len); |  | ||||||
|     else if (ht == htSHA256) SHA256_Update(&ctx.sha256, bytes, len); |  | ||||||
|     else if (ht == htSHA512) SHA512_Update(&ctx.sha512, bytes, len); |  | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
| static void finish(HashType ht, Ctx & ctx, unsigned char * hash) | static void finish(HashType ht, Ctx & ctx, unsigned char * hash) | ||||||
| { | { | ||||||
|     if (ht == htMD5) MD5_Final(hash, &ctx.md5); |     memcpy (hash, gcry_md_read (ctx.md_handle, ht), | ||||||
|     else if (ht == htSHA1) SHA1_Final(hash, &ctx.sha1); | 	    gcry_md_get_algo_dlen (ht)); | ||||||
|     else if (ht == htSHA256) SHA256_Final(hash, &ctx.sha256); |     gcry_md_close (ctx.md_handle); | ||||||
|     else if (ht == htSHA512) SHA512_Final(hash, &ctx.sha512); |     ctx.md_handle = NULL; | ||||||
| } | } | ||||||
| 
 | 
 | ||||||
| 
 | 
 | ||||||
|  |  | ||||||
|  | @ -1,35 +0,0 @@ | ||||||
| /* GNU Guix --- Functional package management for GNU
 |  | ||||||
|    Copyright (C) 2012  Ludovic Courtès <ludo@gnu.org> |  | ||||||
| 
 |  | ||||||
|    This file is part of GNU Guix. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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 a copy of the GNU General Public License |  | ||||||
|    along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.  */
 |  | ||||||
| 
 |  | ||||||
| #include <gcrypt-hash.hh> |  | ||||||
| 
 |  | ||||||
| #define MD5_CTX guix_hash_context |  | ||||||
| 
 |  | ||||||
| static inline void |  | ||||||
| MD5_Init (struct MD5_CTX *ctx) |  | ||||||
| { |  | ||||||
|   guix_hash_init (ctx, GCRY_MD_MD5); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #define MD5_Update guix_hash_update |  | ||||||
| 
 |  | ||||||
| static inline void |  | ||||||
| MD5_Final (void *resbuf, struct MD5_CTX *ctx) |  | ||||||
| { |  | ||||||
|   guix_hash_final (resbuf, ctx, GCRY_MD_MD5); |  | ||||||
| } |  | ||||||
|  | @ -1,35 +0,0 @@ | ||||||
| /* GNU Guix --- Functional package management for GNU
 |  | ||||||
|    Copyright (C) 2012  Ludovic Courtès <ludo@gnu.org> |  | ||||||
| 
 |  | ||||||
|    This file is part of GNU Guix. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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 a copy of the GNU General Public License |  | ||||||
|    along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.  */
 |  | ||||||
| 
 |  | ||||||
| #include <gcrypt-hash.hh> |  | ||||||
| 
 |  | ||||||
| #define SHA_CTX guix_hash_context |  | ||||||
| 
 |  | ||||||
| static inline void |  | ||||||
| SHA1_Init (struct SHA_CTX *ctx) |  | ||||||
| { |  | ||||||
|   guix_hash_init (ctx, GCRY_MD_SHA1); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #define SHA1_Update guix_hash_update |  | ||||||
| 
 |  | ||||||
| static inline void |  | ||||||
| SHA1_Final (void *resbuf, struct SHA_CTX *ctx) |  | ||||||
| { |  | ||||||
|   guix_hash_final (resbuf, ctx, GCRY_MD_SHA1); |  | ||||||
| } |  | ||||||
|  | @ -1,35 +0,0 @@ | ||||||
| /* GNU Guix --- Functional package management for GNU
 |  | ||||||
|    Copyright (C) 2012  Ludovic Courtès <ludo@gnu.org> |  | ||||||
| 
 |  | ||||||
|    This file is part of GNU Guix. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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 a copy of the GNU General Public License |  | ||||||
|    along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.  */
 |  | ||||||
| 
 |  | ||||||
| #include <gcrypt-hash.hh> |  | ||||||
| 
 |  | ||||||
| #define SHA256_CTX guix_hash_context |  | ||||||
| 
 |  | ||||||
| static inline void |  | ||||||
| SHA256_Init (struct SHA256_CTX *ctx) |  | ||||||
| { |  | ||||||
|   guix_hash_init (ctx, GCRY_MD_SHA256); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #define SHA256_Update guix_hash_update |  | ||||||
| 
 |  | ||||||
| static inline void |  | ||||||
| SHA256_Final (void *resbuf, struct SHA256_CTX *ctx) |  | ||||||
| { |  | ||||||
|   guix_hash_final (resbuf, ctx, GCRY_MD_SHA256); |  | ||||||
| } |  | ||||||
|  | @ -1,35 +0,0 @@ | ||||||
| /* GNU Guix --- Functional package management for GNU
 |  | ||||||
|    Copyright (C) 2012, 2015 Ludovic Courtès <ludo@gnu.org> |  | ||||||
| 
 |  | ||||||
|    This file is part of GNU Guix. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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. |  | ||||||
| 
 |  | ||||||
|    GNU Guix 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 a copy of the GNU General Public License |  | ||||||
|    along with GNU Guix.  If not, see <http://www.gnu.org/licenses/>.  */
 |  | ||||||
| 
 |  | ||||||
| #include <gcrypt-hash.hh> |  | ||||||
| 
 |  | ||||||
| #define SHA512_CTX guix_hash_context |  | ||||||
| 
 |  | ||||||
| static inline void |  | ||||||
| SHA512_Init (struct SHA512_CTX *ctx) |  | ||||||
| { |  | ||||||
|   guix_hash_init (ctx, GCRY_MD_SHA512); |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| #define SHA512_Update guix_hash_update |  | ||||||
| 
 |  | ||||||
| static inline void |  | ||||||
| SHA512_Final (void *resbuf, struct SHA512_CTX *ctx) |  | ||||||
| { |  | ||||||
|   guix_hash_final (resbuf, ctx, GCRY_MD_SHA512); |  | ||||||
| } |  | ||||||
							
								
								
									
										12
									
								
								nix/local.mk
									
										
									
									
									
								
							
							
						
						
									
										12
									
								
								nix/local.mk
									
										
									
									
									
								
							|  | @ -1,5 +1,5 @@ | ||||||
| # GNU Guix --- Functional package management for GNU
 | # GNU Guix --- Functional package management for GNU
 | ||||||
| # Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019 Ludovic Courtès <ludo@gnu.org>
 | # Copyright © 2012, 2013, 2014, 2015, 2016, 2018, 2019, 2020 Ludovic Courtès <ludo@gnu.org>
 | ||||||
| # Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 | # Copyright © 2016 Mathieu Lirzin <mthl@gnu.org>
 | ||||||
| # Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 | # Copyright © 2020 Tobias Geerinckx-Rice <me@tobias.gr>
 | ||||||
| #
 | #
 | ||||||
|  | @ -56,8 +56,7 @@ libutil_a_SOURCES =				\ | ||||||
|   %D%/libutil/affinity.cc			\
 |   %D%/libutil/affinity.cc			\
 | ||||||
|   %D%/libutil/serialise.cc			\
 |   %D%/libutil/serialise.cc			\
 | ||||||
|   %D%/libutil/util.cc				\
 |   %D%/libutil/util.cc				\
 | ||||||
|   %D%/libutil/hash.cc				\
 |   %D%/libutil/hash.cc | ||||||
|   %D%/libutil/gcrypt-hash.cc |  | ||||||
| 
 | 
 | ||||||
| libutil_headers =				\
 | libutil_headers =				\
 | ||||||
|   %D%/libutil/affinity.hh			\
 |   %D%/libutil/affinity.hh			\
 | ||||||
|  | @ -65,12 +64,7 @@ libutil_headers =				\ | ||||||
|   %D%/libutil/serialise.hh			\
 |   %D%/libutil/serialise.hh			\
 | ||||||
|   %D%/libutil/util.hh				\
 |   %D%/libutil/util.hh				\
 | ||||||
|   %D%/libutil/archive.hh			\
 |   %D%/libutil/archive.hh			\
 | ||||||
|   %D%/libutil/types.hh				\
 |   %D%/libutil/types.hh | ||||||
|   %D%/libutil/gcrypt-hash.hh			\
 |  | ||||||
|   %D%/libutil/md5.h				\
 |  | ||||||
|   %D%/libutil/sha1.h				\
 |  | ||||||
|   %D%/libutil/sha256.h				\
 |  | ||||||
|   %D%/libutil/sha512.h |  | ||||||
| 
 | 
 | ||||||
| libutil_a_CPPFLAGS =				\
 | libutil_a_CPPFLAGS =				\
 | ||||||
|   -I$(top_builddir)/nix				\
 |   -I$(top_builddir)/nix				\
 | ||||||
|  |  | ||||||
		Reference in a new issue