2015-01-19 2 views
0

У меня есть такой код:неправильная инициализация BIGNUM в OpenSSL

BIGNUM *p = BN_new(), *B = BN_new(), *a = BN_new(), *ret = BN_new(); 

BN_bin2bn((uchar*)"\x01\x02\0x03\0",3,p); 
BN_bin2bn((uchar*)"\x02\x03\0x04\0",3,B); 
BN_bin2bn((uchar*)"\x03\x04\0x05\0",3,a); 

Print_Format("p: %s",BN_bn2dec(p)); //expected: 66051, prints 66048 
Print_Format("B: %s",BN_bn2dec(B)); //expected: 131844, prints 131840 
Print_Format("a: %s",BN_bn2dec(a)); //expected: 197637, prints 197632 

Распечатки дают неправильные результаты. Когда я конвертировать результаты, которые код дал шестнадцатеричному число, это выглядит следующим образом:

010203 => 010200 
020304 => 020300 
030405 => 030400 

Почему BN_bin2n игнорируя последние байты ввода? Есть ли у кого-нибудь идеи?

+0

Хорошо, я увидел опечатку. если кто-то хочет очков, я позволю им ответить :) –

ответ

0

Ошибка была в:

BN_bin2bn((uchar*)"\x01\x02\**0x03**\0",3,p); 
BN_bin2bn((uchar*)"\x02\x03\**0x04**\0",3,B); 
BN_bin2bn((uchar*)"\x03\x04\**0x05**\0",3,a); 

Это должно быть

BN_bin2bn((uchar*)"\x01\x02\x03\0",3,p); 
BN_bin2bn((uchar*)"\x02\x03\x04\0",3,B); 
BN_bin2bn((uchar*)"\x03\x04\x05\0",3,a);