1 /* 2 * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved. 3 * SPDX-License-Identifier: BSD-3-Clause 4 */ 5 6 #ifndef TS_CRYPTO_KEY_DERIVATION_H 7 #define TS_CRYPTO_KEY_DERIVATION_H 8 9 #include <stdint.h> 10 #include "key_attributes.h" 11 12 /** 13 * Protocol definitions for key derivation operations 14 * using the packed-c serialization. 15 */ 16 17 18 /**************************************** 19 * key_derivation_setup operation definition 20 */ 21 22 /* Mandatory fixed sized input parameters */ 23 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_setup_in 24 { 25 uint32_t alg; 26 }; 27 28 /* Mandatory fixed sized output parameters */ 29 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_setup_out 30 { 31 uint32_t op_handle; 32 }; 33 34 /**************************************** 35 * key_derivation_get_capacity operation definition 36 */ 37 38 /* Mandatory fixed sized input parameters */ 39 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_get_capacity_in 40 { 41 uint32_t op_handle; 42 }; 43 44 /* Mandatory fixed sized output parameters */ 45 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_get_capacity_out 46 { 47 uint32_t capacity; 48 }; 49 50 /**************************************** 51 * key_derivation_set_capacity operation definition 52 */ 53 54 /* Mandatory fixed sized input parameters */ 55 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_set_capacity_in 56 { 57 uint32_t op_handle; 58 uint32_t capacity; 59 }; 60 61 /**************************************** 62 * key_derivation_input_bytes operation definition 63 */ 64 65 /* Mandatory fixed sized input parameters */ 66 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_input_bytes_in 67 { 68 uint32_t op_handle; 69 uint32_t step; 70 }; 71 72 /* Mandatory variable length input parameter tags */ 73 enum 74 { 75 TS_CRYPTO_KEY_DERIVATION_INPUT_BYTES_IN_TAG_DATA = 1 76 }; 77 78 /**************************************** 79 * key_derivation_input_key operation definition 80 */ 81 82 /* Mandatory fixed sized input parameters */ 83 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_input_key_in 84 { 85 uint32_t op_handle; 86 uint32_t step; 87 uint32_t key_id; 88 }; 89 90 /**************************************** 91 * key_derivation_output_bytes operation definition 92 */ 93 94 /* Mandatory fixed sized input parameters */ 95 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_output_bytes_in 96 { 97 uint32_t op_handle; 98 uint32_t output_len; 99 }; 100 101 /* Mandatory variable length output parameter tags */ 102 enum 103 { 104 TS_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES_OUT_TAG_DATA = 1 105 }; 106 107 /**************************************** 108 * key_derivation_output_key operation definition 109 */ 110 111 /* Mandatory fixed sized input parameters */ 112 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_output_key_in 113 { 114 uint32_t op_handle; 115 struct ts_crypto_key_attributes attributes; 116 }; 117 118 /* Mandatory fixed sized output parameters */ 119 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_output_key_out 120 { 121 uint32_t key_id; 122 }; 123 124 /**************************************** 125 * key_derivation_abort operation definition 126 */ 127 128 /* Mandatory fixed sized input parameters */ 129 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_abort_in 130 { 131 uint32_t op_handle; 132 }; 133 134 /**************************************** 135 * key_derivation_key_agreement operation definition 136 */ 137 138 /* Mandatory fixed sized input parameters */ 139 struct __attribute__ ((__packed__)) ts_crypto_key_derivation_key_agreement_in 140 { 141 uint32_t op_handle; 142 uint32_t step; 143 uint32_t private_key_id; 144 }; 145 146 /* Mandatory variable length input parameter tags */ 147 enum 148 { 149 TS_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT_IN_TAG_PEER_KEY = 1 150 }; 151 152 /**************************************** 153 * raw_key_agreement operation definition 154 */ 155 156 /* Mandatory fixed sized input parameters */ 157 struct __attribute__ ((__packed__)) ts_crypto_raw_key_agreement_in 158 { 159 uint32_t alg; 160 uint32_t private_key_id; 161 }; 162 163 /* Mandatory variable length input parameter tags */ 164 enum 165 { 166 TS_CRYPTO_RAW_KEY_AGREEMENT_IN_TAG_PEER_KEY = 1 167 }; 168 169 /* Mandatory variable length output parameter tags */ 170 enum 171 { 172 TS_CRYPTO_RAW_KEY_AGREEMENT_OUT_TAG_OUTPUT = 1 173 }; 174 175 #endif /* TS_CRYPTO_KEY_DERIVATION_H */ 176