1

我有以下代码:

/*
* 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 应该是什么?

我也在看这个似乎相关的问题。任何意见,将不胜感激!

编辑

类似这样的事情是正确的吗?

_BN_encode(bignum, bin_bignum, sizeof(char));
4

1 回答 1

1

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

顺便说一句,该函数似乎有一个错误 - 我强烈怀疑memset()调用应该是memset(p, 0, pad);.

于 2013-09-25T11:33:04.447 回答