hc
2024-08-13 f258bb3ae540ccc311fd344a0121bba1928b85dd
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/* SPDX-License-Identifier: GPL-2.0+ */
/*
 * Module signature handling.
 *
 * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
 * Written by David Howells (dhowells@redhat.com)
 */
 
#ifndef _LINUX_MODULE_SIGNATURE_H
#define _LINUX_MODULE_SIGNATURE_H
 
#include <linux/types.h>
 
/* In stripped ARM and x86-64 modules, ~ is surprisingly rare. */
#define MODULE_SIG_STRING "~Module signature appended~\n"
 
enum pkey_id_type {
   PKEY_ID_PGP,        /* OpenPGP generated key ID */
   PKEY_ID_X509,        /* X.509 arbitrary subjectKeyIdentifier */
   PKEY_ID_PKCS7,        /* Signature in PKCS#7 message */
};
 
/*
 * Module signature information block.
 *
 * The constituents of the signature section are, in order:
 *
 *    - Signer's name
 *    - Key identifier
 *    - Signature data
 *    - Information block
 */
struct module_signature {
   u8    algo;        /* Public-key crypto algorithm [0] */
   u8    hash;        /* Digest algorithm [0] */
   u8    id_type;    /* Key identifier type [PKEY_ID_PKCS7] */
   u8    signer_len;    /* Length of signer's name [0] */
   u8    key_id_len;    /* Length of key identifier [0] */
   u8    __pad[3];
   __be32    sig_len;    /* Length of signature data */
};
 
int mod_check_sig(const struct module_signature *ms, size_t file_len,
         const char *name);
 
#endif /* _LINUX_MODULE_SIGNATURE_H */