21 #include "hpm_soc_feature.h"
32 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
47 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
55 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
67 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
79 #if defined(SDP_HAS_SM3_SUPPORT) && (SDP_HAS_SM3_SUPPORT == 1)
87 #define HASH_BLOCK_SIZE (64U)
88 #define AES_BLOCK_SIZE (16U)
89 #define AES_128_KEY_SIZE (0x10U)
90 #define AES_256_KEY_SIZE (0x20U)
92 #define SM4_BLOCK_SIZE (AES_BLOCK_SIZE)
93 #define SM4_KEY_SIZE (AES_128_KEY_SIZE)
98 #define SDP_PKT_CTRL_DERSEMA_MASK (1U << 2)
99 #define SDP_PKT_CTRL_CHAIN_MASK (1U << 3)
100 #define SDP_PKT_CTRL_HASHINIT_MASK (1U << 4)
101 #define SDP_PKT_CTRL_HASHFINISH_MASK (1U << 5)
102 #define SDP_PKT_CTRL_CIPHIV_MASK (1U << 6)
107 typedef struct _sdp_packet_struct {
108 struct _sdp_packet_struct *next_cmd;
111 uint32_t RESERVED0: 1;
115 uint32_t HASHINIT: 1;
116 uint32_t HASHFINISH: 1;
118 uint32_t RESERVED1: 17;
126 uint32_t reserved[3];
145 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
161 uint32_t
internal[64];
222 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
233 sdp_sm4_ctx_t *sm4_ctx,
256 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
267 #define sdp_sm4_crypt_ecb sdp_aes_crypt_ecb
285 const uint8_t iv[16],
286 const uint8_t *input,
289 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
301 #define sdp_sm4_crypt_cbc sdp_aes_crypt_cbc
317 uint8_t *nonce_counter,
322 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
333 #define sdp_sm4_crypt_ctr sdp_aes_crypt_ctr
359 const uint8_t *input,
364 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
381 #define sdp_sm4_ccm_generate_encrypt sdp_aes_ccm_generate_encrypt
407 const uint8_t *input,
412 #if defined(SDP_HAS_SM4_SUPPORT) && (SDP_HAS_SM4_SUPPORT == 1)
428 #define sdp_sm4_ccm_decrypt_verify sdp_aes_ccm_decrypt_verify
uint32_t hpm_stat_t
Definition: hpm_common.h:119
#define MAKE_STATUS(group, code)
Definition: hpm_common.h:128
@ status_group_sdp
Definition: hpm_common.h:141
hpm_stat_t sdp_hash_finish(SDP_Type *base, sdp_hash_ctx_t *hash_ctx, uint8_t *digest)
Finish the HASH calculation and output the digest.
Definition: hpm_sdp_drv.c:855
hpm_stat_t sdp_hash_update(SDP_Type *base, sdp_hash_ctx_t *hash_ctx, const uint8_t *data, uint32_t length)
Compute the HASH digest.
Definition: hpm_sdp_drv.c:811
hpm_stat_t sdp_init(SDP_Type *base)
Initialize the SDP controller.
Definition: hpm_sdp_drv.c:133
hpm_stat_t sdp_aes_set_key(SDP_Type *base, sdp_aes_ctx_t *aes_ctx, const uint8_t *key, sdp_aes_key_bits_t key_bits, uint32_t key_idx)
Set the AES key for the SDP AES operation.
Definition: hpm_sdp_drv.c:155
hpm_stat_t sdp_aes_ccm_decrypt_verify(SDP_Type *base, sdp_aes_ctx_t *aes_ctx, uint32_t input_len, const uint8_t *iv, uint32_t iv_len, const uint8_t *aad, uint32_t aad_len, const uint8_t *input, uint8_t *output, const uint8_t *tag, uint32_t tag_len)
Perform the AES-CCM decrypt and verify See NIST Special Publication 800-38C for more details.
Definition: hpm_sdp_drv.c:652
hpm_stat_t sdp_deinit(SDP_Type *base)
De-initialize the SDP controller.
Definition: hpm_sdp_drv.c:145
hpm_stat_t sdp_aes_ccm_generate_encrypt(SDP_Type *base, sdp_aes_ctx_t *aes_ctx, uint32_t input_len, const uint8_t *iv, uint32_t iv_len, const uint8_t *aad, uint32_t aad_len, const uint8_t *input, uint8_t *output, uint8_t *tag, uint32_t tag_len)
Perform the AES-CCM generate and encrypt See NIST Special Publication 800-38C for more details.
Definition: hpm_sdp_drv.c:610
hpm_stat_t sdp_memcpy(SDP_Type *base, sdp_dma_ctx_t *sdp_ctx, void *dst, const void *src, uint32_t length)
Perform the DMA accelerated memcpy.
Definition: hpm_sdp_drv.c:902
sdp_crypto_key_bits_t sdp_sm4_key_bits_t
Definition: hpm_sdp_drv.h:39
hpm_stat_t sdp_memset(SDP_Type *base, sdp_dma_ctx_t *sdp_ctx, void *dst, uint8_t pattern, uint32_t length)
Perform the DMA accelerated memset.
Definition: hpm_sdp_drv.c:944
struct _sdp_packet_struct sdp_pkt_struct_t
SDP packet data structure.
sdp_crypto_op_t
Crypto operation option.
Definition: hpm_sdp_drv.h:44
sdp_crypto_ctx_t sdp_aes_ctx_t
Definition: hpm_sdp_drv.h:143
sdp_crypto_alg_t
SDP Crypto algorithms.
Definition: hpm_sdp_drv.h:65
sdp_crypto_key_bits_t
SDP AES key bit options.
Definition: hpm_sdp_drv.h:29
hpm_stat_t sdp_wait_done(SDP_Type *base)
Wait until the SDP operation gets done.
Definition: hpm_sdp_drv.c:107
sdp_crypto_op_t sdp_aes_op_t
Definition: hpm_sdp_drv.h:53
sdp_hash_alg_t
SDP HASH algorithm definitions.
Definition: hpm_sdp_drv.h:75
sdp_crypto_key_bits_t sdp_aes_key_bits_t
Definition: hpm_sdp_drv.h:37
hpm_stat_t sdp_aes_crypt_ecb(SDP_Type *base, sdp_aes_ctx_t *aes_ctx, sdp_aes_op_t op, uint32_t len, const uint8_t *in, uint8_t *out)
Perform the basic AES ECB operation.
Definition: hpm_sdp_drv.c:236
hpm_stat_t sdp_hash_init(SDP_Type *base, sdp_hash_ctx_t *hash_ctx, sdp_hash_alg_t alg)
Initialize the HASH engine.
Definition: hpm_sdp_drv.c:694
hpm_stat_t sdp_aes_crypt_ctr(SDP_Type *base, sdp_aes_ctx_t *aes_ctx, uint8_t *nonce_counter, uint8_t *input, uint8_t *output, uint32_t length)
Perform the AES-CTR operation See NIST Special Publication800-38A for more details.
Definition: hpm_sdp_drv.c:382
hpm_stat_t sdp_aes_crypt_cbc(SDP_Type *base, sdp_aes_ctx_t *aes_ctx, sdp_aes_op_t op, uint32_t length, const uint8_t iv[16], const uint8_t *input, uint8_t *output)
Perform the AES CBC operation.
Definition: hpm_sdp_drv.c:298
#define AES_BLOCK_SIZE
Definition: hpm_sdp_drv.h:88
@ sdp_aes_op_encrypt
Definition: hpm_sdp_drv.h:45
@ sdp_aes_op_decrypt
Definition: hpm_sdp_drv.h:46
@ sdp_crypto_alg_aes
Definition: hpm_sdp_drv.h:66
@ sdp_aes_keybits_256
Definition: hpm_sdp_drv.h:31
@ sdp_aes_keybits_128
Definition: hpm_sdp_drv.h:30
@ status_sdp_error_packet
Definition: hpm_sdp_drv.h:171
@ status_sdp_error_src
Definition: hpm_sdp_drv.h:175
@ status_sdp_error_setup
Definition: hpm_sdp_drv.h:174
@ status_sdp_aes_busy
Definition: hpm_sdp_drv.h:172
@ status_sdp_invalid_alg
Definition: hpm_sdp_drv.h:180
@ status_sdp_error_hash
Definition: hpm_sdp_drv.h:177
@ status_sdp_no_crypto_support
Definition: hpm_sdp_drv.h:168
@ status_sdp_error_chain
Definition: hpm_sdp_drv.h:178
@ status_sdp_invalid_key_src
Definition: hpm_sdp_drv.h:170
@ status_sdp_hash_busy
Definition: hpm_sdp_drv.h:173
@ status_sdp_error_invalid_mac
Definition: hpm_sdp_drv.h:179
@ status_sdp_no_hash_support
Definition: hpm_sdp_drv.h:169
@ status_sdp_error_dst
Definition: hpm_sdp_drv.h:176
@ sdp_hash_alg_sha1
Definition: hpm_sdp_drv.h:76
@ sdp_hash_alg_crc32
Definition: hpm_sdp_drv.h:77
@ sdp_hash_alg_max
Definition: hpm_sdp_drv.h:83
@ sdp_hash_alg_sha256
Definition: hpm_sdp_drv.h:78
Definition: hpm_sdp_regs.h:12
SDP AES context structure.
Definition: hpm_sdp_drv.h:132
uint8_t key_bits
Definition: hpm_sdp_drv.h:134
uint16_t crypto_algo
Definition: hpm_sdp_drv.h:135
uint8_t key_idx
Definition: hpm_sdp_drv.h:133
sdp_pkt_struct_t sdp_pkt
Definition: hpm_sdp_drv.h:136
SDP DMA context.
Definition: hpm_sdp_drv.h:152
sdp_pkt_struct_t sdp_pkt
Definition: hpm_sdp_drv.h:153
SDP HASH context.
Definition: hpm_sdp_drv.h:159
sdp_pkt_struct_t sdp_pkt
Definition: hpm_sdp_drv.h:160