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