openssl-util: introduce openssl_extract_public_key() helper function

This splits out common logic in keyutil and systemd-measure.

Note, previously d2i_PUBKEY_fp() was used, but now it is replaced with
d2i_PUBKEY(), as musl seems to not support reading from memstream.
This commit is contained in:
Yu Watanabe
2025-11-24 22:49:55 +09:00
parent 4f6ef13f43
commit da22ccf48f
4 changed files with 35 additions and 35 deletions
+27
View File
@@ -1753,6 +1753,33 @@ int openssl_load_private_key(
return 0;
}
int openssl_extract_public_key(EVP_PKEY *private_key, EVP_PKEY **ret) {
int r;
assert(private_key);
assert(ret);
_cleanup_(memstream_done) MemStream m = {};
FILE *tf = memstream_init(&m);
if (!tf)
return log_oom();
if (i2d_PUBKEY_fp(tf, private_key) != 1)
return -EIO;
_cleanup_(erase_and_freep) char *buf = NULL;
size_t len;
r = memstream_finalize(&m, &buf, &len);
if (r < 0)
return r;
const unsigned char *t = (unsigned char*) buf;
if (!d2i_PUBKEY(ret, &t, len))
return -EIO;
return 0;
}
#endif
int parse_openssl_certificate_source_argument(
+2
View File
@@ -195,6 +195,8 @@ int openssl_load_private_key(
EVP_PKEY **ret_private_key,
OpenSSLAskPasswordUI **ret_user_interface);
int openssl_extract_public_key(EVP_PKEY *private_key, EVP_PKEY **ret);
struct OpenSSLAskPasswordUI {
AskPasswordRequest request;
#ifndef OPENSSL_NO_UI_CONSOLE