hc
2024-12-19 9370bb92b2d16684ee45cf24e879c93c509162da
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
47
48
49
50
51
52
53
54
55
56
57
/* SPDX-License-Identifier: GPL-2.0-or-later */
/* X.509 certificate parser internal definitions
 *
 * Copyright (C) 2012 Red Hat, Inc. All Rights Reserved.
 * Written by David Howells (dhowells@redhat.com)
 */
 
#include <linux/time.h>
#include <crypto/public_key.h>
#include <keys/asymmetric-type.h>
 
struct x509_certificate {
   struct x509_certificate *next;
   struct x509_certificate *signer;    /* Certificate that signed this one */
   struct public_key *pub;            /* Public key details */
   struct public_key_signature *sig;    /* Signature parameters */
   char        *issuer;        /* Name of certificate issuer */
   char        *subject;        /* Name of certificate subject */
   struct asymmetric_key_id *id;        /* Issuer + Serial number */
   struct asymmetric_key_id *skid;        /* Subject + subjectKeyId (optional) */
   time64_t    valid_from;
   time64_t    valid_to;
   const void    *tbs;            /* Signed data */
   unsigned    tbs_size;        /* Size of signed data */
   unsigned    raw_sig_size;        /* Size of sigature */
   const void    *raw_sig;        /* Signature data */
   const void    *raw_serial;        /* Raw serial number in ASN.1 */
   unsigned    raw_serial_size;
   unsigned    raw_issuer_size;
   const void    *raw_issuer;        /* Raw issuer name in ASN.1 */
   const void    *raw_subject;        /* Raw subject name in ASN.1 */
   unsigned    raw_subject_size;
   unsigned    raw_skid_size;
   const void    *raw_skid;        /* Raw subjectKeyId in ASN.1 */
   unsigned    index;
   bool        seen;            /* Infinite recursion prevention */
   bool        verified;
   bool        self_signed;        /* T if self-signed (check unsupported_sig too) */
   bool        unsupported_key;    /* T if key uses unsupported crypto */
   bool        unsupported_sig;    /* T if signature uses unsupported crypto */
   bool        blacklisted;
};
 
/*
 * x509_cert_parser.c
 */
extern void x509_free_certificate(struct x509_certificate *cert);
extern struct x509_certificate *x509_cert_parse(const void *data, size_t datalen);
extern int x509_decode_time(time64_t *_t,  size_t hdrlen,
               unsigned char tag,
               const unsigned char *value, size_t vlen);
 
/*
 * x509_public_key.c
 */
extern int x509_get_sig_params(struct x509_certificate *cert);
extern int x509_check_for_self_signed(struct x509_certificate *cert);