mirror of
https://git.in.rschanz.org/ryan77627/guix.git
synced 2024-12-25 05:48:07 -05:00
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 \
|
||||||
|
|
Loading…
Reference in a new issue