Искам да прочета публичния ключ в байтов масив в 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