我有以下代码:
/*
* Special note about BN_bn2bin():
* OpenSSL's BN_bn2bin() will truncate numbers at the front, but ISAKMP
* wants leading zero's instead.
*/
void _BN_encode(BIGNUM *bn, unsigned char *p, int len)
{
int pad;
assert(bn);
if ((pad = len - BN_num_bytes(bn))) {
if (pad < 0) {
assert(1);
return;
}
memset(p, '\0', 1);
BN_bn2bin(bn, p + pad);
} else {
BN_bn2bin(bn, p);
}
}
我认为* bn是我要转换的BIGNUM,* p是我想存储的地方,但是参数len应该是什么?
我也在查看似乎相关的this问题。任何建议将不胜感激!
修改
这是否正确?
_BN_encode(bignum, bin_bignum, sizeof(char));
答案 0 :(得分:1)
len
是p
指向的缓冲区的长度。该函数将转换后的bignum填充到len
个字节(使用零,这不会改变所表示数字的数学值)。
顺便说一句,该功能似乎有一个错误 - 我强烈怀疑memset()
来电应该是memset(p, 0, pad);
。