1419b0af8Sopenharmony_ci// SPDX-License-Identifier: GPL-2.0-or-later
2419b0af8Sopenharmony_ci/*
3419b0af8Sopenharmony_ci * Copyright (c) 2023 Huawei Device Co., Ltd.
4419b0af8Sopenharmony_ci */
5419b0af8Sopenharmony_ci
6419b0af8Sopenharmony_ci#include <linux/code_sign.h>
7419b0af8Sopenharmony_ci#include <linux/rbtree.h>
8419b0af8Sopenharmony_ci#include <../../crypto/asymmetric_keys/pkcs7_parser.h>
9419b0af8Sopenharmony_ci
10419b0af8Sopenharmony_ci#ifndef _CODE_SIGN_H
11419b0af8Sopenharmony_ci#define _CODE_SIGN_H
12419b0af8Sopenharmony_ci
13419b0af8Sopenharmony_cistruct cert_chain_info {
14419b0af8Sopenharmony_ci	__u32 signing_length;
15419b0af8Sopenharmony_ci	__u32 issuer_length;
16419b0af8Sopenharmony_ci	__u64 signing_ptr;
17419b0af8Sopenharmony_ci	__u64 issuer_ptr;
18419b0af8Sopenharmony_ci	__u32 path_len;
19419b0af8Sopenharmony_ci	__s32 cert_type;
20419b0af8Sopenharmony_ci	__u8 __reserved[32];
21419b0af8Sopenharmony_ci};
22419b0af8Sopenharmony_ci
23419b0af8Sopenharmony_cistruct cert_source {
24419b0af8Sopenharmony_ci	char *subject;
25419b0af8Sopenharmony_ci	char *issuer;
26419b0af8Sopenharmony_ci	unsigned int max_path_depth;
27419b0af8Sopenharmony_ci	int path_type;
28419b0af8Sopenharmony_ci	unsigned int cnt;
29419b0af8Sopenharmony_ci	struct rb_node node;
30419b0af8Sopenharmony_ci};
31419b0af8Sopenharmony_ci
32419b0af8Sopenharmony_ci#define ADD_CERT_CHAIN _IOW('k', 1, struct cert_chain_info)
33419b0af8Sopenharmony_ci#define REMOVE_CERT_CHAIN _IOW('k', 2, struct cert_chain_info)
34419b0af8Sopenharmony_ci
35419b0af8Sopenharmony_ci#define CERT_CHAIN_PATH_LEN_MAX 3
36419b0af8Sopenharmony_ci
37419b0af8Sopenharmony_ci#define KEY_ENABLE_CTX "u:r:key_enable:"
38419b0af8Sopenharmony_ci
39419b0af8Sopenharmony_ci/*
40419b0af8Sopenharmony_ci * cert_chain.c
41419b0af8Sopenharmony_ci */
42419b0af8Sopenharmony_cistruct cert_source *find_match(const char *subject, const char *issuer, bool is_dev);
43419b0af8Sopenharmony_ci
44419b0af8Sopenharmony_ciint code_sign_avc_has_perm(u16 tclass, u32 requested);
45419b0af8Sopenharmony_ci
46419b0af8Sopenharmony_ciint code_sign_open(struct inode *inode, struct file *filp);
47419b0af8Sopenharmony_ci
48419b0af8Sopenharmony_ciint code_sign_release(struct inode *inode, struct file *filp);
49419b0af8Sopenharmony_ci
50419b0af8Sopenharmony_cilong code_sign_ioctl(struct file *filp, unsigned int cmd, unsigned long args);
51419b0af8Sopenharmony_ci
52419b0af8Sopenharmony_ci#endif /* _CODE_SIGN_H */
53