diff --git a/library/psa_crypto.c b/library/psa_crypto.c
index d84d101..4df3dc5 100644
--- a/library/psa_crypto.c
+++ b/library/psa_crypto.c
@@ -6023,16 +6023,17 @@
     return status;
 }
 
-static const psa_key_generation_method_t default_method = PSA_KEY_GENERATION_METHOD_INIT;
+static const psa_key_production_parameters_t default_production_parameters =
+    PSA_KEY_PRODUCTION_PARAMETERS_INIT;
 
-int psa_key_generation_method_is_default(
-    const psa_key_generation_method_t *method,
-    size_t method_data_length)
+int psa_key_production_parameters_are_default(
+    const psa_key_production_parameters_t *params,
+    size_t params_data_length)
 {
-    if (method->flags != 0) {
+    if (params->flags != 0) {
         return 0;
     }
-    if (method_data_length != 0) {
+    if (params_data_length != 0) {
         return 0;
     }
     return 1;
@@ -6041,8 +6042,8 @@
 psa_status_t psa_key_derivation_output_key_ext(
     const psa_key_attributes_t *attributes,
     psa_key_derivation_operation_t *operation,
-    const psa_key_generation_method_t *method,
-    size_t method_data_length,
+    const psa_key_production_parameters_t *params,
+    size_t params_data_length,
     mbedtls_svc_key_id_t *key)
 {
     psa_status_t status;
@@ -6057,7 +6058,7 @@
         return PSA_ERROR_INVALID_ARGUMENT;
     }
 
-    if (!psa_key_generation_method_is_default(method, method_data_length)) {
+    if (!psa_key_production_parameters_are_default(params, params_data_length)) {
         return PSA_ERROR_INVALID_ARGUMENT;
     }
 
@@ -6098,7 +6099,7 @@
     mbedtls_svc_key_id_t *key)
 {
     return psa_key_derivation_output_key_ext(attributes, operation,
-                                             &default_method, 0,
+                                             &default_production_parameters, 0,
                                              key);
 }
 
@@ -7497,15 +7498,15 @@
 
 psa_status_t psa_generate_key_internal(
     const psa_key_attributes_t *attributes,
-    const psa_key_generation_method_t *method, size_t method_data_length,
+    const psa_key_production_parameters_t *params, size_t params_data_length,
     uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length)
 {
     psa_status_t status = PSA_ERROR_CORRUPTION_DETECTED;
     psa_key_type_t type = attributes->core.type;
 
     /* Only used for RSA */
-    (void) method;
-    (void) method_data_length;
+    (void) params;
+    (void) params_data_length;
 
     if ((attributes->domain_parameters == NULL) &&
         (attributes->domain_parameters_size != 0)) {
@@ -7532,9 +7533,9 @@
          * that mbedtls_psa_rsa_generate_key() gets e via a new
          * parameter instead. */
         psa_key_attributes_t override_attributes = *attributes;
-        if (method_data_length != 0) {
-            override_attributes.domain_parameters_size = method_data_length;
-            override_attributes.domain_parameters = (uint8_t *) &method->data;
+        if (params_data_length != 0) {
+            override_attributes.domain_parameters_size = params_data_length;
+            override_attributes.domain_parameters = (uint8_t *) &params->data;
         }
         return mbedtls_psa_rsa_generate_key(&override_attributes,
                                             key_buffer,
@@ -7569,8 +7570,8 @@
 }
 
 psa_status_t psa_generate_key_ext(const psa_key_attributes_t *attributes,
-                                  const psa_key_generation_method_t *method,
-                                  size_t method_data_length,
+                                  const psa_key_production_parameters_t *params,
+                                  size_t params_data_length,
                                   mbedtls_svc_key_id_t *key)
 {
     psa_status_t status;
@@ -7593,12 +7594,12 @@
 
 #if defined(PSA_WANT_KEY_TYPE_RSA_KEY_PAIR_GENERATE)
     if (attributes->core.type == PSA_KEY_TYPE_RSA_KEY_PAIR) {
-        if (method->flags != 0) {
+        if (params->flags != 0) {
             return PSA_ERROR_INVALID_ARGUMENT;
         }
     } else
 #endif
-    if (!psa_key_generation_method_is_default(method, method_data_length)) {
+    if (!psa_key_production_parameters_are_default(params, params_data_length)) {
         return PSA_ERROR_INVALID_ARGUMENT;
     }
 
@@ -7639,7 +7640,7 @@
     }
 
     status = psa_driver_wrapper_generate_key(attributes,
-                                             method, method_data_length,
+                                             params, params_data_length,
                                              slot->key.data, slot->key.bytes,
                                              &slot->key.bytes);
     if (status != PSA_SUCCESS) {
@@ -7661,7 +7662,7 @@
                               mbedtls_svc_key_id_t *key)
 {
     return psa_generate_key_ext(attributes,
-                                &default_method, 0,
+                                &default_production_parameters, 0,
                                 key);
 }
 
