+#if OPENSSL_VERSION_MAJOR >= 3
+static bool write_key_to_pem(const rsa_t *rsa, FILE *fp, int selection) {
+ OSSL_ENCODER_CTX *enc = OSSL_ENCODER_CTX_new_for_pkey(rsa, selection, "PEM", NULL, NULL);
+
+ if(!enc) {
+ openssl_err("create encoder context");
+ return false;
+ }
+
+ bool ok = OSSL_ENCODER_to_fp(enc, fp);
+ OSSL_ENCODER_CTX_free(enc);
+
+ if(!ok) {
+ openssl_err("write key to file");
+ }
+
+ return ok;
+}
+#endif
+