diff --git a/programs/psa/CMakeLists.txt b/programs/psa/CMakeLists.txt
index 450ef36..6629670 100644
--- a/programs/psa/CMakeLists.txt
+++ b/programs/psa/CMakeLists.txt
@@ -1,7 +1,8 @@
 set(executables
     aead_cipher_psa
     crypto_examples
-    hmac_md_psa
+    hmac_non_psa
+    hmac_psa
     key_ladder_demo
     psa_constant_names
 )
diff --git a/programs/psa/hmac_non_psa.c b/programs/psa/hmac_non_psa.c
new file mode 100644
index 0000000..c7ced7c
--- /dev/null
+++ b/programs/psa/hmac_non_psa.c
@@ -0,0 +1,113 @@
+/*
+ * This is a companion to hmac_psa.c, doing the same operations with the
+ * legacy MD API. The goal is that comparing the two programs will help people
+ * migrating to the PSA Crypto API.
+ *
+ *  Copyright The Mbed TLS Contributors
+ *  SPDX-License-Identifier: Apache-2.0
+ *
+ *  Licensed under the Apache License, Version 2.0 (the "License"); you may
+ *  not use this file except in compliance with the License.
+ *  You may obtain a copy of the License at
+ *
+ *  http://www.apache.org/licenses/LICENSE-2.0
+ *
+ *  Unless required by applicable law or agreed to in writing, software
+ *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
+ *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ *  See the License for the specific language governing permissions and
+ *  limitations under the License.
+ */
+
+/*
+ * When in comes to multi-part HMAC operations, the `mbedtls_md_context`
+ * serves a dual purpose (1) hold the key, and (2) save progress information
+ * for the current operation. With PSA those roles are held by two disinct
+ * objects: (1) a psa_key_id_t to hold the key, and (2) a psa_operation_t for
+ * multi-part progress.
+ *
+ * This program and its companion hmac_psa.c illustrate this by doing the
+ * same sequence of multi-part HMAC computation with both APIs; looking at the
+ * two side by side should make the differences and similarities clear.
+ */
+
+#include <stdio.h>
+
+#include "mbedtls/build_info.h"
+
+#if !defined(MBEDTLS_MD_C)
+int main( void )
+{
+    printf( "MBEDTLS_MD_C not defined\r\n" );
+    return( 0 );
+}
+#else
+
+#include "mbedtls/md.h"
+
+/*
+ * Dummy inputs for HMAC
+ */
+const unsigned char msg1_part1[] = { 0x01, 0x02 };
+const unsigned char msg1_part2[] = { 0x03, 0x04 };
+const unsigned char msg2_part1[] = { 0x05, 0x05 };
+const unsigned char msg2_part2[] = { 0x06, 0x06 };
+
+const unsigned char key_bytes[32] = { 0 };
+
+unsigned char out[32];
+
+void print_out( const char *title )
+{
+    printf( "%s:", title );
+    for( size_t i = 0; i < sizeof( out ); i++ )
+        printf( " %02x", out[i] );
+    printf( "\n" );
+}
+
+#define CHK( code )     \
+    do {                \
+        ret = code;     \
+        if( ret != 0 )  \
+            goto exit;  \
+    } while( 0 )
+
+int hmac_demo(void)
+{
+    int ret;
+    mbedtls_md_context_t ctx;
+
+    mbedtls_md_init( &ctx );
+
+    /* prepare context and load key */
+    CHK( mbedtls_md_setup( &ctx, mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ), 1 ) );
+    CHK( mbedtls_md_hmac_starts( &ctx, key_bytes, sizeof( key_bytes ) ) );
+
+    /* compute HMAC(key, msg1_part1 | msg1_part2) */
+    CHK( mbedtls_md_hmac_update( &ctx, msg1_part1, sizeof( msg1_part1 ) ) );
+    CHK( mbedtls_md_hmac_update( &ctx, msg1_part2, sizeof( msg1_part2 ) ) );
+    CHK( mbedtls_md_hmac_finish( &ctx, out ) );
+    print_out( "msg1" );
+
+    /* compute HMAC(key, msg2_part1 | msg2_part2) */
+    CHK( mbedtls_md_hmac_reset( &ctx ) ); // prepare for new operation
+    CHK( mbedtls_md_hmac_update( &ctx, msg2_part1, sizeof( msg2_part1 ) ) );
+    CHK( mbedtls_md_hmac_update( &ctx, msg2_part2, sizeof( msg2_part2 ) ) );
+    CHK( mbedtls_md_hmac_finish( &ctx, out ) );
+    print_out( "msg2" );
+
+exit:
+    mbedtls_md_free( &ctx );
+
+    return( ret );
+}
+
+int main(void)
+{
+    int ret = hmac_demo();
+    if( ret != 0 )
+        printf( "ret = %d (-0x%04x)\n", ret, (unsigned) -ret );
+
+}
+
+#endif
diff --git a/programs/psa/hmac_md_psa.c b/programs/psa/hmac_psa.c
similarity index 64%
rename from programs/psa/hmac_md_psa.c
rename to programs/psa/hmac_psa.c
index 49e1ece..019b7ff 100644
--- a/programs/psa/hmac_md_psa.c
+++ b/programs/psa/hmac_psa.c
@@ -1,6 +1,8 @@
 /*
- * This is a simple example of multi-part HMAC computation using both the old
- * MD API and the new PSA API; its goal is to help migration to PSA Crypto.
+ * This is a simple example of multi-part HMAC computation using the PSA
+ * Crypto API. It comes with a companion program hmac_non_psa.c, which does
+ * the same operations with the legacy MD API. The goal is that comparing the
+ * two programs will help people migrating to the PSA Crypto API.
  *
  *  Copyright The Mbed TLS Contributors
  *  SPDX-License-Identifier: Apache-2.0
@@ -25,26 +27,25 @@
  * objects: (1) a psa_key_id_t to hold the key, and (2) a psa_operation_t for
  * multi-part progress.
  *
- * This program illustrates this by doing the same sequence of multi-part HMAC
- * computation with both APIs; looking at the two functions md() and mac() side
- * by side should make the differences and similarities clear.
+ * This program and its companion hmac_non_psa.c illustrate this by doing the
+ * same sequence of multi-part HMAC computation with both APIs; looking at the
+ * two side by side should make the differences and similarities clear.
  */
 
 #include <stdio.h>
 
 #include "mbedtls/build_info.h"
 
-#if !defined(MBEDTLS_PSA_CRYPTO_C) || !defined(MBEDTLS_MD_C) || \
+#if !defined(MBEDTLS_PSA_CRYPTO_C) || \
     defined(MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER)
 int main( void )
 {
-    printf( "MBEDTLS_PSA_CRYPTO_C and/or MBEDTLS_MD_C not defined, "
+    printf( "MBEDTLS_PSA_CRYPTO_C not defined, "
             "and/or MBEDTLS_PSA_CRYPTO_KEY_ID_ENCODES_OWNER defined\r\n" );
     return( 0 );
 }
-#else /* MBEDTLS_PSA_CRYPTO_C && MBEDTLS_MD_C */
+#else
 
-#include "mbedtls/md.h"
 #include "psa/crypto.h"
 
 /*
@@ -69,51 +70,12 @@
 
 #define CHK( code )     \
     do {                \
-        ret = code;     \
-        if( ret != 0 )  \
-            goto exit;  \
-    } while( 0 )
-
-int md(void)
-{
-    int ret;
-    mbedtls_md_context_t ctx;
-
-    mbedtls_md_init( &ctx );
-
-    /* prepare context and load key */
-    CHK( mbedtls_md_setup( &ctx, mbedtls_md_info_from_type( MBEDTLS_MD_SHA256 ), 1 ) );
-    CHK( mbedtls_md_hmac_starts( &ctx, key_bytes, sizeof( key_bytes ) ) );
-
-    /* compute HMAC(key, msg1_part1 | msg1_part2) */
-    CHK( mbedtls_md_hmac_update( &ctx, msg1_part1, sizeof( msg1_part1 ) ) );
-    CHK( mbedtls_md_hmac_update( &ctx, msg1_part2, sizeof( msg1_part2 ) ) );
-    CHK( mbedtls_md_hmac_finish( &ctx, out ) );
-    print_out( "msg1" );
-
-    /* compute HMAC(key, msg2_part1 | msg2_part2) */
-    CHK( mbedtls_md_hmac_reset( &ctx ) ); // prepare for new operation
-    CHK( mbedtls_md_hmac_update( &ctx, msg2_part1, sizeof( msg2_part1 ) ) );
-    CHK( mbedtls_md_hmac_update( &ctx, msg2_part2, sizeof( msg2_part2 ) ) );
-    CHK( mbedtls_md_hmac_finish( &ctx, out ) );
-    print_out( "msg2" );
-
-exit:
-    mbedtls_md_free( &ctx );
-
-    return( ret );
-}
-
-#undef CHK
-
-#define CHK( code )     \
-    do {                \
         status = code;     \
         if( status != PSA_SUCCESS )  \
             goto exit;  \
     } while( 0 )
 
-psa_status_t mac(void)
+psa_status_t hmac_demo(void)
 {
     psa_status_t status;
     psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
@@ -155,23 +117,15 @@
     return( status );
 }
 
-#undef CHK
-
 int main(void)
 {
-    printf( "MD\n" );
-    int ret = md();
-    if( ret != 0 )
-        printf( "ret = %d (-0x%04x)\n", ret, (unsigned) -ret );
-
     psa_status_t status = psa_crypto_init();
     if( status != PSA_SUCCESS )
         printf( "psa init: %d\n", status );
 
-    printf( "\nPSA\n" );
-    status = mac();
+    status = hmac_demo();
     if( status != PSA_SUCCESS )
-        printf( "psa mac: %d\n", status );
+        printf( "hmac_demo: %d\n", status );
 }
 
-#endif /* MBEDTLS_PSA_CRYPTO_C && MBEDTLS_MD_C */
+#endif
