grub/include/grub/key_protector.h
Hernan Gatta 5d260302da key_protector: Add key protectors framework
A key protector encapsulates functionality to retrieve an unlocking key
for a fully-encrypted disk from a specific source. A key protector
module registers itself with the key protectors framework when it is
loaded and unregisters when unloaded. Additionally, a key protector may
accept parameters that describe how it should operate.

The key protectors framework, besides offering registration and
unregistration functions, also offers a one-stop routine for finding and
invoking a key protector by name. If a key protector with the specified
name exists and if an unlocking key is successfully retrieved by it, the
function returns to the caller the retrieved key and its length.

Cc: Vladimir Serbinenko <phcoder@gmail.com>
Signed-off-by: Hernan Gatta <hegatta@linux.microsoft.com>
Signed-off-by: Gary Lin <glin@suse.com>
Reviewed-by: Stefan Berger <stefanb@linux.ibm.com>
Reviewed-by: Daniel Kiper <daniel.kiper@oracle.com>
Tested-by: Stefan Berger <stefanb@linux.ibm.com>
2024-11-28 21:50:55 +01:00

48 lines
1.4 KiB
C

/*
* GRUB -- GRand Unified Bootloader
* Copyright (C) 2022 Microsoft Corporation
* Copyright (C) 2024 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 <http://www.gnu.org/licenses/>.
*/
#ifndef GRUB_PROTECTOR_HEADER
#define GRUB_PROTECTOR_HEADER 1
#include <grub/err.h>
#include <grub/types.h>
struct grub_key_protector
{
struct grub_key_protector *next;
struct grub_key_protector **prev;
const char *name;
grub_err_t (*recover_key) (grub_uint8_t **key, grub_size_t *key_size);
};
grub_err_t
grub_key_protector_register (struct grub_key_protector *protector);
grub_err_t
grub_key_protector_unregister (struct grub_key_protector *protector);
grub_err_t
grub_key_protector_recover_key (const char *protector,
grub_uint8_t **key,
grub_size_t *key_size);
#endif /* ! GRUB_PROTECTOR_HEADER */