mbedtls_pk_encrypt底层转mbedtls_rsa_context是否为Bug?技术咨询
这不是Bug,是mbedtls的设计机制
你看到的强制转换是mbedtls通用公钥接口的正常实现逻辑,原因如下:
- mbedtls的
mbedtls_pk_context是一个通用密钥容器,它内部通过指针关联了具体密钥算法的上下文(比如RSA、ECC等)。当你从证书解析得到的是RSA公钥时,mbedtls_pk_context内部实际持有的就是mbedtls_rsa_context实例。 rsa_encrypt_wrap()作为RSA加密的具体实现函数,只会在mbedtls_pk_context的类型被校验为MBEDTLS_PK_RSA之后才会被调用,这时候强制转换是安全的。在mbedtls_pk_encrypt()的逻辑里,会先检查密钥类型,只有匹配对应算法时才会进入对应的wrap函数,不会出现类型不匹配的非法转换。
你可以在调用mbedtls_pk_encrypt()之前,先通过以下代码确认密钥类型:
if(mbedtls_pk_get_type(&pk_ctx) != MBEDTLS_PK_RSA) { // 处理非RSA密钥的情况 }
这种设计是为了让上层代码通过统一的mbedtls_pk_*接口操作不同类型的公钥,无需关心底层具体算法的上下文结构,属于mbedtls抽象层的常规实现方式,在v2.28.1版本中是稳定且合理的设计,并非Bug。
内容的提问来源于stack exchange,提问作者Jacques Samoun
相关产品推荐
相关产品推荐

