Я хочу прочитать открытый ключ в байтовый массив на C ...
Что ж, ключ на диске, скорее всего, закодирован в формате PEM. Поскольку это открытый ключ, он, вероятно, имеет пре- и постинкапсулированные границы -----BEGIN PUBLIC KEY-----
и -----END PUBLIC KEY-----
. Вы можете прочитать это так, используя стандартные библиотечные функции.
Вы также можете прочитать открытый ключ с помощью PEM_read_PUBKEY
. Функция возвращает EVP_PKEY*
. Я считаю, что вы можете преобразовать EVP_PKEY*
в EC_KEY*
с помощью:
EC_KEY* ecKey = EVP_PKEY_get1_EC_KEY(pKey);
get1
выше означает, что счетчик ссылок на ключе был увеличен (в отличие от get0
). Не забудьте позвонить EC_KEY_free
, когда закончите с этим.
Я не уверен, как бы вы прочитали открытый ключ в массиве с EVP_PKEY*
или EC_KEY*
. Как минимум, есть две части информации: кривая (например, secp256k1
) и открытый элемент (точка на кривой, которая состоит из (x,y)
координаты). Если названная кривая (т.е. OID) отсутствует (т.е. отсутствует флаг OPENSSL_EC_NAMED_CURVE
), тогда у вас есть все параметры домена, такие как p
, a
, b
, G
и т. Д. вы должны посмотреть на кодировку ASN.1 / DER. Я думаю, это та самая кладовая, которую ты собираешься получить.
person
jww
schedule
26.07.2014