/* * GRUB -- GRand Unified Bootloader * Copyright (C) 2025 Free Software Foundation, Inc. * * GRUB 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. * * GRUB 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 GRUB. If not, see . */ #include #include GRUB_MOD_LICENSE ("GPLv3+"); gcry_err_code_t grub_crypto_argon2 (int subalgo, const unsigned long *param, unsigned int paramlen, const void *password, grub_size_t passwordlen, const void *salt, grub_size_t saltlen, const void *key, grub_size_t keylen, const void *ad, grub_size_t adlen, grub_size_t resultlen, void *result) { gcry_kdf_hd_t hd = {0}; gpg_err_code_t err; if (saltlen == 0) return GPG_ERR_INV_VALUE; err = _gcry_kdf_open (&hd, GRUB_GCRY_KDF_ARGON2, subalgo, param, paramlen, password, passwordlen, salt, saltlen, key, keylen, ad, adlen); if (err != GPG_ERR_NO_ERROR) return err; err = _gcry_kdf_compute (hd, NULL); if (err == GPG_ERR_NO_ERROR) err = _gcry_kdf_final (hd, resultlen, result); _gcry_kdf_close (hd); return err; }