1
我有以下代碼:不確定存儲BIGNUM在煤焦 - BN_bn2bin()
/*
* 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));
任何想法應該如何決定/設置? – TomSelleck
是這樣的嗎? char * buffer = malloc((BN_num_bytes(bignum)+1)* sizeof(char)); (bignum,buffer,BN_bn2mpi(bignum,NULL)); _BN_encode(bignum,buffer,BN_bn2mpi(bignum,NULL)); \t如果(緩衝== NULL){ \t \t fprintf中(錯誤, 「緩衝區爲NULL:(... \ n」); \t}' – TomSelleck
如果你這樣做,那麼你會通過'BN_num_bytes(BIGNUM)+ 1'作爲'_BN_encode()'的最後一個參數,沒有必要乘以sizeof(char) - 這是標準定義的1,也可以使用'BN_num_bytes(bignum)對於更長緩衝區的唯一要求是,如果你傳遞輸出的地方要求將bignum填充到一定的大小,如果你沒有這個要求,你可以直接調用'BN_bn2bin()'。 – caf