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