background
openssl v3 之后的 OSSL_PARAM
处理 OSSL_PARAM_INTEGER, OSSL_PARAM_UNSIGNED_INTEGER
是按native form的,也就是遵守system本身的big endian, little endian。
因此,OSSL_PARAM_set_BN 内部使用BN_bn2native
将Bignum按转成符合system endian form的raw binary,避免在little endian系统出现大小端兼容问题。
EVP_PKEY_set_bn_param内部也有类似处理
problem
OSSL_PARAM_construct_BN 的value输入是unsigned char*, size_t
,而非BIGNUM *
,因此,调用方须自行处理endian问题。
sample
举例,将BIGNUM的priv_bn转换为natvie endian form的binary,再construct BN,能够生成以priv_bn为私钥的params。
否则,容易在hexstr, binary, bignum的转换间出错。
因此,直接调用EVP_PKEY_set_bn_param
更简单。