HPM SDK
HPMicro Software Development Kit
SDP driver APIs

SDP driver APIs. More...

Data Structures

struct  sdp_crypto_ctx_t
 SDP AES context structure. More...
 
struct  sdp_dma_ctx_t
 SDP DMA context. More...
 
struct  sdp_hash_ctx_t
 SDP HASH context. More...
 

Macros

#define HASH_BLOCK_SIZE   (64U)
 
#define AES_BLOCK_SIZE   (16U)
 
#define AES_128_KEY_SIZE   (0x10U)
 
#define AES_256_KEY_SIZE   (0x20U)
 
#define SM4_BLOCK_SIZE   (AES_BLOCK_SIZE)
 
#define SM4_KEY_SIZE   (AES_128_KEY_SIZE)
 
#define SDP_PKT_CTRL_DERSEMA_MASK   (1U << 2)
 Bitfield definitions for the PKT_CTRL. More...
 
#define SDP_PKT_CTRL_CHAIN_MASK   (1U << 3)
 
#define SDP_PKT_CTRL_HASHINIT_MASK   (1U << 4)
 
#define SDP_PKT_CTRL_HASHFINISH_MASK   (1U << 5)
 
#define SDP_PKT_CTRL_CIPHIV_MASK   (1U << 6)
 

Typedefs

typedef sdp_crypto_key_bits_t sdp_aes_key_bits_t
 
typedef sdp_crypto_key_bits_t sdp_sm4_key_bits_t
 
typedef sdp_crypto_op_t sdp_aes_op_t
 
typedef struct _sdp_packet_struct sdp_pkt_struct_t
 SDP packet data structure. More...
 
typedef sdp_crypto_ctx_t sdp_aes_ctx_t
 

Enumerations

enum  sdp_crypto_key_bits_t { sdp_aes_keybits_128 = 0 , sdp_aes_keybits_256 = 1 }
 SDP AES key bit options. More...
 
enum  sdp_crypto_op_t { sdp_aes_op_encrypt , sdp_aes_op_decrypt }
 Crypto operation option. More...
 
enum  sdp_crypto_alg_t { sdp_crypto_alg_aes }
 SDP Crypto algorithms. More...
 
enum  sdp_hash_alg_t { sdp_hash_alg_sha1 = 0 , sdp_hash_alg_crc32 = 1 , sdp_hash_alg_sha256 = 2 , sdp_hash_alg_max = sdp_hash_alg_sha256 }
 SDP HASH algorithm definitions. More...
 
enum  {
  status_sdp_no_crypto_support = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 0 )) , status_sdp_no_hash_support = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 1 )) , status_sdp_invalid_key_src = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 2 )) , status_sdp_error_packet = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 3 )) ,
  status_sdp_aes_busy = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 4 )) , status_sdp_hash_busy = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 5 )) , status_sdp_error_setup = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 6 )) , status_sdp_error_src = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 7 )) ,
  status_sdp_error_dst = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 8 )) , status_sdp_error_hash = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 9 )) , status_sdp_error_chain = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 10 )) , status_sdp_error_invalid_mac = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 11 )) ,
  status_sdp_invalid_alg = ((uint32_t)( status_group_sdp )*1000U + (uint32_t)( 12 ))
}
 SDP error status definitions. More...
 

Functions

hpm_stat_t sdp_init (SDP_Type *base)
 Initialize the SDP controller. More...
 
hpm_stat_t sdp_deinit (SDP_Type *base)
 De-initialize the SDP controller. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
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. More...
 
hpm_stat_t sdp_hash_init (SDP_Type *base, sdp_hash_ctx_t *hash_ctx, sdp_hash_alg_t alg)
 Initialize the HASH engine. More...
 
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. More...
 
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. More...
 
hpm_stat_t sdp_wait_done (SDP_Type *base)
 Wait until the SDP operation gets done. More...
 

Detailed Description

SDP driver APIs.

Macro Definition Documentation

◆ AES_128_KEY_SIZE

#define AES_128_KEY_SIZE   (0x10U)

#include <drivers/inc/hpm_sdp_drv.h>

AES 128-bit key size in bytes

◆ AES_256_KEY_SIZE

#define AES_256_KEY_SIZE   (0x20U)

#include <drivers/inc/hpm_sdp_drv.h>

AES 256-bit key size in bytes

◆ AES_BLOCK_SIZE

#define AES_BLOCK_SIZE   (16U)

#include <drivers/inc/hpm_sdp_drv.h>

AES block size in bytes

◆ HASH_BLOCK_SIZE

#define HASH_BLOCK_SIZE   (64U)

#include <drivers/inc/hpm_sdp_drv.h>

Hash block size in bytes

◆ SDP_PKT_CTRL_CHAIN_MASK

#define SDP_PKT_CTRL_CHAIN_MASK   (1U << 3)

◆ SDP_PKT_CTRL_CIPHIV_MASK

#define SDP_PKT_CTRL_CIPHIV_MASK   (1U << 6)

◆ SDP_PKT_CTRL_DERSEMA_MASK

#define SDP_PKT_CTRL_DERSEMA_MASK   (1U << 2)

#include <drivers/inc/hpm_sdp_drv.h>

Bitfield definitions for the PKT_CTRL.

◆ SDP_PKT_CTRL_HASHFINISH_MASK

#define SDP_PKT_CTRL_HASHFINISH_MASK   (1U << 5)

◆ SDP_PKT_CTRL_HASHINIT_MASK

#define SDP_PKT_CTRL_HASHINIT_MASK   (1U << 4)

◆ SM4_BLOCK_SIZE

#define SM4_BLOCK_SIZE   (AES_BLOCK_SIZE)

#include <drivers/inc/hpm_sdp_drv.h>

SM4 block size in bytes

◆ SM4_KEY_SIZE

#define SM4_KEY_SIZE   (AES_128_KEY_SIZE)

#include <drivers/inc/hpm_sdp_drv.h>

SM4 Key size in bytes

Typedef Documentation

◆ sdp_aes_ctx_t

◆ sdp_aes_key_bits_t

◆ sdp_aes_op_t

◆ sdp_pkt_struct_t

typedef struct _sdp_packet_struct sdp_pkt_struct_t

#include <drivers/inc/hpm_sdp_drv.h>

SDP packet data structure.

◆ sdp_sm4_key_bits_t

Enumeration Type Documentation

◆ anonymous enum

anonymous enum

#include <drivers/inc/hpm_sdp_drv.h>

SDP error status definitions.

Enumerator
status_sdp_no_crypto_support 

The crypto algorithm is not supported

status_sdp_no_hash_support 

The hash algorithm is not supported

status_sdp_invalid_key_src 

Invalid AES key source

status_sdp_error_packet 

Error packet

status_sdp_aes_busy 

AES engine is busy

status_sdp_hash_busy 

HASH engine is busy

status_sdp_error_setup 

Error setup in SDP IP

status_sdp_error_src 

Error source address

status_sdp_error_dst 

Error destination address

status_sdp_error_hash 

Error Hash digest

status_sdp_error_chain 

Error packet chain

status_sdp_error_invalid_mac 

Inavlid Message Athenticaion Code (MAC)

status_sdp_invalid_alg 

Invalid algorithm

◆ sdp_crypto_alg_t

#include <drivers/inc/hpm_sdp_drv.h>

SDP Crypto algorithms.

Enumerator
sdp_crypto_alg_aes 

AES

◆ sdp_crypto_key_bits_t

#include <drivers/inc/hpm_sdp_drv.h>

SDP AES key bit options.

Enumerator
sdp_aes_keybits_128 

128 bit AES key

sdp_aes_keybits_256 

256 bit AES key

◆ sdp_crypto_op_t

#include <drivers/inc/hpm_sdp_drv.h>

Crypto operation option.

Enumerator
sdp_aes_op_encrypt 

AES Encrypt operation

sdp_aes_op_decrypt 

AES Decrypt operation

◆ sdp_hash_alg_t

#include <drivers/inc/hpm_sdp_drv.h>

SDP HASH algorithm definitions.

Enumerator
sdp_hash_alg_sha1 

SDP SHA1

sdp_hash_alg_crc32 

SDP CRC32

sdp_hash_alg_sha256 

SDP SHA256

sdp_hash_alg_max 

Function Documentation

◆ sdp_aes_ccm_decrypt_verify()

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 
)

#include <drivers/inc/hpm_sdp_drv.h>

Perform the AES-CCM decrypt and verify See NIST Special Publication 800-38C for more details.

Parameters
[in]baseSDP base address
[in]aes_ctxAES operation context
[in]input_lenInput data length in bytes
[in]ivInitial vector
[in]iv_lenInitial vector length in bytes
[in]aadAdditional Authentication data
[in]aad_lenAdditional authentication data size
[in]inputInput data buffer
[out]outputOutput buffer
[in]tagMAC buffer
[in]tag_lenTag/MAC size in bytes
Return values
APIexecution status.

◆ sdp_aes_ccm_generate_encrypt()

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 
)

#include <drivers/inc/hpm_sdp_drv.h>

Perform the AES-CCM generate and encrypt See NIST Special Publication 800-38C for more details.

Parameters
[in]baseSDP base address
[in]aes_ctxAES operation context
[in]input_lenInput data length in bytes
[in]ivInitial vector
[in]iv_lenInitial vector length in bytes
[in]aadAdditional Authentication data
[in]aad_lenAdditional authentication data size
[in]inputInput data buffer
[out]outputOutput buffer
[out]tagMAC buffer
[in]tag_lenTag/MAC size in bytes
Return values
APIexecution status.

◆ sdp_aes_crypt_cbc()

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 
)

#include <drivers/inc/hpm_sdp_drv.h>

Perform the AES CBC operation.

Parameters
[in]baseSDP base address
[in]aes_ctxAES operation context
[in]opAES operation option
[in]lengthAES data length in bytes
[in]ivInitial vector/nonce
[in]inputInput buffer
[out]outputOutput buffer
Return values
APIexecution status.

◆ sdp_aes_crypt_ctr()

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 
)

#include <drivers/inc/hpm_sdp_drv.h>

Perform the AES-CTR operation See NIST Special Publication800-38A for more details.

Parameters
[in]baseSDP base address
[in]aes_ctxAES operation context
[in]nonce_counterAES-CTR nounce/counter
[in]inputInput buffer
[out]outputOutput buffer
[in]lengthLength of data for AES-CTR operation
Return values
APIexecution status.

◆ sdp_aes_crypt_ecb()

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 
)

#include <drivers/inc/hpm_sdp_drv.h>

Perform the basic AES ECB operation.

Parameters
[in]baseSDP base address
[in]aes_ctxAES operation context
[in]opAES operation option
[in]lenAES data length in bytes
[in]inInput buffer
[out]outOutput buffer
Return values
APIexecution status.

◆ sdp_aes_set_key()

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 
)

#include <drivers/inc/hpm_sdp_drv.h>

Set the AES key for the SDP AES operation.

Parameters
[in]baseSDP base address
[in]aes_ctxAES operation context
[in]keyAES key
[in]key_bitsAES key-bit option
[in]key_idxAES key index
Return values
APIexecution status.

◆ sdp_deinit()

hpm_stat_t sdp_deinit ( SDP_Type base)

#include <drivers/inc/hpm_sdp_drv.h>

De-initialize the SDP controller.

Parameters
[in]baseSDP base address
Return values
APIexecution status.

◆ sdp_hash_finish()

hpm_stat_t sdp_hash_finish ( SDP_Type base,
sdp_hash_ctx_t hash_ctx,
uint8_t *  digest 
)

#include <drivers/inc/hpm_sdp_drv.h>

Finish the HASH calculation and output the digest.

Parameters
[in]baseSDP base address
[in]hash_ctxHASH operation context
[out]digestDigest buffer
Return values
APIexecution status.

◆ sdp_hash_init()

hpm_stat_t sdp_hash_init ( SDP_Type base,
sdp_hash_ctx_t hash_ctx,
sdp_hash_alg_t  alg 
)

#include <drivers/inc/hpm_sdp_drv.h>

Initialize the HASH engine.

Parameters
[in]baseSDP base address
[in]hash_ctxHASH operation context
[in]algHash algorithm
Return values
APIexecution status. status_success or status_invalid_argument

◆ sdp_hash_update()

hpm_stat_t sdp_hash_update ( SDP_Type base,
sdp_hash_ctx_t hash_ctx,
const uint8_t *  data,
uint32_t  length 
)

#include <drivers/inc/hpm_sdp_drv.h>

Compute the HASH digest.

Parameters
[in]baseSDP base address
[in]hash_ctxHASH operation context
[in]dataData for HASH computing
[in]lengthData size for HASH computing
Return values
APIexecution status.

◆ sdp_init()

hpm_stat_t sdp_init ( SDP_Type base)

#include <drivers/inc/hpm_sdp_drv.h>

Initialize the SDP controller.

Parameters
[in]baseSDP base address
Return values
APIexecution status.

◆ sdp_memcpy()

hpm_stat_t sdp_memcpy ( SDP_Type base,
sdp_dma_ctx_t sdp_ctx,
void *  dst,
const void *  src,
uint32_t  length 
)

#include <drivers/inc/hpm_sdp_drv.h>

Perform the DMA accelerated memcpy.

Parameters
[in]baseSDP base address
[in]sdp_ctxSDP DMA context
[out]dstDestination address for memcpy operation
[in]srcSource address for memcpy operation
[in]lengthLength of the data to be copied
Return values
APIexecution status.

◆ sdp_memset()

hpm_stat_t sdp_memset ( SDP_Type base,
sdp_dma_ctx_t sdp_ctx,
void *  dst,
uint8_t  pattern,
uint32_t  length 
)

#include <drivers/inc/hpm_sdp_drv.h>

Perform the DMA accelerated memset.

Parameters
[in]baseSDP base address
[in]sdp_ctxSDP DMA context
[out]dstSDP destination address for memset operation
[in]patternpattern for memset operation
[in]lengthlength of the memory for memset operation
Return values
APIexecution status.

◆ sdp_wait_done()

hpm_stat_t sdp_wait_done ( SDP_Type base)

#include <drivers/inc/hpm_sdp_drv.h>

Wait until the SDP operation gets done.

Return values
APIexecution status.