Использование открытого ключа ssh ecdsa в libssl - PullRequest
0 голосов
/ 29 апреля 2019

Я подключаюсь через SSH к (самодельному) серверу и хочу использовать открытый ключ ECDSA в .ssh / authorized_keys для подписи некоторых пакетов.

Ключ выглядит следующим образом:

ecdsa-sha2-nistp256 AAAA...Kw= foo@bar

И мой код:

std::string pubkey = "ecdsa-sha2-nistp256 AAAA...Kw= foo@bar";
std::string ecdsa = "ecdsa-sha2-nistp256 ";
size_t begin = pubkey.find(ecdsa);
size_t end = pubkey.find(" ", begin + ecdsa.size() );
pubkey = pubkey.substr(begin + ecdsa.size(), end - (begin + ecdsa.size()) ); //pubkey is now : AAAA...Kw=

EC_GROUP *ecgroup = EC_GROUP_new_by_curve_name(NID_X9_62_prime256v1);
EC_POINT *point = EC_POINT_new(ecgroup);
int res = EC_POINT_oct2point(ecgroup, point, (unsigned char *)pubkey.c_str(), pubkey.size(), NULL); //Return 0 here, but OK should be 1
eckey = EC_KEY_new();
res = EC_KEY_set_group(eckey, ecgroup);
res = EC_KEY_set_public_key(eckey, point);

Функция EC_POINT_oct2point возвращает мне ошибку, и я не знаю, почему / как ее исправить.Кто-нибудь когда-нибудь сталкивался с этой проблемой?

Спасибо!

...