Как использовать методы ecx get_priv/pub_key из openssl?
Я пытаюсь перевести на Python pkey_ecx_derive25519
метод благодаря криптографической библиотеке python.
static int pkey_ecx_derive25519(EVP_PKEY_CTX *ctx, unsigned char *key,
size_t *keylen)
{
const unsigned char *privkey, *pubkey;
if (!validate_ecx_derive(ctx, key, keylen, &privkey, &pubkey)
|| (key != NULL
&& X25519(key, privkey, pubkey) == 0))
return 0;
*keylen = X25519_KEYLEN;
return 1;
}
что приводит меня к validate_ecx_derive
функция
static int validate_ecx_derive(EVP_PKEY_CTX *ctx, unsigned char *key,
size_t *keylen,
const unsigned char **privkey,
const unsigned char **pubkey)
{
const ECX_KEY *ecxkey, *peerkey;
if (ctx->pkey == NULL || ctx->peerkey == NULL) {
ECerr(EC_F_VALIDATE_ECX_DERIVE, EC_R_KEYS_NOT_SET);
return 0;
}
ecxkey = ctx->pkey->pkey.ecx;
peerkey = ctx->peerkey->pkey.ecx;
if (ecxkey == NULL || ecxkey->privkey == NULL) {
ECerr(EC_F_VALIDATE_ECX_DERIVE, EC_R_INVALID_PRIVATE_KEY);
return 0;
}
if (peerkey == NULL) {
ECerr(EC_F_VALIDATE_ECX_DERIVE, EC_R_INVALID_PEER_KEY);
return 0;
}
*privkey = ecxkey->privkey;
*pubkey = peerkey->pubkey;
return 1;
}
где я могу видеть privkey
а также pubkey
заселены.
Я нашел эти две функции ecx_get_priv_key
а также ecx_get_pub_key
принадлежащий к ecx25519_asn1_meth
которые помогают получить ключи pub/priv из EVP_PKEY
.
Я бы хотел использовать их из библиотеки python для криптографии. Это вообще возможно?
Я пробовал использовать модифицированную версию криптографической библиотеки python, добавив сигнатуры методов в _cffi_src/openssl/evp.py
файл, но он ломает библиотеку, поскольку эти методы сигнатур отсутствуют в ec_local.h
файл.
Есть ли примеры или способ использовать эти методы из Python? Даже если они кажутся незащищенными.