1*4f75eab0Syuzexi /* SPDX-License-Identifier: BSD-2-Clause */ 2*4f75eab0Syuzexi /* 3*4f75eab0Syuzexi * Copyright (c) 2024, HiSilicon Technologies Co., Ltd. 4*4f75eab0Syuzexi */ 5*4f75eab0Syuzexi 6*4f75eab0Syuzexi #ifndef __HPRE_RSA_H__ 7*4f75eab0Syuzexi #define __HPRE_RSA_H__ 8*4f75eab0Syuzexi 9*4f75eab0Syuzexi #include <stdint.h> 10*4f75eab0Syuzexi #include <tee_api_types.h> 11*4f75eab0Syuzexi #include <types_ext.h> 12*4f75eab0Syuzexi 13*4f75eab0Syuzexi #define PKCS_V1_5_MSG_MIN_LEN 11 14*4f75eab0Syuzexi #define PKCS_V1_5_PS_MIN_LEN 8 15*4f75eab0Syuzexi #define PKCS_V1_5_PS_POS 2 16*4f75eab0Syuzexi #define PKCS_V1_5_FIXED_LEN 3 17*4f75eab0Syuzexi #define PKCS_V1_5_PS_DATA 0x5a 18*4f75eab0Syuzexi #define OAEP_MAX_HASH_LEN 64 19*4f75eab0Syuzexi #define OAEP_MAX_DB_LEN 512 20*4f75eab0Syuzexi #define PRIME_QUALITY_FLAG 1024 21*4f75eab0Syuzexi #define HPRE_RSA_CRT_TOTAL_BUF_SIZE(kbytes) ((kbytes) * 6) 22*4f75eab0Syuzexi #define HPRE_RSA_CRT_KEY_BUF_SIZE(kbytes) ((kbytes) >> 10) 23*4f75eab0Syuzexi #define HPRE_RSA_NCRT_TOTAL_BUF_SIZE(kbytes) ((kbytes) * 4) 24*4f75eab0Syuzexi 25*4f75eab0Syuzexi enum pkcs_v1_5_pad_type { 26*4f75eab0Syuzexi SIGN_PAD = 1, 27*4f75eab0Syuzexi ENCRYPT_PAD = 2 28*4f75eab0Syuzexi }; 29*4f75eab0Syuzexi 30*4f75eab0Syuzexi /* 31*4f75eab0Syuzexi * When the mode is encrypt, the size of the buffer is 32*4f75eab0Syuzexi * HPRE_RSA_NCRT_TOTAL_BUF_SIZE(kbytes) for both crt and ncrt; 33*4f75eab0Syuzexi * when the mode is decrypt, the size of the buffer is 34*4f75eab0Syuzexi * HPRE_RSA_CRT_TOTAL_BUF_SIZE(kbytes) for crt and 35*4f75eab0Syuzexi * HPRE_RSA_NCRT_TOTAL_BUF_SIZE(kbytes) for ncrt. 36*4f75eab0Syuzexi */ 37*4f75eab0Syuzexi struct hpre_rsa_msg { 38*4f75eab0Syuzexi uint8_t *pubkey; 39*4f75eab0Syuzexi paddr_t pubkey_dma; 40*4f75eab0Syuzexi uint8_t *prikey; 41*4f75eab0Syuzexi paddr_t prikey_dma; 42*4f75eab0Syuzexi uint8_t *in; 43*4f75eab0Syuzexi paddr_t in_dma; 44*4f75eab0Syuzexi uint8_t *out; 45*4f75eab0Syuzexi paddr_t out_dma; 46*4f75eab0Syuzexi uint32_t alg_type; 47*4f75eab0Syuzexi uint32_t key_bytes; 48*4f75eab0Syuzexi bool is_private; /* True if private key */ 49*4f75eab0Syuzexi }; 50*4f75eab0Syuzexi 51*4f75eab0Syuzexi #endif 52