1 /* 2 * Copyright (c) 2020 - 2024 Renesas Electronics Corporation and/or its affiliates 3 * 4 * SPDX-License-Identifier: BSD-3-Clause 5 */ 6 7 /*********************************************************************************************************************** 8 * File Name : hw_sce_ecc_private.h 9 * Description : SCE HW procedures for ECC algorithm 10 ***********************************************************************************************************************/ 11 12 #ifndef HW_SCE_ECC_PRIVATE_H 13 #define HW_SCE_ECC_PRIVATE_H 14 15 #include "bsp_api.h" 16 #include "hw_sce_common.h" 17 18 #define ECC_224_PRIVATE_KEY_LENGTH_BITS (224U) 19 #define ECC_224_PUBLIC_KEY_LENGTH_WORDS (7U) 20 21 /* ECC P-256 */ 22 #define ECC_256_DOMAIN_PARAMETER_WITH_ORDER_LENGTH_WORDS (32U) 23 #define ECC_256_DOMAIN_PARAMETER_WITHOUT_ORDER_LENGTH_WORDS (24U) 24 #define ECC_256_POINT_ON_CURVE_LENGTH_WORDS (16U) 25 #define ECC_256_GENERATOR_POINT_LENGTH_WORDS (16U) 26 #define ECC_256_PUBLIC_KEY_LENGTH_WORDS (16U) 27 #define ECC_256_PRIVATE_KEY_LENGTH_WORDS (8U) 28 #define ECC_256_PRIVATE_KEY_LENGTH_BITS (256U) 29 #define ECC_256_MESSAGE_DIGEST_LENGTH_WORDS (8U) 30 #define ECC_256_SIGNATURE_R_LENGTH_WORDS (8U) 31 #define ECC_256_SIGNATURE_S_LENGTH_WORDS (8U) 32 33 /* ECC P-384 */ 34 #define ECC_384_DOMAIN_PARAMETER_WITH_ORDER_LENGTH_WORDS (48U) 35 #define ECC_384_DOMAIN_PARAMETER_WITHOUT_ORDER_LENGTH_WORDS (36U) 36 #define ECC_384_POINT_ON_CURVE_LENGTH_WORDS (24U) 37 #define ECC_384_GENERATOR_POINT_LENGTH_WORDS (24U) 38 #define ECC_384_PUBLIC_KEY_LENGTH_WORDS (24U) 39 #define ECC_384_PRIVATE_KEY_LENGTH_WORDS (12U) 40 #define ECC_384_PRIVATE_KEY_LENGTH_BITS (384U) 41 #define ECC_384_MESSAGE_DIGEST_LENGTH_WORDS (12U) 42 #define ECC_384_SIGNATURE_R_LENGTH_WORDS (12U) 43 #define ECC_384_SIGNATURE_S_LENGTH_WORDS (12U) 44 45 /* ECC P-521 */ 46 #define ECC_521_PRIVATE_KEY_LENGTH_BITS (521U) 47 #define ECC_521_PRIVATE_KEY_LENGTH_WORDS (20U) 48 49 /* SCE based wrapped keys are at most 20/32 bytes larger than corresponding plain private keys */ 50 #define HW_SCE_ECC_WRAPPED_KEY_ADJUST(x) ((x) + ((HW_SCE_PRIVATE_KEY_WRAPPING_WORD_SIZE) * 4)) 51 52 /* Function pointer declarations */ 53 #if BSP_FEATURE_CRYPTO_HAS_SCE9 || BSP_FEATURE_CRYPTO_HAS_SCE7 || BSP_FEATURE_CRYPTO_HAS_RSIP7 54 #define ECC_PUBLIC_KEY_SIZE_BYTES(curve_size) (curve_size * 2 + 20U) 55 typedef fsp_err_t (* hw_sce_ecc_scalarmultiplication_t)(const uint32_t * InData_CurveType, const uint32_t * InData_Cmd, 56 const uint32_t * InData_K, const uint32_t * InData_P, 57 const uint32_t * Domain_Param, uint32_t * OutData_R); 58 #else 59 typedef fsp_err_t (* hw_sce_ecc_scalarmultiplication_t)(const uint32_t * InData_DomainParam, const uint32_t * InData_K, 60 const uint32_t * InData_P, uint32_t * OutData_R); 61 #endif 62 typedef fsp_err_t (* hw_sce_ecc_generatekey_t)(const uint32_t * InData_DomainParam, const uint32_t * InData_G, 63 uint32_t * OutData_PubKey, uint32_t * OutData_PrivKey); 64 65 typedef fsp_err_t (* hw_sce_ecc_generatesign_t)(const uint32_t * InData_CurveType, const uint32_t * InData_G, 66 const uint32_t * InData_PrivKey, const uint32_t * InData_MsgDgst, 67 uint32_t * OutData_R, uint32_t * OutData_S); 68 69 typedef fsp_err_t (* hw_sce_ecc_verifysign_t)(const uint32_t * InData_DomainParam, const uint32_t * InData_G, 70 const uint32_t * InData_PubKey, const uint32_t * InData_MsgDgst, 71 const uint32_t * InData_R, const uint32_t * InData_S); 72 73 /* ECC - 256 HW Procedure definitions */ 74 fsp_err_t HW_SCE_ECC_256ScalarMultiplication(const uint32_t * InData_DomainParam, 75 const uint32_t * InData_K, 76 const uint32_t * InData_P, 77 uint32_t * OutData_R); 78 79 fsp_err_t HW_SCE_ECC_256GenerateKey(const uint32_t * InData_DomainParam, 80 const uint32_t * InData_G, 81 uint32_t * OutData_PubKey, 82 uint32_t * OutData_PrivKey); 83 84 fsp_err_t HW_SCE_ECC_256GenerateSign(const uint32_t * InData_CurveType, 85 const uint32_t * InData_G, 86 const uint32_t * InData_PrivKey, 87 const uint32_t * InData_MsgDgst, 88 uint32_t * OutData_R, 89 uint32_t * OutData_S); 90 91 fsp_err_t HW_SCE_ECC_256VerifySign(const uint32_t * InData_DomainParam, 92 const uint32_t * InData_G, 93 const uint32_t * InData_PubKey, 94 const uint32_t * InData_MsgDgst, 95 const uint32_t * InData_R, 96 const uint32_t * InData_S); 97 98 /* ECC - 256 Wrapped key HW Procedure definitions */ 99 fsp_err_t HW_SCE_ECC_256HrkGenerateKey(const uint32_t * InData_DomainParam, 100 const uint32_t * InData_G, 101 uint32_t * OutData_KeyIndex, 102 uint32_t * OutData_PubKey); 103 104 fsp_err_t HW_SCE_ECC_256HrkGenerateSign(const uint32_t * InData_DomainParam, 105 const uint32_t * InData_G, 106 const uint32_t * InData_KeyIndex, 107 const uint32_t * InData_MsgDgst, 108 uint32_t * OutData_R, 109 uint32_t * OutData_S); 110 111 fsp_err_t HW_SCE_ECC_256HrkScalarMultiplication(const uint32_t * InData_DomainParam, 112 const uint32_t * InData_KeyIndex, 113 const uint32_t * InData_P, 114 uint32_t * OutData_R); 115 116 fsp_err_t HW_SCE_ECC_256WrappedScalarMultiplication(const uint32_t * InData_CurveType, 117 const uint32_t * InData_Cmd, 118 const uint32_t * InData_KeyIndex, 119 const uint32_t * InData_P, 120 const uint32_t * Domain_Param, 121 uint32_t * OutData_R); 122 123 /* ECC - 384 HW Procedure definitions */ 124 fsp_err_t HW_SCE_ECC_384ScalarMultiplication(const uint32_t * InData_DomainParam, 125 const uint32_t * InData_K, 126 const uint32_t * InData_P, 127 uint32_t * OutData_R); 128 129 fsp_err_t HW_SCE_ECC_384GenerateKey(const uint32_t * InData_DomainParam, 130 const uint32_t * InData_G, 131 uint32_t * OutData_PubKey, 132 uint32_t * OutData_PrivKey); 133 134 fsp_err_t HW_SCE_ECC_384GenerateSign(const uint32_t * InData_CurveType, 135 const uint32_t * InData_G, 136 const uint32_t * InData_PrivKey, 137 const uint32_t * InData_MsgDgst, 138 uint32_t * OutData_R, 139 uint32_t * OutData_S); 140 141 fsp_err_t HW_SCE_ECC_384VerifySign(const uint32_t * InData_DomainParam, 142 const uint32_t * InData_G, 143 const uint32_t * InData_PubKey, 144 const uint32_t * InData_MsgDgst, 145 const uint32_t * InData_R, 146 const uint32_t * InData_S); 147 148 /* ECC - 384 Wrapped key HW Procedure definitions */ 149 fsp_err_t HW_SCE_ECC_384HrkGenerateKey(const uint32_t * InData_DomainParam, 150 const uint32_t * InData_G, 151 uint32_t * OutData_KeyIndex, 152 uint32_t * OutData_PubKey); 153 154 fsp_err_t HW_SCE_ECC_384HrkGenerateSign(const uint32_t * InData_DomainParam, 155 const uint32_t * InData_G, 156 const uint32_t * InData_KeyIndex, 157 const uint32_t * InData_MsgDgst, 158 uint32_t * OutData_R, 159 uint32_t * OutData_S); 160 161 fsp_err_t HW_SCE_ECC_384HrkScalarMultiplication(const uint32_t * InData_DomainParam, 162 const uint32_t * InData_KeyIndex, 163 const uint32_t * InData_P, 164 uint32_t * OutData_R); 165 fsp_err_t HW_SCE_ECC_384WrappedScalarMultiplication(const uint32_t * InData_CurveType, 166 const uint32_t * InData_Cmd, 167 const uint32_t * InData_KeyIndex, 168 const uint32_t * InData_P, 169 const uint32_t * Domain_Param, 170 uint32_t * OutData_R); 171 #if BSP_FEATURE_CRYPTO_HAS_RSIP7 172 fsp_err_t HW_SCE_ECC_521GenerateSign(const uint32_t * InData_CurveType, 173 const uint32_t * InData_G, 174 const uint32_t * InData_PrivKey, 175 const uint32_t * InData_MsgDgst, 176 uint32_t * OutData_R, 177 uint32_t * OutData_S); 178 179 fsp_err_t HW_SCE_ECC_521VerifySign(const uint32_t * InData_DomainParam, 180 const uint32_t * InData_G, 181 const uint32_t * InData_PubKey, 182 const uint32_t * InData_MsgDgst, 183 const uint32_t * InData_R, 184 const uint32_t * InData_S); 185 186 fsp_err_t HW_SCE_ECC_521HrkGenerateSign(const uint32_t * InData_DomainParam, 187 const uint32_t * InData_G, 188 const uint32_t * InData_KeyIndex, 189 const uint32_t * InData_MsgDgst, 190 uint32_t * OutData_R, 191 uint32_t * OutData_S); 192 193 fsp_err_t HW_SCE_ECC_521WrappedScalarMultiplication(const uint32_t * InData_CurveType, 194 const uint32_t * InData_Cmd, 195 const uint32_t * InData_KeyIndex, 196 const uint32_t * InData_P, 197 const uint32_t * Domain_Param, 198 uint32_t * OutData_R); 199 #endif 200 201 /* ECC - 224 HW Procedure definitions */ 202 fsp_err_t HW_SCE_ECC_224GenerateSign(const uint32_t * InData_DomainParam, 203 const uint32_t * InData_G, 204 const uint32_t * InData_PrivKey, 205 const uint32_t * InData_MsgDgst, 206 uint32_t * OutData_R, 207 uint32_t * OutData_S); 208 209 fsp_err_t HW_SCE_ECC_224VerifySign(const uint32_t * InData_DomainParam, 210 const uint32_t * InData_G, 211 const uint32_t * InData_PubKey, 212 const uint32_t * InData_MsgDgst, 213 const uint32_t * InData_R, 214 const uint32_t * InData_S); 215 216 #endif /* HW_SCE_ECC_PRIVATE_H */ 217