xref: /OK3568_Linux_fs/kernel/include/uapi/linux/rk_cryptodev.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /* SPDX-License-Identifier: ((GPL-2.0+ WITH Linux-syscall-note) OR MIT) */
2*4882a593Smuzhiyun /*
3*4882a593Smuzhiyun  * Copyright (C) 2021 Rockchip Electronics Co., Ltd.
4*4882a593Smuzhiyun  */
5*4882a593Smuzhiyun 
6*4882a593Smuzhiyun #ifndef _UAPI_RK_CRYPTODEV_H
7*4882a593Smuzhiyun #define _UAPI_RK_CRYPTODEV_H
8*4882a593Smuzhiyun 
9*4882a593Smuzhiyun #include <linux/types.h>
10*4882a593Smuzhiyun #include <linux/version.h>
11*4882a593Smuzhiyun 
12*4882a593Smuzhiyun #ifndef __KERNEL__
13*4882a593Smuzhiyun #define __user
14*4882a593Smuzhiyun #endif
15*4882a593Smuzhiyun 
16*4882a593Smuzhiyun /* input of RIOCCRYPT_FD */
17*4882a593Smuzhiyun struct crypt_fd_op {
18*4882a593Smuzhiyun 	__u32	ses;		/* session identifier */
19*4882a593Smuzhiyun 	__u16	op;		/* COP_ENCRYPT or COP_DECRYPT */
20*4882a593Smuzhiyun 	__u16	flags;		/* see COP_FLAG_* */
21*4882a593Smuzhiyun 	__u32	len;		/* length of source data */
22*4882a593Smuzhiyun 	int	src_fd;		/* source data */
23*4882a593Smuzhiyun 	int	dst_fd;		/* pointer to output data */
24*4882a593Smuzhiyun 	/* pointer to output data for hash/MAC operations */
25*4882a593Smuzhiyun 	__u8	__user *mac;
26*4882a593Smuzhiyun 	/* initialization vector for encryption operations */
27*4882a593Smuzhiyun 	__u8	__user *iv;
28*4882a593Smuzhiyun };
29*4882a593Smuzhiyun 
30*4882a593Smuzhiyun /* input of RIOCAUTHCRYPT_FD */
31*4882a593Smuzhiyun struct crypt_auth_fd_op {
32*4882a593Smuzhiyun 	__u32	ses;			/* session identifier */
33*4882a593Smuzhiyun 	__u16	op;			/* COP_ENCRYPT or COP_DECRYPT */
34*4882a593Smuzhiyun 	__u16	flags;			/* see COP_FLAG_AEAD_* */
35*4882a593Smuzhiyun 	__u32	len;			/* length of source data */
36*4882a593Smuzhiyun 	__u32	auth_len;		/* length of auth data */
37*4882a593Smuzhiyun 	int	auth_fd;		/* authenticated-only data */
38*4882a593Smuzhiyun 	int	src_fd;			/* source data */
39*4882a593Smuzhiyun 	int	dst_fd;			/* pointer to output data */
40*4882a593Smuzhiyun 	__u64	tag;
41*4882a593Smuzhiyun 	__u32	tag_len;		/* the length of the tag. Use zero for digest size or max
42*4882a593Smuzhiyun 					 * tag.
43*4882a593Smuzhiyun 					 */
44*4882a593Smuzhiyun 	__u64	iv;			/* initialization vector for encryption operations */
45*4882a593Smuzhiyun 	__u32   iv_len;
46*4882a593Smuzhiyun };
47*4882a593Smuzhiyun 
48*4882a593Smuzhiyun /* input of RIOCCRYPT_FD_MAP/RIOCCRYPT_FD_UNMAP */
49*4882a593Smuzhiyun struct crypt_fd_map_op {
50*4882a593Smuzhiyun 	int	dma_fd;		/* session identifier */
51*4882a593Smuzhiyun 	__u32	phys_addr;	/* physics addr */
52*4882a593Smuzhiyun };
53*4882a593Smuzhiyun 
54*4882a593Smuzhiyun #define AOP_ENCRYPT	0
55*4882a593Smuzhiyun #define AOP_DECRYPT	1
56*4882a593Smuzhiyun 
57*4882a593Smuzhiyun #define COP_FLAG_RSA_PUB	(0 << 8) /* decode as rsa pub key */
58*4882a593Smuzhiyun #define COP_FLAG_RSA_PRIV	(1 << 8) /* decode as rsa priv key */
59*4882a593Smuzhiyun 
60*4882a593Smuzhiyun #define RK_RSA_BER_KEY_MAX	8192	/* The key encoded by ber does not exceed 8K Byte */
61*4882a593Smuzhiyun #define RK_RSA_KEY_MAX_BITS	4096
62*4882a593Smuzhiyun #define RK_RSA_KEY_MAX_BYTES	(RK_RSA_KEY_MAX_BITS / 8)
63*4882a593Smuzhiyun 
64*4882a593Smuzhiyun /* input of RIOCCRYPT_RSA_CRYPT */
65*4882a593Smuzhiyun struct crypt_rsa_op {
66*4882a593Smuzhiyun 	__u16		op;		/* AOP_ENCRYPT/AOP_DECRYPT */
67*4882a593Smuzhiyun 	__u16		flags;		/* see COP_FLAG_* */
68*4882a593Smuzhiyun 	__u8		reserve[4];
69*4882a593Smuzhiyun 	__u64		key;		/* BER coding RSA key */
70*4882a593Smuzhiyun 	__u64		in;		/* pointer to input data */
71*4882a593Smuzhiyun 	__u64		out;		/* pointer to output data */
72*4882a593Smuzhiyun 	__u32		key_len;	/* length of key data */
73*4882a593Smuzhiyun 	__u32		in_len;		/* length of input data */
74*4882a593Smuzhiyun 	__u32		out_len;	/* length of output data */
75*4882a593Smuzhiyun };
76*4882a593Smuzhiyun 
77*4882a593Smuzhiyun #define RIOCCRYPT_FD		_IOWR('r', 104, struct crypt_fd_op)
78*4882a593Smuzhiyun #define RIOCCRYPT_FD_MAP	_IOWR('r', 105, struct crypt_fd_map_op)
79*4882a593Smuzhiyun #define RIOCCRYPT_FD_UNMAP	_IOW('r',  106, struct crypt_fd_map_op)
80*4882a593Smuzhiyun #define RIOCCRYPT_CPU_ACCESS	_IOW('r',  107, struct crypt_fd_map_op)
81*4882a593Smuzhiyun #define RIOCCRYPT_DEV_ACCESS	_IOW('r',  108, struct crypt_fd_map_op)
82*4882a593Smuzhiyun #define RIOCCRYPT_RSA_CRYPT	_IOWR('r', 109, struct crypt_rsa_op)
83*4882a593Smuzhiyun #define RIOCAUTHCRYPT_FD	_IOWR('r', 110, struct crypt_auth_fd_op)
84*4882a593Smuzhiyun 
85*4882a593Smuzhiyun #endif
86