diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index 50c8a89..1a038a1 100644
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -637,6 +637,9 @@
 }
 #endif /* defined(MBEDTLS_ECP_C) */
 
+/** Import key data into a slot. `slot->type` must have been set
+ * previously. This function assumes that the slot does not contain
+ * any key material yet. On failure, the slot content is unchanged. */
 static psa_status_t psa_import_key_into_slot( key_slot_t *slot,
                                               const uint8_t *data,
                                               size_t data_length )
@@ -840,6 +843,7 @@
     return( PSA_SUCCESS );
 }
 
+/** Wipe key data from a slot. Preserve metadata such as the policy. */
 static psa_status_t psa_remove_key_data_from_memory( key_slot_t *slot )
 {
     if( slot->type == PSA_KEY_TYPE_NONE )
@@ -876,6 +880,18 @@
     return( PSA_SUCCESS );
 }
 
+/** Completely wipe a slot in memory, including its policy.
+ * Persistent storage is not affected. */
+static psa_status_t psa_wipe_key_slot( key_slot_t *slot )
+{
+    psa_status_t status = psa_remove_key_data_from_memory( slot );
+    /* At this point, key material and other type-specific content has
+     * been wiped. Clear remaining metadata. We can call memset and not
+     * zeroize because the metadata is not particularly sensitive. */
+    memset( slot, 0, sizeof( *slot ) );
+    return( status );
+}
+
 /* A slot is available if nothing has been set in it: default lifetime
  * and policy, no key type. */
 static int psa_internal_is_slot_available( key_slot_t *slot )
@@ -942,7 +958,6 @@
 {
     psa_key_slot_t key;
     key_slot_t *slot;
-    psa_status_t status;
     /* Don't call psa_get_key_slot() so as not to trigger its automatic
      * loading of persistent key data. */
     if( ( handle & PSA_KEY_HANDLE_ALLOCATED_FLAG ) == 0 )
@@ -953,9 +968,7 @@
     slot = &global_data.key_slots[key - 1];
     if( ! slot->allocated )
         return( PSA_ERROR_INVALID_HANDLE );
-    status = psa_remove_key_data_from_memory( slot );
-    memset( slot, 0, sizeof( *slot ) );
-    return( status );
+    return( psa_wipe_key_slot( slot ) );
 }
 
 psa_status_t psa_import_key( psa_key_slot_t key,
@@ -1013,9 +1026,7 @@
             psa_destroy_persistent_key( slot->persistent_storage_id );
     }
 #endif /* defined(MBEDTLS_PSA_CRYPTO_STORAGE_C) */
-    status = psa_remove_key_data_from_memory( slot );
-    /* Zeroize the slot to wipe metadata such as policies. */
-    mbedtls_zeroize( slot, sizeof( *slot ) );
+    status = psa_wipe_key_slot( slot );
     if( status != PSA_SUCCESS )
         return( status );
     return( storage_status );
@@ -4565,9 +4576,7 @@
         for( key = 1; key <= PSA_KEY_SLOT_COUNT; key++ )
         {
             key_slot_t *slot = &global_data.key_slots[key - 1];
-            (void) psa_remove_key_data_from_memory( slot );
-            /* Zeroize the slot to wipe metadata such as policies. */
-            mbedtls_zeroize( slot, sizeof( *slot ) );
+            (void) psa_wipe_key_slot( slot );
         }
     }
     if( global_data.rng_state != RNG_NOT_INITIALIZED )
