Commit | Line | Data |
---|---|---|
233e7676 | 1 | /* GNU Guix --- Functional package management for GNU |
ea167380 | 2 | Copyright (C) 2012, 2013 Ludovic Courtès <ludo@gnu.org> |
c2033df4 | 3 | |
233e7676 | 4 | This file is part of GNU Guix. |
c2033df4 | 5 | |
233e7676 | 6 | GNU Guix is free software; you can redistribute it and/or modify it |
c2033df4 LC |
7 | under the terms of the GNU General Public License as published by |
8 | the Free Software Foundation; either version 3 of the License, or (at | |
9 | your option) any later version. | |
10 | ||
233e7676 | 11 | GNU Guix is distributed in the hope that it will be useful, but |
c2033df4 LC |
12 | WITHOUT ANY WARRANTY; without even the implied warranty of |
13 | MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | |
14 | GNU General Public License for more details. | |
15 | ||
16 | You should have received a copy of the GNU General Public License | |
233e7676 | 17 | along with GNU Guix. If not, see <http://www.gnu.org/licenses/>. */ |
c2033df4 LC |
18 | |
19 | /* An OpenSSL-like interface to GNU libgcrypt cryptographic hash | |
20 | functions. */ | |
21 | ||
22 | #pragma once | |
23 | #include <gcrypt.h> | |
24 | #include <unistd.h> | |
25 | ||
c2033df4 LC |
26 | struct guix_hash_context |
27 | { | |
0c5028fa LC |
28 | /* This copy constructor is needed in 'HashSink::currentHash()' where we |
29 | expect the copy of a 'Ctx' object to yield a truly different context. */ | |
30 | guix_hash_context (guix_hash_context &ref) | |
31 | { | |
32 | if (ref.md_handle == NULL) | |
33 | md_handle = NULL; | |
34 | else | |
35 | gcry_md_copy (&md_handle, ref.md_handle); | |
36 | } | |
37 | ||
38 | /* Make sure 'md_handle' is always initialized. */ | |
39 | guix_hash_context (): md_handle (NULL) { }; | |
40 | ||
c2033df4 LC |
41 | gcry_md_hd_t md_handle; |
42 | }; | |
43 | ||
0c5028fa | 44 | extern "C" { |
ea167380 | 45 | extern void guix_hash_init (struct guix_hash_context *ctx, int algo); |
c2033df4 LC |
46 | extern void guix_hash_update (struct guix_hash_context *ctx, const void *buffer, |
47 | size_t len); | |
48 | extern void guix_hash_final (void *resbuf, struct guix_hash_context *ctx, | |
ea167380 | 49 | int algo); |
c2033df4 | 50 | } |