/* * Copyright (c) 2021, Arm Limited and Contributors. All rights reserved. * SPDX-License-Identifier: BSD-3-Clause */ #ifndef TS_CRYPTO_KEY_DERIVATION_H #define TS_CRYPTO_KEY_DERIVATION_H #include #include "key_attributes.h" /** * Protocol definitions for key derivation operations * using the packed-c serialization. */ /**************************************** * key_derivation_setup operation definition */ /* Mandatory fixed sized input parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_setup_in { uint32_t alg; }; /* Mandatory fixed sized output parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_setup_out { uint32_t op_handle; }; /**************************************** * key_derivation_get_capacity operation definition */ /* Mandatory fixed sized input parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_get_capacity_in { uint32_t op_handle; }; /* Mandatory fixed sized output parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_get_capacity_out { uint32_t capacity; }; /**************************************** * key_derivation_set_capacity operation definition */ /* Mandatory fixed sized input parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_set_capacity_in { uint32_t op_handle; uint32_t capacity; }; /**************************************** * key_derivation_input_bytes operation definition */ /* Mandatory fixed sized input parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_input_bytes_in { uint32_t op_handle; uint32_t step; }; /* Mandatory variable length input parameter tags */ enum { TS_CRYPTO_KEY_DERIVATION_INPUT_BYTES_IN_TAG_DATA = 1 }; /**************************************** * key_derivation_input_key operation definition */ /* Mandatory fixed sized input parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_input_key_in { uint32_t op_handle; uint32_t step; uint32_t key_id; }; /**************************************** * key_derivation_output_bytes operation definition */ /* Mandatory fixed sized input parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_output_bytes_in { uint32_t op_handle; uint32_t output_len; }; /* Mandatory variable length output parameter tags */ enum { TS_CRYPTO_KEY_DERIVATION_OUTPUT_BYTES_OUT_TAG_DATA = 1 }; /**************************************** * key_derivation_output_key operation definition */ /* Mandatory fixed sized input parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_output_key_in { uint32_t op_handle; struct ts_crypto_key_attributes attributes; }; /* Mandatory fixed sized output parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_output_key_out { uint32_t key_id; }; /**************************************** * key_derivation_abort operation definition */ /* Mandatory fixed sized input parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_abort_in { uint32_t op_handle; }; /**************************************** * key_derivation_key_agreement operation definition */ /* Mandatory fixed sized input parameters */ struct __attribute__ ((__packed__)) ts_crypto_key_derivation_key_agreement_in { uint32_t op_handle; uint32_t step; uint32_t private_key_id; }; /* Mandatory variable length input parameter tags */ enum { TS_CRYPTO_KEY_DERIVATION_KEY_AGREEMENT_IN_TAG_PEER_KEY = 1 }; /**************************************** * raw_key_agreement operation definition */ /* Mandatory fixed sized input parameters */ struct __attribute__ ((__packed__)) ts_crypto_raw_key_agreement_in { uint32_t alg; uint32_t private_key_id; }; /* Mandatory variable length input parameter tags */ enum { TS_CRYPTO_RAW_KEY_AGREEMENT_IN_TAG_PEER_KEY = 1 }; /* Mandatory variable length output parameter tags */ enum { TS_CRYPTO_RAW_KEY_AGREEMENT_OUT_TAG_OUTPUT = 1 }; #endif /* TS_CRYPTO_KEY_DERIVATION_H */