1 /*
2  * Test driver for generating and verifying keys.
3  */
4 /*  Copyright The Mbed TLS Contributors
5  *  SPDX-License-Identifier: Apache-2.0
6  *
7  *  Licensed under the Apache License, Version 2.0 (the "License"); you may
8  *  not use this file except in compliance with the License.
9  *  You may obtain a copy of the License at
10  *
11  *  http://www.apache.org/licenses/LICENSE-2.0
12  *
13  *  Unless required by applicable law or agreed to in writing, software
14  *  distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
15  *  WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  *  See the License for the specific language governing permissions and
17  *  limitations under the License.
18  */
19 
20 #ifndef PSA_CRYPTO_TEST_DRIVERS_KEY_MANAGEMENT_H
21 #define PSA_CRYPTO_TEST_DRIVERS_KEY_MANAGEMENT_H
22 
23 #include "mbedtls/build_info.h"
24 
25 #if defined(PSA_CRYPTO_DRIVER_TEST)
26 #include <psa/crypto_driver_common.h>
27 
28 #define PSA_CRYPTO_TEST_DRIVER_BUILTIN_AES_KEY_SLOT     0
29 #define PSA_CRYPTO_TEST_DRIVER_BUILTIN_ECDSA_KEY_SLOT   1
30 
31 typedef struct {
32     /* If non-null, on success, copy this to the output. */
33     void *forced_output;
34     size_t forced_output_length;
35     /* If not PSA_SUCCESS, return this error code instead of processing the
36      * function call. */
37     psa_status_t forced_status;
38     /* Count the amount of times one of the key management driver functions
39      * is called. */
40     unsigned long hits;
41 } mbedtls_test_driver_key_management_hooks_t;
42 
43 #define MBEDTLS_TEST_DRIVER_KEY_MANAGEMENT_INIT { NULL, 0, PSA_SUCCESS, 0 }
44 static inline mbedtls_test_driver_key_management_hooks_t
mbedtls_test_driver_key_management_hooks_init(void)45     mbedtls_test_driver_key_management_hooks_init( void )
46 {
47     const mbedtls_test_driver_key_management_hooks_t
48         v = MBEDTLS_TEST_DRIVER_KEY_MANAGEMENT_INIT;
49     return( v );
50 }
51 
52 /*
53  * In order to convert the plain text keys to Opaque, the size of the key is
54  * padded up by PSA_CRYPTO_TEST_DRIVER_OPAQUE_PAD_PREFIX_SIZE in addition to
55  * xor mangling the key. The pad prefix needs to be accounted for while
56  * sizing for the key.
57  */
58 #define PSA_CRYPTO_TEST_DRIVER_OPAQUE_PAD_PREFIX           0xBEEFED00U
59 #define PSA_CRYPTO_TEST_DRIVER_OPAQUE_PAD_PREFIX_SIZE      sizeof( \
60                                   PSA_CRYPTO_TEST_DRIVER_OPAQUE_PAD_PREFIX )
61 
62 size_t mbedtls_test_opaque_size_function(
63     const psa_key_type_t key_type,
64     const size_t key_bits );
65 
66 extern mbedtls_test_driver_key_management_hooks_t
67     mbedtls_test_driver_key_management_hooks;
68 
69 psa_status_t mbedtls_test_transparent_generate_key(
70     const psa_key_attributes_t *attributes,
71     uint8_t *key, size_t key_size, size_t *key_length );
72 
73 psa_status_t mbedtls_test_opaque_generate_key(
74     const psa_key_attributes_t *attributes,
75     uint8_t *key, size_t key_size, size_t *key_length );
76 
77 psa_status_t mbedtls_test_opaque_export_key(
78     const psa_key_attributes_t *attributes,
79     const uint8_t *key, size_t key_length,
80     uint8_t *data, size_t data_size, size_t *data_length );
81 
82 psa_status_t mbedtls_test_transparent_export_public_key(
83     const psa_key_attributes_t *attributes,
84     const uint8_t *key, size_t key_length,
85     uint8_t *data, size_t data_size, size_t *data_length );
86 
87 psa_status_t mbedtls_test_opaque_export_public_key(
88     const psa_key_attributes_t *attributes,
89     const uint8_t *key, size_t key_length,
90     uint8_t *data, size_t data_size, size_t *data_length );
91 
92 psa_status_t mbedtls_test_transparent_import_key(
93     const psa_key_attributes_t *attributes,
94     const uint8_t *data,
95     size_t data_length,
96     uint8_t *key_buffer,
97     size_t key_buffer_size,
98     size_t *key_buffer_length,
99     size_t *bits);
100 
101 psa_status_t mbedtls_test_opaque_import_key(
102     const psa_key_attributes_t *attributes,
103     const uint8_t *data,
104     size_t data_length,
105     uint8_t *key_buffer,
106     size_t key_buffer_size,
107     size_t *key_buffer_length,
108     size_t *bits);
109 
110 psa_status_t mbedtls_test_opaque_get_builtin_key(
111     psa_drv_slot_number_t slot_number,
112     psa_key_attributes_t *attributes,
113     uint8_t *key_buffer, size_t key_buffer_size, size_t *key_buffer_length );
114 
115 psa_status_t mbedtls_test_opaque_copy_key(
116     psa_key_attributes_t *attributes,
117     const uint8_t *source_key,
118     size_t source_key_length,
119     uint8_t *target_key_buffer,
120     size_t target_key_buffer_size,
121     size_t *target_key_buffer_length);
122 
123 
124 #endif /* PSA_CRYPTO_DRIVER_TEST */
125 #endif /* PSA_CRYPTO_TEST_DRIVERS_KEY_MANAGEMENT_H */
126