Во всех примерах, которые я видел, для генерации ключа с использованием эллиптической кривой через OpenSSL с использованием функций высокого уровня EVP необходимы две переменные EVP_PKEY_CTX
и EVP_PKEY
(всего 4):
- Одна пара ключ / контекст для генерации параметра
- Одна пара ключ / контекст для самого фактического ключа (инициализируется параметрами).
Можно ли объединить это до одной пары ключ / контекст для обоих? Насколько я понимаю, из примеров, которые я видел, логика выглядит так:
- Создайте
EVP_PKEY_CONTEXT
, используя любой желаемый идентификатор алгоритма кривой.
- Инициализировать контекст с помощью
EVP_PKEY_paramgen_init()
.
- Вызывайте любые функции установки параметров, которые вы хотите в контексте параметров (например,
EVP_PKEY_CTX_set_ec_paramgen_curve_nid
).
- Создайте / завершите параметры с помощью
EVP_PKEY_paramgen
, что даст вам EVP_PKEY
.
- Создайте
EVP_PKEY_CTX
для фактического ключа, инициализированного параметром EVP_PKEY
из предыдущего шага.
- Инициируйте ключ с помощью
EVP_PKEY_keygen_init()
.
- Генерация / финализация ключа с помощью
EVP_PKEY_keygen()
.
Есть ли способ упростить этот процесс? Например, могу ли я просто инициировать ключ, вызвать функции paramgen для клавиши, а затем вызвать EVP_PKEY_keygen()
? Это похоже на то, как это работает с генерацией ключей RSA из моего опыта (вы действительно делаете только последние 2 шага выше, с шагом 3 в середине).
Документация утверждает это, что, по-видимому, указывает на то, что вторая пара контекст / ключ не нужна:
После вызова алгоритма EVP_PKEY_keygen_init () или EVP_PKEY_paramgen_init () могут быть выполнены специальные операции управления для установки любых подходящих параметров для операции.
Функции EVP_PKEY_keygen () и EVP_PKEY_paramgen () могут вызываться более одного раза в одном и том же контексте, если несколько операций выполняются с использованием одних и тех же параметров.
Может быть, я неправильно понимаю, но похоже, что он говорит, что вы можете вызывать функции установки параметров после вызова EVP_PKEY_keygen_init()
вместо использования функций paramgen
.