1 /* SPDX-License-Identifier: GPL-2.0 */ 2 /* Copyright (c) 2019 HiSilicon Limited. */ 3 4 #ifndef __HISI_SEC_V2_CRYPTO_H 5 #define __HISI_SEC_V2_CRYPTO_H 6 7 #define SEC_AIV_SIZE 12 8 #define SEC_IV_SIZE 24 9 #define SEC_MAX_KEY_SIZE 64 10 #define SEC_MAX_AKEY_SIZE 128 11 #define SEC_COMM_SCENE 0 12 #define SEC_MIN_BLOCK_SZ 1 13 14 enum sec_calg { 15 SEC_CALG_3DES = 0x1, 16 SEC_CALG_AES = 0x2, 17 SEC_CALG_SM4 = 0x3, 18 }; 19 20 enum sec_hash_alg { 21 SEC_A_HMAC_SHA1 = 0x10, 22 SEC_A_HMAC_SHA256 = 0x11, 23 SEC_A_HMAC_SHA512 = 0x15, 24 }; 25 26 enum sec_mac_len { 27 SEC_HMAC_CCM_MAC = 16, 28 SEC_HMAC_GCM_MAC = 16, 29 SEC_SM3_MAC = 32, 30 SEC_HMAC_SM3_MAC = 32, 31 SEC_HMAC_MD5_MAC = 16, 32 SEC_HMAC_SHA1_MAC = 20, 33 SEC_HMAC_SHA256_MAC = 32, 34 SEC_HMAC_SHA512_MAC = 64, 35 }; 36 37 enum sec_cmode { 38 SEC_CMODE_ECB = 0x0, 39 SEC_CMODE_CBC = 0x1, 40 SEC_CMODE_CFB = 0x2, 41 SEC_CMODE_OFB = 0x3, 42 SEC_CMODE_CTR = 0x4, 43 SEC_CMODE_CCM = 0x5, 44 SEC_CMODE_GCM = 0x6, 45 SEC_CMODE_XTS = 0x7, 46 }; 47 48 enum sec_ckey_type { 49 SEC_CKEY_128BIT = 0x0, 50 SEC_CKEY_192BIT = 0x1, 51 SEC_CKEY_256BIT = 0x2, 52 SEC_CKEY_3DES_3KEY = 0x1, 53 SEC_CKEY_3DES_2KEY = 0x3, 54 }; 55 56 enum sec_bd_type { 57 SEC_BD_TYPE1 = 0x1, 58 SEC_BD_TYPE2 = 0x2, 59 SEC_BD_TYPE3 = 0x3, 60 }; 61 62 enum sec_auth { 63 SEC_NO_AUTH = 0x0, 64 SEC_AUTH_TYPE1 = 0x1, 65 SEC_AUTH_TYPE2 = 0x2, 66 }; 67 68 enum sec_cipher_dir { 69 SEC_CIPHER_ENC = 0x1, 70 SEC_CIPHER_DEC = 0x2, 71 }; 72 73 enum sec_addr_type { 74 SEC_PBUF = 0x0, 75 SEC_SGL = 0x1, 76 SEC_PRP = 0x2, 77 }; 78 79 struct bd_status { 80 u64 tag; 81 u8 done; 82 u8 err_type; 83 u16 flag; 84 u16 icv; 85 }; 86 87 enum { 88 AUTHPAD_PAD, 89 AUTHPAD_NOPAD, 90 }; 91 92 enum { 93 AIGEN_GEN, 94 AIGEN_NOGEN, 95 }; 96 97 struct sec_sqe_type2 { 98 /* 99 * mac_len: 0~4 bits 100 * a_key_len: 5~10 bits 101 * a_alg: 11~16 bits 102 */ 103 __le32 mac_key_alg; 104 105 /* 106 * c_icv_len: 0~5 bits 107 * c_width: 6~8 bits 108 * c_key_len: 9~11 bits 109 * c_mode: 12~15 bits 110 */ 111 __le16 icvw_kmode; 112 113 /* c_alg: 0~3 bits */ 114 __u8 c_alg; 115 __u8 rsvd4; 116 117 /* 118 * a_len: 0~23 bits 119 * iv_offset_l: 24~31 bits 120 */ 121 __le32 alen_ivllen; 122 123 /* 124 * c_len: 0~23 bits 125 * iv_offset_h: 24~31 bits 126 */ 127 __le32 clen_ivhlen; 128 129 __le16 auth_src_offset; 130 __le16 cipher_src_offset; 131 __le16 cs_ip_header_offset; 132 __le16 cs_udp_header_offset; 133 __le16 pass_word_len; 134 __le16 dk_len; 135 __u8 salt3; 136 __u8 salt2; 137 __u8 salt1; 138 __u8 salt0; 139 140 __le16 tag; 141 __le16 rsvd5; 142 143 /* 144 * c_pad_type: 0~3 bits 145 * c_pad_len: 4~11 bits 146 * c_pad_data_type: 12~15 bits 147 */ 148 __le16 cph_pad; 149 150 /* c_pad_len_field: 0~1 bits */ 151 __le16 c_pad_len_field; 152 153 __le64 long_a_data_len; 154 __le64 a_ivin_addr; 155 __le64 a_key_addr; 156 __le64 mac_addr; 157 __le64 c_ivin_addr; 158 __le64 c_key_addr; 159 160 __le64 data_src_addr; 161 __le64 data_dst_addr; 162 163 /* 164 * done: 0 bit 165 * icv: 1~3 bits 166 * csc: 4~6 bits 167 * flag: 7-10 bits 168 * dif_check: 11~13 bits 169 */ 170 __le16 done_flag; 171 172 __u8 error_type; 173 __u8 warning_type; 174 __u8 mac_i3; 175 __u8 mac_i2; 176 __u8 mac_i1; 177 __u8 mac_i0; 178 __le16 check_sum_i; 179 __u8 tls_pad_len_i; 180 __u8 rsvd12; 181 __le32 counter; 182 }; 183 184 struct sec_sqe { 185 /* 186 * type: 0~3 bits 187 * cipher: 4~5 bits 188 * auth: 6~7 bit s 189 */ 190 __u8 type_cipher_auth; 191 192 /* 193 * seq: 0 bit 194 * de: 1~2 bits 195 * scene: 3~6 bits 196 * src_addr_type: ~7 bit, with sdm_addr_type 0-1 bits 197 */ 198 __u8 sds_sa_type; 199 200 /* 201 * src_addr_type: 0~1 bits, not used now, 202 * if support PRP, set this field, or set zero. 203 * dst_addr_type: 2~4 bits 204 * mac_addr_type: 5~7 bits 205 */ 206 __u8 sdm_addr_type; 207 __u8 rsvd0; 208 209 /* 210 * nonce_len(type2): 0~3 bits 211 * huk(type2): 4 bit 212 * key_s(type2): 5 bit 213 * ci_gen: 6~7 bits 214 */ 215 __u8 huk_key_ci; 216 217 /* 218 * ai_gen: 0~1 bits 219 * a_pad(type2): 2~3 bits 220 * c_s(type2): 4~5 bits 221 */ 222 __u8 ai_apd_cs; 223 224 /* 225 * rhf(type2): 0 bit 226 * c_key_type: 1~2 bits 227 * a_key_type: 3~4 bits 228 * write_frame_len(type2): 5~7 bits 229 */ 230 __u8 rca_key_frm; 231 232 /* 233 * cal_iv_addr_en(type2): 0 bit 234 * tls_up(type2): 1 bit 235 * inveld: 7 bit 236 */ 237 __u8 iv_tls_ld; 238 239 /* Just using type2 BD now */ 240 struct sec_sqe_type2 type2; 241 }; 242 243 struct bd3_auth_ivin { 244 __le64 a_ivin_addr; 245 __le32 rsvd0; 246 __le32 rsvd1; 247 } __packed __aligned(4); 248 249 struct bd3_skip_data { 250 __le32 rsvd0; 251 252 /* 253 * gran_num: 0~15 bits 254 * reserved: 16~31 bits 255 */ 256 __le32 gran_num; 257 258 /* 259 * src_skip_data_len: 0~24 bits 260 * reserved: 25~31 bits 261 */ 262 __le32 src_skip_data_len; 263 264 /* 265 * dst_skip_data_len: 0~24 bits 266 * reserved: 25~31 bits 267 */ 268 __le32 dst_skip_data_len; 269 }; 270 271 struct bd3_stream_scene { 272 __le64 c_ivin_addr; 273 __le64 long_a_data_len; 274 275 /* 276 * auth_pad: 0~1 bits 277 * stream_protocol: 2~4 bits 278 * reserved: 5~7 bits 279 */ 280 __u8 stream_auth_pad; 281 __u8 plaintext_type; 282 __le16 pad_len_1p3; 283 } __packed __aligned(4); 284 285 struct bd3_no_scene { 286 __le64 c_ivin_addr; 287 __le32 rsvd0; 288 __le32 rsvd1; 289 __le32 rsvd2; 290 } __packed __aligned(4); 291 292 struct bd3_check_sum { 293 __u8 rsvd0; 294 __u8 hac_sva_status; 295 __le16 check_sum_i; 296 }; 297 298 struct bd3_tls_type_back { 299 __u8 tls_1p3_type_back; 300 __u8 hac_sva_status; 301 __le16 pad_len_1p3_back; 302 }; 303 304 struct sec_sqe3 { 305 /* 306 * type: 0~3 bit 307 * bd_invalid: 4 bit 308 * scene: 5~8 bit 309 * de: 9~10 bit 310 * src_addr_type: 11~13 bit 311 * dst_addr_type: 14~16 bit 312 * mac_addr_type: 17~19 bit 313 * reserved: 20~31 bits 314 */ 315 __le32 bd_param; 316 317 /* 318 * cipher: 0~1 bits 319 * ci_gen: 2~3 bit 320 * c_icv_len: 4~9 bit 321 * c_width: 10~12 bits 322 * c_key_len: 13~15 bits 323 */ 324 __le16 c_icv_key; 325 326 /* 327 * c_mode : 0~3 bits 328 * c_alg : 4~7 bits 329 */ 330 __u8 c_mode_alg; 331 332 /* 333 * nonce_len : 0~3 bits 334 * huk : 4 bits 335 * cal_iv_addr_en : 5 bits 336 * seq : 6 bits 337 * reserved : 7 bits 338 */ 339 __u8 huk_iv_seq; 340 341 __le64 tag; 342 __le64 data_src_addr; 343 __le64 a_key_addr; 344 union { 345 struct bd3_auth_ivin auth_ivin; 346 struct bd3_skip_data skip_data; 347 }; 348 349 __le64 c_key_addr; 350 351 /* 352 * auth: 0~1 bits 353 * ai_gen: 2~3 bits 354 * mac_len: 4~8 bits 355 * akey_len: 9~14 bits 356 * a_alg: 15~20 bits 357 * key_sel: 21~24 bits 358 * ctr_count_mode/sm4_xts: 25~26 bits 359 * sva_prefetch: 27 bits 360 * key_wrap_num: 28~30 bits 361 * update_key: 31 bits 362 */ 363 __le32 auth_mac_key; 364 __le32 salt; 365 __le16 auth_src_offset; 366 __le16 cipher_src_offset; 367 368 /* 369 * auth_len: 0~23 bit 370 * auth_key_offset: 24~31 bits 371 */ 372 __le32 a_len_key; 373 374 /* 375 * cipher_len: 0~23 bit 376 * auth_ivin_offset: 24~31 bits 377 */ 378 __le32 c_len_ivin; 379 __le64 data_dst_addr; 380 __le64 mac_addr; 381 union { 382 struct bd3_stream_scene stream_scene; 383 struct bd3_no_scene no_scene; 384 }; 385 386 /* 387 * done: 0 bit 388 * icv: 1~3 bit 389 * csc: 4~6 bit 390 * flag: 7~10 bit 391 * reserved: 11~15 bit 392 */ 393 __le16 done_flag; 394 __u8 error_type; 395 __u8 warning_type; 396 union { 397 __le32 mac_i; 398 __le32 kek_key_addr_l; 399 }; 400 union { 401 __le32 kek_key_addr_h; 402 struct bd3_check_sum check_sum; 403 struct bd3_tls_type_back tls_type_back; 404 }; 405 __le32 counter; 406 } __packed __aligned(4); 407 408 int sec_register_to_crypto(struct hisi_qm *qm); 409 void sec_unregister_from_crypto(struct hisi_qm *qm); 410 #endif 411