diff --git a/include/psa/crypto_values.h b/include/psa/crypto_values.h
index 5a903f8..3e7afef 100644
--- a/include/psa/crypto_values.h
+++ b/include/psa/crypto_values.h
@@ -553,6 +553,9 @@
                         ((type) & PSA_KEY_TYPE_ECC_CURVE_MASK) : \
                         0))
 
+/** Check if the curve of given family is Weierstrass elliptic curve. */
+#define PSA_ECC_FAMILY_IS_WEIERSTRASS(family) ((family & 0xc0) == 0)
+
 /** SEC Koblitz curves over prime fields.
  *
  * This family comprises the following curves:
diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index fe46b0d..eab4993 100644
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -4853,25 +4853,24 @@
 */
 #if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \
     defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) || \
-    defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || \
-    defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) || \
-    defined(MBEDTLS_PSA_BUILTIN_ALG_ECDH)
+    defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) || \
+    defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY)
 static psa_status_t psa_generate_derived_ecc_key_weierstrass_helper(
     psa_key_slot_t *slot,
     size_t bits,
     psa_key_derivation_operation_t *operation,
-    uint8_t **data,
-    unsigned *key_out_of_range)
+    uint8_t **data
+    )
 {
-    mbedtls_mpi N;
+    unsigned key_out_of_range = 1;
     mbedtls_mpi k;
     mbedtls_mpi diff_N_2;
-    /* ret variable is used by MBEDTLS_MPI_CHK macro */
+    /* ret variable is initialized to 0 as it is
+       used only by MBEDTLS_MPI_CHK macro */
     int ret = 0;
-    psa_status_t status = PSA_SUCCESS;
+    psa_status_t status = PSA_ERROR_GENERIC_ERROR;
 
     mbedtls_mpi_init( &k );
-    mbedtls_mpi_init( &N );
     mbedtls_mpi_init( &diff_N_2 );
 
     psa_ecc_family_t curve = PSA_KEY_TYPE_ECC_GET_FAMILY(
@@ -4891,47 +4890,52 @@
     if( ( status = mbedtls_to_psa_error( mbedtls_ecp_group_load( &ecp_group, grp_id ) ) ) != 0 )
         goto cleanup;
 
-    /* N is the boundary of the private key domain. */
-    MBEDTLS_MPI_CHK( mbedtls_mpi_copy( &N, &ecp_group.N ) );
+    /* N is the boundary of the private key domain (ecp_group.N). */
     /* Let m be the bit size of N. */
     size_t m = ecp_group.nbits;
 
     size_t m_bytes = PSA_BITS_TO_BYTES( m );
-    if (*data == NULL)
-        *data = mbedtls_calloc( 1, m_bytes );
+
+    /* Note: This function is always called with *data == NULL and it
+     * allocates memory for the data buffer. */
+    *data = mbedtls_calloc( 1, m_bytes );
     if( *data == NULL )
     {
         status = PSA_ERROR_INSUFFICIENT_MEMORY;
         goto cleanup;
     }
-    /* 1. Draw a byte string of length ceiling(m/8) bytes. */
-    if ( ( status = psa_key_derivation_output_bytes( operation, *data, m_bytes ) ) != 0 )
-        goto cleanup;
 
-    /* 2. If m is not a multiple of 8 */
-    if (m % 8)
+    while ( key_out_of_range )
     {
-        /* Set the most significant
-         * (8 * ceiling(m/8) - m) bits of the first byte in
-         * the string to zero.
-         */
-        uint8_t clear_bit_mask = (1 << (m % 8)) - 1;
-        *data[0] &= clear_bit_mask;
+        /* 1. Draw a byte string of length ceiling(m/8) bytes. */
+        if ( ( status = psa_key_derivation_output_bytes( operation, *data, m_bytes ) ) != 0 )
+            goto cleanup;
+
+        /* 2. If m is not a multiple of 8 */
+        if (m % 8)
+        {
+            /* Set the most significant
+            * (8 * ceiling(m/8) - m) bits of the first byte in
+            * the string to zero.
+            */
+            uint8_t clear_bit_mask = (1 << (m % 8)) - 1;
+            *data[0] &= clear_bit_mask;
+        }
+
+        /* 3. Convert the string to integer k by decoding it as a
+        *    big-endian byte string.
+        */
+        MBEDTLS_MPI_CHK(mbedtls_mpi_read_binary( &k, *data, m_bytes));
+
+        /* 4. If k > N - 2, discard the result and return to step 1.
+        *    Result of comparison is returned. When it indicates error
+        *    then this fuction is called again.
+        */
+        MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &diff_N_2, &ecp_group.N, 2) );
+        MBEDTLS_MPI_CHK( mbedtls_mpi_grow( &k, diff_N_2.n ) );
+        MBEDTLS_MPI_CHK( mbedtls_mpi_lt_mpi_ct( &diff_N_2, &k, &key_out_of_range ) );
     }
 
-    /* 3. Convert the string to integer k by decoding it as a
-     *    big-endian byte string.
-     */
-    MBEDTLS_MPI_CHK(mbedtls_mpi_read_binary( &k, *data, m_bytes));
-
-    /* 4. If k > N - 2, discard the result and return to step 1.
-     *    Result of comparison is returned. When it indicates error
-     *    then this fuction is called again.
-     */
-    MBEDTLS_MPI_CHK( mbedtls_mpi_sub_int( &diff_N_2, &N, 2) );
-    MBEDTLS_MPI_CHK( mbedtls_mpi_grow( &k, diff_N_2.n ) );
-    MBEDTLS_MPI_CHK( mbedtls_mpi_lt_mpi_ct( &diff_N_2, &k, key_out_of_range ) );
-
     /* 5. Output k + 1 as the private key. */
     MBEDTLS_MPI_CHK( mbedtls_mpi_add_int( &k, &k, 1));
     MBEDTLS_MPI_CHK( mbedtls_mpi_write_binary( &k, *data, m_bytes) );
@@ -4943,7 +4947,6 @@
         *data = NULL;
     }
     mbedtls_mpi_free( &k );
-    mbedtls_mpi_free( &N );
     mbedtls_mpi_free( &diff_N_2 );
     return( status );
 }
@@ -4961,22 +4964,17 @@
 
 #if defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_KEY_PAIR) || \
     defined(MBEDTLS_PSA_BUILTIN_KEY_TYPE_ECC_PUBLIC_KEY) || \
-    defined(MBEDTLS_PSA_BUILTIN_ALG_ECDSA) || \
-    defined(MBEDTLS_PSA_BUILTIN_ALG_DETERMINISTIC_ECDSA) || \
-    defined(MBEDTLS_PSA_BUILTIN_ALG_ECDH)
+    defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_KEY_PAIR) || \
+    defined(MBEDTLS_PSA_ACCEL_KEY_TYPE_ECC_PUBLIC_KEY)
     if ( PSA_KEY_TYPE_IS_ECC( slot->attr.type ) )
     {
         psa_ecc_family_t curve = PSA_KEY_TYPE_ECC_GET_FAMILY( slot->attr.type );
-        if ( curve != PSA_ECC_FAMILY_MONTGOMERY )
+        if ( PSA_ECC_FAMILY_IS_WEIERSTRASS( curve ) )
         {
             /* Weierstrass elliptic curve */
-            unsigned key_out_of_range = 0;
-            do
-            {
-                status = psa_generate_derived_ecc_key_weierstrass_helper(slot, bits, operation, &data, &key_out_of_range);
-                if( status != PSA_SUCCESS )
-                    goto exit;
-            } while ( key_out_of_range );
+            status = psa_generate_derived_ecc_key_weierstrass_helper(slot, bits, operation, &data);
+            if( status != PSA_SUCCESS )
+                goto exit;
         }
         else
         {
@@ -5016,7 +5014,7 @@
                     data[55] |= 128;
                     break;
                 default:
-                    /* already handled */
+                    /* should never happen */
                     break;
             }
         }
