diff --git a/tests/suites/test_suite_pkwrite.data b/tests/suites/test_suite_pkwrite.data
index 83bfdcb..1a1a737 100644
--- a/tests/suites/test_suite_pkwrite.data
+++ b/tests/suites/test_suite_pkwrite.data
@@ -93,3 +93,23 @@
 Private key write check EC Brainpool 512 bits (DER)
 depends_on:MBEDTLS_ECP_C:MBEDTLS_ECP_DP_BP512R1_ENABLED
 pk_write_key_check:"data_files/ec_bp512_prv.der":TEST_DER
+
+Derive public key RSA
+depends_on:MBEDTLS_RSA_C
+pk_write_check_public_key_derivation:"data_files/server1.key":"data_files/server1.pubkey.der"
+
+Derive public key RSA 4096
+depends_on:MBEDTLS_RSA_C
+pk_write_check_public_key_derivation:"data_files/rsa4096_prv.der":"data_files/rsa4096_pub.der"
+
+Derive public key EC 192 bits
+depends_on:MBEDTLS_ECP_LIGHT:MBEDTLS_ECP_DP_SECP192R1_ENABLED
+pk_write_check_public_key_derivation:"data_files/ec_prv.sec1.der":"data_files/ec_pub.der"
+
+Derive public key EC 521 bits
+depends_on:MBEDTLS_ECP_LIGHT:MBEDTLS_ECP_DP_SECP521R1_ENABLED
+pk_write_check_public_key_derivation:"data_files/ec_521_prv.der":"data_files/ec_521_pub.der"
+
+Derive public key EC Brainpool 512 bits
+depends_on:MBEDTLS_ECP_LIGHT:MBEDTLS_ECP_DP_BP512R1_ENABLED
+pk_write_check_public_key_derivation:"data_files/ec_bp512_prv.der":"data_files/ec_bp512_pub.der"
diff --git a/tests/suites/test_suite_pkwrite.function b/tests/suites/test_suite_pkwrite.function
index f90281d..777bb18 100644
--- a/tests/suites/test_suite_pkwrite.function
+++ b/tests/suites/test_suite_pkwrite.function
@@ -2,6 +2,7 @@
 #include "mbedtls/pk.h"
 #include "mbedtls/pem.h"
 #include "mbedtls/oid.h"
+#include "psa/crypto_sizes.h"
 
 typedef enum {
     TEST_PEM,
@@ -123,3 +124,77 @@
     goto exit; /* make the compiler happy */
 }
 /* END_CASE */
+
+/* BEGIN_CASE */
+void pk_write_check_public_key_derivation(char *priv_key_file,
+                                          char *pub_key_file)
+{
+    mbedtls_pk_context priv_key, pub_key;
+    uint8_t derived_key_raw[PSA_EXPORT_PUBLIC_KEY_MAX_SIZE];
+    uint8_t *derived_key_start;
+    size_t derived_key_len = 0;
+    uint8_t pub_key_raw[PSA_EXPORT_PUBLIC_KEY_MAX_SIZE];
+    uint8_t *pub_key_start;
+    size_t pub_key_len = 0;
+#if defined(MBEDTLS_USE_PSA_CRYPTO)
+    mbedtls_svc_key_id_t opaque_key_id = MBEDTLS_SVC_KEY_ID_INIT;
+#endif /* MBEDTLS_USE_PSA_CRYPTO */
+
+    mbedtls_pk_init(&priv_key);
+    mbedtls_pk_init(&pub_key);
+    USE_PSA_INIT();
+
+    memset(derived_key_raw, 0, sizeof(derived_key_raw));
+    memset(pub_key_raw, 0, sizeof(pub_key_raw));
+
+    TEST_EQUAL(mbedtls_pk_parse_keyfile(&priv_key, priv_key_file, NULL,
+                                        mbedtls_test_rnd_std_rand, NULL), 0);
+    TEST_EQUAL(mbedtls_pk_parse_public_keyfile(&pub_key, pub_key_file), 0);
+
+    /* mbedtls_pk_write_pubkey() writes data backward in the provided buffer,
+     * i.e. derived_key_raw, so we place derived_key_start at the end of it
+     * and it will be updated accordingly on return.
+     * The same holds for pub_key_raw and pub_key_start below.*/
+    derived_key_start = derived_key_raw + sizeof(derived_key_raw);
+    TEST_LE_U(1, mbedtls_pk_write_pubkey(&derived_key_start,
+                                         derived_key_raw, &priv_key));
+    derived_key_len = sizeof(derived_key_raw) -
+                      (derived_key_start - derived_key_raw);
+
+
+    pub_key_start = pub_key_raw + sizeof(pub_key_raw);
+    TEST_LE_U(1, mbedtls_pk_write_pubkey(&pub_key_start,
+                                         pub_key_raw, &pub_key));
+    pub_key_len = sizeof(pub_key_raw) -
+                  (pub_key_start - pub_key_raw);
+
+    ASSERT_COMPARE(derived_key_start, derived_key_len,
+                   pub_key_start, pub_key_len);
+
+#if defined(MBEDTLS_USE_PSA_CRYPTO)
+    mbedtls_platform_zeroize(derived_key_raw, sizeof(derived_key_raw));
+    derived_key_len = 0;
+
+    TEST_EQUAL(mbedtls_pk_wrap_as_opaque(&priv_key, &opaque_key_id,
+                                         PSA_ALG_NONE, PSA_KEY_USAGE_EXPORT,
+                                         PSA_ALG_NONE), 0);
+
+    derived_key_start = derived_key_raw + sizeof(derived_key_raw);
+    TEST_LE_U(1, mbedtls_pk_write_pubkey(&derived_key_start,
+                                         derived_key_raw, &priv_key));
+    derived_key_len = sizeof(derived_key_raw) -
+                      (derived_key_start - derived_key_raw);
+
+    ASSERT_COMPARE(derived_key_start, derived_key_len,
+                   pub_key_start, pub_key_len);
+#endif /* MBEDTLS_USE_PSA_CRYPTO */
+
+exit:
+#if defined(MBEDTLS_USE_PSA_CRYPTO)
+    psa_destroy_key(opaque_key_id);
+#endif /* MBEDTLS_USE_PSA_CRYPTO */
+    mbedtls_pk_free(&pub_key);
+    mbedtls_pk_free(&priv_key);
+    USE_PSA_DONE();
+}
+/* END_CASE */
