/* This file is part of GNUnet. Copyright (C) 2012, 2013, 2019 GNUnet e.V. GNUnet is free software: you can redistribute it and/or modify it under the terms of the GNU Affero General Public License as published by the Free Software Foundation, either version 3 of the License, or (at your option) any later version. GNUnet 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 Affero General Public License for more details. You should have received a copy of the GNU Affero General Public License along with this program. If not, see . SPDX-License-Identifier: AGPL3.0-or-later */ /** * @file util/crypto_pow.c * @brief proof-of-work hashing * @author Christian Grothoff * @author Bart Polot */ #include "platform.h" #include "gnunet_crypto_lib.h" #include /** * Calculate the 'proof-of-work' hash (an expensive hash). * We're using a non-standard formula to avoid issues with * ASICs appearing (see #3795). * * @param salt salt for the hash * @param buf data to hash * @param buf_len number of bytes in @a buf * @param result where to write the resulting hash */ void GNUNET_CRYPTO_pow_hash (const char *salt, const void *buf, size_t buf_len, struct GNUNET_HashCode *result) { GNUNET_break (ARGON2_OK == argon2id_hash_raw (3, /* iterations */ 1024, /* memory (1 MiB) */ 1, /* threads */ buf, buf_len, salt, strlen (salt), result, sizeof (struct GNUNET_HashCode))); } /* end of crypto_pow.c */