xref: /OK3568_Linux_fs/external/security/librkcrypto/src/rkcrypto_rsa_helper.h (revision 4882a59341e53eb6f0b4789bf948001014eff981)
1*4882a593Smuzhiyun /*
2*4882a593Smuzhiyun  * Copyright (c) 2022 Rockchip Electronics Co. Ltd.
3*4882a593Smuzhiyun  */
4*4882a593Smuzhiyun 
5*4882a593Smuzhiyun #ifndef __RKCRYPTO_RSA_HELPER_H__
6*4882a593Smuzhiyun #define __RKCRYPTO_RSA_HELPER_H__
7*4882a593Smuzhiyun 
8*4882a593Smuzhiyun #include <stdint.h>
9*4882a593Smuzhiyun #include "rkcrypto_common.h"
10*4882a593Smuzhiyun 
11*4882a593Smuzhiyun /*
12*4882a593Smuzhiyun  * The rk_rsa_pub_key will be encoded in BER format as follows
13*4882a593Smuzhiyun  *
14*4882a593Smuzhiyun  * SEQUENCE {
15*4882a593Smuzhiyun  *        n INTEGER ({ rsa_get_n }),
16*4882a593Smuzhiyun  *        e INTEGER ({ rsa_get_e })
17*4882a593Smuzhiyun  * }
18*4882a593Smuzhiyun  */
19*4882a593Smuzhiyun 
20*4882a593Smuzhiyun RK_RES rk_rsa_pubkey_encode(rk_rsa_pub_key_pack *pub,
21*4882a593Smuzhiyun 			    uint8_t *asn1_key, uint16_t *asn1_key_len, uint16_t *key_bits);
22*4882a593Smuzhiyun 
23*4882a593Smuzhiyun /*
24*4882a593Smuzhiyun  * The rk_rsa_priv_key will be encoded in BER format as follows
25*4882a593Smuzhiyun  *
26*4882a593Smuzhiyun  * SEQUENCE {
27*4882a593Smuzhiyun  *	version		INTEGER,
28*4882a593Smuzhiyun  *	n		INTEGER ({ rsa_get_n }),
29*4882a593Smuzhiyun  *	e		INTEGER ({ rsa_get_e }),
30*4882a593Smuzhiyun  *	d		INTEGER ({ rsa_get_d }),
31*4882a593Smuzhiyun  *	prime1		INTEGER,
32*4882a593Smuzhiyun  *	prime2		INTEGER,
33*4882a593Smuzhiyun  *	exponent1	INTEGER,
34*4882a593Smuzhiyun  *	exponent2	INTEGER,
35*4882a593Smuzhiyun  *	coefficient	INTEGER
36*4882a593Smuzhiyun  * }
37*4882a593Smuzhiyun  */
38*4882a593Smuzhiyun RK_RES rk_rsa_privkey_encode(rk_rsa_priv_key_pack *priv,
39*4882a593Smuzhiyun 			     uint8_t *asn1_key, uint16_t *asn1_key_len, uint16_t *key_bits);
40*4882a593Smuzhiyun 
41*4882a593Smuzhiyun RK_RES rk_rsa_crypt_do_padding(enum RK_RSA_CRYPT_PADDING padding,
42*4882a593Smuzhiyun 			       uint16_t key_len, bool is_priv_key,
43*4882a593Smuzhiyun 			       const uint8_t *data, uint32_t data_len,
44*4882a593Smuzhiyun 			       uint8_t *pad, uint32_t *pad_len);
45*4882a593Smuzhiyun 
46*4882a593Smuzhiyun RK_RES rk_rsa_crypt_undo_padding(enum RK_RSA_CRYPT_PADDING padding,
47*4882a593Smuzhiyun 				 uint16_t key_len, bool is_priv_key,
48*4882a593Smuzhiyun 				 const uint8_t *pad, uint32_t pad_len,
49*4882a593Smuzhiyun 				 uint8_t *data, uint32_t *data_len);
50*4882a593Smuzhiyun 
51*4882a593Smuzhiyun RK_RES rk_rsa_sign_do_padding(enum RK_RSA_SIGN_PADDING padding, uint16_t key_len, uint16_t n_bits,
52*4882a593Smuzhiyun 			      const uint8_t *data, uint32_t data_len, const uint8_t *hash,
53*4882a593Smuzhiyun 			      uint8_t *pad, uint32_t *pad_len);
54*4882a593Smuzhiyun 
55*4882a593Smuzhiyun RK_RES rk_rsa_sign_undo_padding(enum RK_RSA_SIGN_PADDING padding, uint16_t key_len, uint16_t n_bits,
56*4882a593Smuzhiyun 				const uint8_t *data, uint32_t data_len,
57*4882a593Smuzhiyun 				const uint8_t *hash, const uint8_t *dec);
58*4882a593Smuzhiyun #endif
59*4882a593Smuzhiyun 
60