1/* SHA-1 thunks. 2 Copyright (C) 2019-2022 Free Software Foundation, Inc. 3 4 This file is part of libctf. 5 6 libctf is free software; you can redistribute it and/or modify it under 7 the terms of the GNU General Public License as published by the Free 8 Software Foundation; either version 3, or (at your option) any later 9 version. 10 11 This program is distributed in the hope that it will be useful, but 12 WITHOUT ANY WARRANTY; without even the implied warranty of 13 MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. 14 See the GNU General Public License for more details. 15 16 You should have received a copy of the GNU General Public License 17 along with this program; see the file COPYING. If not see 18 <http://www.gnu.org/licenses/>. */ 19 20#include <ctf-impl.h> 21#include <ctf-sha1.h> 22 23static const char hex[] = "0123456789abcdef"; 24 25char * 26ctf_sha1_fini (ctf_sha1_t *sha1, char *buf) 27{ 28 size_t i; 29 30 /* Alignment suitable for a uint32_t. */ 31 union 32 { 33 uint32_t align; 34 unsigned char digest[((CTF_SHA1_SIZE - 1) / 2) + 1]; 35 } align; 36 37 sha1_finish_ctx (sha1, align.digest); 38 39 if (!buf) 40 return NULL; 41 42 buf[CTF_SHA1_SIZE - 1] = '\0'; 43 44 for (i = 0; i < (CTF_SHA1_SIZE - 1) / 2; i++) 45 { 46 buf[2 * i] = hex[align.digest[i] >> 4]; 47 buf[2 * i + 1] = hex[align.digest[i] & 0xf]; 48 } 49 return buf; 50} 51