]> git.ipfire.org Git - thirdparty/systemd.git/commitdiff
openssl: add openssl_pkey_from_pem()
authorDan Streetman <ddstreet@ieee.org>
Wed, 19 Jul 2023 02:48:34 +0000 (22:48 -0400)
committerDan Streetman <ddstreet@ieee.org>
Fri, 4 Aug 2023 14:57:07 +0000 (10:57 -0400)
Add function to create EVP_PKEY from PEM buffer.

src/shared/openssl-util.c
src/shared/openssl-util.h

index c7fcbd9ea48f4659739f91fec519938eb7cb0db0..9021d910770c016a6466be702694055cd8c07553 100644 (file)
@@ -1,10 +1,29 @@
 /* SPDX-License-Identifier: LGPL-2.1-or-later */
 
+#include "fd-util.h"
 #include "openssl-util.h"
 #include "alloc-util.h"
 #include "hexdecoct.h"
 
 #if HAVE_OPENSSL
+int openssl_pkey_from_pem(const void *pem, size_t pem_size, EVP_PKEY **ret) {
+        assert(pem);
+        assert(ret);
+
+        _cleanup_fclose_ FILE *f = NULL;
+        f = fmemopen((void*) pem, pem_size, "r");
+        if (!f)
+                return log_oom_debug();
+
+        _cleanup_(EVP_PKEY_freep) EVP_PKEY *pkey = PEM_read_PUBKEY(f, NULL, NULL, NULL);
+        if (!pkey)
+                return log_debug_errno(SYNTHETIC_ERRNO(EIO), "Failed to parse PEM.");
+
+        *ret = TAKE_PTR(pkey);
+
+        return 0;
+}
+
 int openssl_hash(const EVP_MD *alg,
                  const void *msg,
                  size_t msg_len,
index 4fa0a959665f7180cecdb3bc08855897bc4ea9ec..231bcc2bf81797ca189fe0ff63b5774919519ae1 100644 (file)
@@ -43,6 +43,8 @@ static inline void sk_X509_free_allp(STACK_OF(X509) **sk) {
         sk_X509_pop_free(*sk, X509_free);
 }
 
+int openssl_pkey_from_pem(const void *pem, size_t pem_size, EVP_PKEY **ret);
+
 int openssl_hash(const EVP_MD *alg, const void *msg, size_t msg_len, uint8_t *ret_hash, size_t *ret_hash_len);
 
 int rsa_encrypt_bytes(EVP_PKEY *pkey, const void *decrypted_key, size_t decrypted_key_size, void **ret_encrypt_key, size_t *ret_encrypt_key_size);