Как преобразовать массив int в OpenSSL BIGNUM? - PullRequest
0 голосов
/ 15 апреля 2019

В C ++ я пытаюсь преобразовать массив int, представляющий большое целое число, в BIGNUM, используя библиотеку OpenSSL.

Все в порядке со строкой, содержащей шестнадцатеричное кодирование большого числа, но я не могу найти, как это сделать с массивом.

#include <openssl/bn.h>

int main()
{
    uint32_t hash[4] = { 0x3506fa7d, 0x6bb2dbe9, 0x9041d8e5, 0x6ea31f6b };
    const char p_hash[] = "3506fa7d6bb2dbe99041d8e56ea31f6b";

    BIGNUM *bn_result1 = BN_new();
    BN_hex2bn(&bn_result1, p_hash);

    std::cout << "Big number as Dec: " << BN_bn2dec(bn_result1) << std::endl;
    std::cout << "Big number as Hex: " << BN_bn2hex(bn_result1) << std::endl;

    // How to convert hash[4] to BIGNUM bn_result2?
}

1 Ответ

1 голос
/ 15 апреля 2019

Возможное решение с htobe32 и BN_bin2bn:

for(i=0; i<4; i++) {
    hash[i] = htobe32(hash[i]); /* BN_bin2bn needs big endian data */
}

BN_bin2bn((const unsigned char *)hash, (4*4), &bn_result2);

Если вы уверены, что порядок байтов вашего хоста имеет порядковый номер, вы можете пропустить преобразование, но таким образом вы будете использовать переносимость.

...