1// SPDX-License-Identifier: GPL-2.0-or-later
2/*
3 * Copyright (c) 2023 Huawei Device Co., Ltd.
4 */
5
6#include <linux/code_sign.h>
7#include <linux/rbtree.h>
8#include <../../crypto/asymmetric_keys/pkcs7_parser.h>
9
10#ifndef _CODE_SIGN_H
11#define _CODE_SIGN_H
12
13struct cert_chain_info {
14	__u32 signing_length;
15	__u32 issuer_length;
16	__u64 signing_ptr;
17	__u64 issuer_ptr;
18	__u32 path_len;
19	__s32 cert_type;
20	__u8 __reserved[32];
21};
22
23struct cert_source {
24	char *subject;
25	char *issuer;
26	unsigned int max_path_depth;
27	int path_type;
28	unsigned int cnt;
29	struct rb_node node;
30};
31
32#define ADD_CERT_CHAIN _IOW('k', 1, struct cert_chain_info)
33#define REMOVE_CERT_CHAIN _IOW('k', 2, struct cert_chain_info)
34
35#define CERT_CHAIN_PATH_LEN_MAX 3
36
37#define KEY_ENABLE_CTX "u:r:key_enable:"
38
39/*
40 * cert_chain.c
41 */
42struct cert_source *find_match(const char *subject, const char *issuer, bool is_dev);
43
44int code_sign_avc_has_perm(u16 tclass, u32 requested);
45
46int code_sign_open(struct inode *inode, struct file *filp);
47
48int code_sign_release(struct inode *inode, struct file *filp);
49
50long code_sign_ioctl(struct file *filp, unsigned int cmd, unsigned long args);
51
52#endif /* _CODE_SIGN_H */
53