Как мне установить закрытый ключ для подписи сообщений при использовании ECDSA в OpenSSL программно? У меня есть следующий код:
static int create_signature(unsigned char* hash)
{
EC_KEY *eckey=NULL;
EC_GROUP *ecgroup=NULL;
EVP_PKEY *evpkey=NULL;
unsigned char *signature=NULL;
point_conversion_form_t form = POINT_CONVERSION_UNCOMPRESSED;
int signature_size, block_size;
unsigned char * block=NULL;
ecgroup = get_ec_group_192();
EC_GROUP_set_asn1_flag(ecgroup, OPENSSL_EC_NAMED_CURVE);
EC_GROUP_set_point_conversion_form(ecgroup, form);
eckey=EC_KEY_new();
EC_KEY_set_group(eckey,ecgroup);
EC_KEY_generate_key(eckey);
evpkey=EVP_PKEY_new();
EVP_PKEY_assign_EC_KEY(evpkey,eckey);
signature=OPENSSL_malloc(EVP_PKEY_size(evpkey));
ECDSA_sign(0, hash, sizeof(hash), signature, &signature_size, eckey);
printf("%s", signature);
return 0;
}
Функция get_ec_group_192()
создается путем запуска openssl ecparam -C -name secp192k1 -genkey
, который также генерирует некоторые EC PARAMETERS
и EC PRIVATE KEY
.
Я пытаюсь зашифровать сообщение, содержащееся в hash
, с помощью моего личного ключа, чтобы его мог расшифровать только открытый ключ. Возможно ли это с помощью приведенного выше кода, или я делаю это совершенно неправильно?