LibCrypt, что такое использование параметра `ctx` в BN_div? - PullRequest
0 голосов
/ 25 января 2019

В моей попытке реализовать соглашение о ключах Burmester-Desmedt с использованием чистого CI необходимо разделить 2 открытых ключа, поэтому я подумал, что BN_div должен выполнить эту работу.Но когда я читаю документацию:

делит a на d и помещает результат в dv, а остаток в rem (dv = a / d, rem = a% d).Любой из dv и rem может иметь значение NULL, и в этом случае соответствующее значение не возвращается.Результат округляется до нуля;таким образом, если a отрицательный, остаток будет нулевым или отрицательным.Для деления на степени 2 используйте BN_rshift (3).

Я не могу понять, для чего используется параметр ctx, до сих пор я понял, что wjat это:

rem=a%d
dv=a/d

В этой операции ctx используется для параметра, используемого для некоторой рекурсии, и должен быть установлен как NULL?

Ответы [ 2 ]

0 голосов
/ 25 января 2019

Для всех функций ctx - это ранее выделенный BN_CTX, используемый для временных переменных; см. BN_CTX_new.

так что вы должны сделать

BN_CTX *ctx = BN_CTX_new();
BIGNUM dv;
BIGNUM rem;
BIGNUM a = ...;
BIGNUM d = ...;

if (!BN_div(&dv, &rem, &a, &d, ctx))
  ...error case
else
  ...ok case

если у вас есть другие BN_xx для вызова, вы можете использовать тот же ctx , это цель

0 голосов
/ 25 января 2019

Дословно из документов :

BN_CTX - это структура, которая содержит временные переменные BIGNUM, используемые библиотечными функциями.Поскольку динамическое выделение памяти для создания BIGNUM довольно дорого при использовании в сочетании с повторными вызовами подпрограмм, используется структура BN_CTX.

Использование BN_CTX_new() для создания контекста.Позвоните BN_CTX_free() когда закончите.

...