Line data Source code
1 : /*
2 : This file is part of TALER
3 : Copyright (C) 2022 Taler Systems SA
4 :
5 : TALER is free software; you can redistribute it and/or modify it under the
6 : terms of the GNU General Public License as published by the Free Software
7 : Foundation; either version 3, or (at your option) any later version.
8 :
9 : TALER is distributed in the hope that it will be useful, but WITHOUT ANY
10 : WARRANTY; without even the implied warranty of MERCHANTABILITY or FITNESS FOR
11 : A PARTICULAR PURPOSE. See the GNU General Public License for more details.
12 :
13 : You should have received a copy of the GNU General Public License along with
14 : TALER; see the file COPYING. If not, see <http://www.gnu.org/licenses/>
15 : */
16 : /**
17 : * @file exchangedb/compute_shard.c
18 : * @brief Implementation of the compute_shard function for Postgres
19 : * @author Christian Grothoff
20 : */
21 : #include "exchange-database/compute_shard.h"
22 : #include "helper.h"
23 :
24 :
25 : uint64_t
26 191 : TALER_EXCHANGEDB_compute_shard (const struct TALER_MerchantPublicKeyP *
27 : merchant_pub)
28 : {
29 : uint32_t res;
30 :
31 191 : GNUNET_assert (GNUNET_YES ==
32 : GNUNET_CRYPTO_hkdf_gnunet (
33 : &res,
34 : sizeof (res),
35 : merchant_pub,
36 : sizeof (*merchant_pub),
37 : "VOID",
38 : 4));
39 : /* interpret hash result as NBO for platform independence,
40 : convert to HBO and map to [0..2^31-1] range */
41 191 : res = ntohl (res);
42 191 : if (res > INT32_MAX)
43 69 : res += INT32_MIN;
44 191 : GNUNET_assert (res <= INT32_MAX);
45 191 : return (uint64_t) res;
46 : }
|