C语言 如何从OpenSSL 3.0获取支持的公钥算法?

jxct1oxe  于 2023-06-05  发布在  其他
关注(0)|答案(1)|浏览(208)

目前,我使用EVP_PKEY_meth_get_count()EVP_PKEY_meth_get0等调用来获取支持的公钥算法列表。但是,OpenSSL 3.0不赞成使用它们。应该使用哪个API?似乎找不到我用于对称密码的EVP_CIPHER_do_all_sorted的类似物。

dly7yett

dly7yett1#

好吧,看看OpenSSL的apps/list.c就能找到答案。这里是最小化的代码片段,它解决了我的问题(通过CMake检测支持的OpenSSL功能):

#if OPENSSL_VERSION_NUMBER >= 0x30000000L
static void
print_km_name(const char *name, void *param)
{
    /* Do not print OIDs for better clarity */
    if (!name || ((name[0] <= '9') && (name[0] >= '0'))) {
        return;
    }
    printf("%s\n", name);
}

static void
print_km(EVP_KEYMGMT *km, void *param)
{
    EVP_KEYMGMT_names_do_all(km, print_km_name, NULL);
}
#endif

int
list_publickey()
{
#if OPENSSL_VERSION_NUMBER < 0x30000000L
    ...
#else
    EVP_KEYMGMT_do_all_provided(NULL, print_km, NULL);
#endif
    return 0;
}

相关问题