@@ -264,8 +264,35 @@ static psa_status_t ram_export( psa_drv_se_context_t *context,
264
264
actual_size = PSA_BITS_TO_BYTES( ram_slots[slot_number].bits );
265
265
if( actual_size > data_size )
266
266
return( PSA_ERROR_BUFFER_TOO_SMALL );
267
- *p_data_length = actual_size;
268
- memcpy( p_data, ram_slots[slot_number].content, actual_size );
267
+ *data_length = actual_size;
268
+ memcpy( data, ram_slots[slot_number].content, actual_size );
269
+ return( PSA_SUCCESS );
270
+ }
271
+
272
+ static psa_status_t ram_export_public( psa_drv_se_context_t *context,
273
+ psa_key_slot_number_t slot_number,
274
+ uint8_t *data,
275
+ size_t data_size,
276
+ size_t *data_length )
277
+ {
278
+ psa_status_t status;
279
+ psa_key_handle_t handle;
280
+ psa_key_attributes_t attributes = PSA_KEY_ATTRIBUTES_INIT;
281
+
282
+ (void) context;
283
+ DRIVER_ASSERT_RETURN( slot_number < ARRAY_LENGTH( ram_slots ) );
284
+ DRIVER_ASSERT_RETURN(
285
+ PSA_KEY_TYPE_IS_KEY_PAIR( ram_slots[slot_number].type ) );
286
+
287
+ psa_set_key_type( &attributes, ram_slots[slot_number].type );
288
+ status = psa_import_key( &attributes,
289
+ ram_slots[slot_number].content,
290
+ PSA_BITS_TO_BYTES( ram_slots[slot_number].bits ),
291
+ &handle );
292
+ if( status != PSA_SUCCESS )
293
+ return( status );
294
+ status = psa_export_public_key( handle, data, data_size, data_length );
295
+ psa_destroy_key( handle );
269
296
return( PSA_SUCCESS );
270
297
}
271
298
0 commit comments