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