1/* SPDX-License-Identifier: BSD-3-Clause */ 2/* Copyright(c) 2007-2022 Intel Corporation */ 3 4/** 5 ***************************************************************************** 6 * @file lac_sym_qat_key.c Interfaces for populating the symmetric qat key 7 * structures 8 * 9 * @ingroup LacSymQatKey 10 * 11 *****************************************************************************/ 12 13#include "cpa.h" 14#include "cpa_cy_key.h" 15#include "lac_mem.h" 16#include "icp_qat_fw_la.h" 17#include "icp_accel_devices.h" 18#include "icp_adf_debug.h" 19#include "lac_list.h" 20#include "lac_sal_types.h" 21#include "lac_sym_qat_key.h" 22#include "lac_sym_hash_defs.h" 23 24void 25LacSymQat_KeySslRequestPopulate(icp_qat_la_bulk_req_hdr_t *pKeyGenReqHdr, 26 icp_qat_fw_la_key_gen_common_t *pKeyGenReqMid, 27 Cpa32U generatedKeyLenInBytes, 28 Cpa32U labelLenInBytes, 29 Cpa32U secretLenInBytes, 30 Cpa32U iterations) 31{ 32 /* Rounded to nearest 8 byte boundary */ 33 Cpa8U outLenRounded = 0; 34 outLenRounded = LAC_ALIGN_POW2_ROUNDUP(generatedKeyLenInBytes, 35 LAC_QUAD_WORD_IN_BYTES); 36 37 pKeyGenReqMid->u.secret_lgth_ssl = secretLenInBytes; 38 pKeyGenReqMid->u1.s1.output_lgth_ssl = outLenRounded; 39 pKeyGenReqMid->u1.s1.label_lgth_ssl = labelLenInBytes; 40 pKeyGenReqMid->u2.iter_count = iterations; 41 pKeyGenReqMid->u3.resrvd2 = 0; 42 pKeyGenReqMid->resrvd3 = 0; 43 44 /* Set up the common LA flags */ 45 pKeyGenReqHdr->comn_hdr.service_cmd_id = 46 ICP_QAT_FW_LA_CMD_SSL3_KEY_DERIVE; 47 pKeyGenReqHdr->comn_hdr.resrvd1 = 0; 48} 49 50void 51LacSymQat_KeyTlsRequestPopulate( 52 icp_qat_fw_la_key_gen_common_t *pKeyGenReqParams, 53 Cpa32U generatedKeyLenInBytes, 54 Cpa32U labelInfo, /* Generic name, can be num of labels or label length */ 55 Cpa32U secretLenInBytes, 56 Cpa8U seedLenInBytes, 57 icp_qat_fw_la_cmd_id_t cmdId) 58{ 59 pKeyGenReqParams->u1.s3.output_lgth_tls = 60 LAC_ALIGN_POW2_ROUNDUP(generatedKeyLenInBytes, 61 LAC_QUAD_WORD_IN_BYTES); 62 63 /* For TLS u param of auth_req_params is set to secretLen */ 64 pKeyGenReqParams->u.secret_lgth_tls = secretLenInBytes; 65 66 switch (cmdId) { 67 case ICP_QAT_FW_LA_CMD_HKDF_EXTRACT: 68 pKeyGenReqParams->u2.hkdf_ikm_length = secretLenInBytes; 69 pKeyGenReqParams->u3.resrvd2 = 0; 70 break; 71 case ICP_QAT_FW_LA_CMD_HKDF_EXPAND: 72 pKeyGenReqParams->u1.hkdf.info_length = labelInfo; 73 break; 74 case ICP_QAT_FW_LA_CMD_HKDF_EXTRACT_AND_EXPAND: 75 pKeyGenReqParams->u2.hkdf_ikm_length = secretLenInBytes; 76 pKeyGenReqParams->u1.hkdf.info_length = labelInfo; 77 break; 78 case ICP_QAT_FW_LA_CMD_HKDF_EXPAND_LABEL: 79 /* Num of Labels */ 80 pKeyGenReqParams->u1.hkdf_label.num_labels = labelInfo; 81 pKeyGenReqParams->u3.hkdf_num_sublabels = 4; /* 4 subLabels */ 82 break; 83 case ICP_QAT_FW_LA_CMD_HKDF_EXTRACT_AND_EXPAND_LABEL: 84 pKeyGenReqParams->u2.hkdf_ikm_length = secretLenInBytes; 85 /* Num of Labels */ 86 pKeyGenReqParams->u1.hkdf_label.num_labels = labelInfo; 87 pKeyGenReqParams->u3.hkdf_num_sublabels = 4; /* 4 subLabels */ 88 break; 89 default: 90 pKeyGenReqParams->u1.s3.label_lgth_tls = labelInfo; 91 pKeyGenReqParams->u2.tls_seed_length = seedLenInBytes; 92 pKeyGenReqParams->u3.resrvd2 = 0; 93 break; 94 } 95 pKeyGenReqParams->resrvd3 = 0; 96} 97 98void 99LacSymQat_KeyMgfRequestPopulate(icp_qat_la_bulk_req_hdr_t *pKeyGenReqHdr, 100 icp_qat_fw_la_key_gen_common_t *pKeyGenReqMid, 101 Cpa8U seedLenInBytes, 102 Cpa16U maskLenInBytes, 103 Cpa8U hashLenInBytes) 104{ 105 pKeyGenReqHdr->comn_hdr.service_cmd_id = ICP_QAT_FW_LA_CMD_MGF1; 106 pKeyGenReqMid->u.mask_length = 107 LAC_ALIGN_POW2_ROUNDUP(maskLenInBytes, LAC_QUAD_WORD_IN_BYTES); 108 109 pKeyGenReqMid->u1.s2.hash_length = hashLenInBytes; 110 pKeyGenReqMid->u1.s2.seed_length = seedLenInBytes; 111} 112 113void 114LacSymQat_KeySslKeyMaterialInputPopulate( 115 sal_service_t *pService, 116 icp_qat_fw_la_ssl_key_material_input_t *pSslKeyMaterialInput, 117 void *pSeed, 118 Cpa64U labelPhysAddr, 119 void *pSecret) 120{ 121 LAC_MEM_SHARED_WRITE_VIRT_TO_PHYS_PTR_EXTERNAL( 122 (*pService), pSslKeyMaterialInput->seed_addr, pSeed); 123 124 pSslKeyMaterialInput->label_addr = labelPhysAddr; 125 126 LAC_MEM_SHARED_WRITE_VIRT_TO_PHYS_PTR_EXTERNAL( 127 (*pService), pSslKeyMaterialInput->secret_addr, pSecret); 128} 129 130void 131LacSymQat_KeyTlsKeyMaterialInputPopulate( 132 sal_service_t *pService, 133 icp_qat_fw_la_tls_key_material_input_t *pTlsKeyMaterialInput, 134 void *pSeed, 135 Cpa64U labelPhysAddr) 136{ 137 LAC_MEM_SHARED_WRITE_VIRT_TO_PHYS_PTR_EXTERNAL( 138 (*pService), pTlsKeyMaterialInput->seed_addr, pSeed); 139 140 pTlsKeyMaterialInput->label_addr = labelPhysAddr; 141} 142 143void 144LacSymQat_KeyTlsHKDFKeyMaterialInputPopulate( 145 sal_service_t *pService, 146 icp_qat_fw_la_hkdf_key_material_input_t *pTlsKeyMaterialInput, 147 CpaCyKeyGenHKDFOpData *pKeyGenTlsOpData, 148 Cpa64U subLabelsPhysAddr, 149 icp_qat_fw_la_cmd_id_t cmdId) 150{ 151 switch (cmdId) { 152 case ICP_QAT_FW_LA_CMD_HKDF_EXTRACT: 153 LAC_MEM_SHARED_WRITE_VIRT_TO_PHYS_PTR_EXTERNAL( 154 (*pService), 155 pTlsKeyMaterialInput->ikm_addr, 156 pKeyGenTlsOpData->secret); 157 break; 158 case ICP_QAT_FW_LA_CMD_HKDF_EXPAND: 159 LAC_MEM_SHARED_WRITE_VIRT_TO_PHYS_PTR_EXTERNAL( 160 (*pService), 161 pTlsKeyMaterialInput->labels_addr, 162 pKeyGenTlsOpData->info); 163 break; 164 case ICP_QAT_FW_LA_CMD_HKDF_EXTRACT_AND_EXPAND: 165 LAC_MEM_SHARED_WRITE_VIRT_TO_PHYS_PTR_EXTERNAL( 166 (*pService), 167 pTlsKeyMaterialInput->ikm_addr, 168 pKeyGenTlsOpData->secret); 169 pTlsKeyMaterialInput->labels_addr = 170 pTlsKeyMaterialInput->ikm_addr + 171 ((uint64_t)&pKeyGenTlsOpData->info - 172 (uint64_t)&pKeyGenTlsOpData->secret); 173 break; 174 case ICP_QAT_FW_LA_CMD_HKDF_EXPAND_LABEL: 175 pTlsKeyMaterialInput->sublabels_addr = subLabelsPhysAddr; 176 LAC_MEM_SHARED_WRITE_VIRT_TO_PHYS_PTR_EXTERNAL( 177 (*pService), 178 pTlsKeyMaterialInput->labels_addr, 179 pKeyGenTlsOpData->label); 180 break; 181 case ICP_QAT_FW_LA_CMD_HKDF_EXTRACT_AND_EXPAND_LABEL: 182 pTlsKeyMaterialInput->sublabels_addr = subLabelsPhysAddr; 183 LAC_MEM_SHARED_WRITE_VIRT_TO_PHYS_PTR_EXTERNAL( 184 (*pService), 185 pTlsKeyMaterialInput->ikm_addr, 186 pKeyGenTlsOpData->secret); 187 pTlsKeyMaterialInput->labels_addr = 188 pTlsKeyMaterialInput->ikm_addr + 189 ((uint64_t)&pKeyGenTlsOpData->label - 190 (uint64_t)&pKeyGenTlsOpData->secret); 191 break; 192 default: 193 break; 194 } 195} 196