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