不确定将BIGNUM存储在char中的参数 - BN_bn2bin()

时间:2013-09-25 11:07:31

标签: c binary openssl biginteger bignum

我有以下代码:

/*
* 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));

1 个答案:

答案 0 :(得分:1)

lenp指向的缓冲区的长度。该函数将转换后的bignum填充到len个字节(使用零,这不会改变所表示数字的数学值)。

顺便说一句,该功能似乎有一个错误 - 我强烈怀疑memset()来电应该是memset(p, 0, pad);