GK SDK 源码库: XMIPCLinuxV100R005C00SPC030 (kernel/tools/open_source excluded)
This commit is contained in:
@@ -0,0 +1,85 @@
|
||||
/*
|
||||
* Copyright 2017-2021 NXP
|
||||
*
|
||||
* SPDX-License-Identifier: BSD-3-Clause
|
||||
*
|
||||
*/
|
||||
|
||||
#ifndef __HASH_H__
|
||||
#define __HASH_H__
|
||||
|
||||
#include <stdbool.h>
|
||||
|
||||
/* List of hash algorithms */
|
||||
enum hash_algo {
|
||||
SHA1 = 0,
|
||||
SHA256
|
||||
};
|
||||
|
||||
/* number of bytes in the SHA256-256 digest */
|
||||
#define SHA256_DIGEST_SIZE 32
|
||||
|
||||
/*
|
||||
* number of words in the digest - Digest is kept internally
|
||||
* as 8 32-bit words
|
||||
*/
|
||||
#define _SHA256_DIGEST_LENGTH 8
|
||||
|
||||
/*
|
||||
* block length - A block, treated as a sequence of
|
||||
* 32-bit words
|
||||
*/
|
||||
#define SHA256_BLOCK_LENGTH 16
|
||||
|
||||
/* number of bytes in the block */
|
||||
#define SHA256_DATA_SIZE 64
|
||||
|
||||
#define MAX_SG 12
|
||||
|
||||
struct sg_entry {
|
||||
#if defined(NXP_SEC_LE)
|
||||
uint32_t addr_lo; /* Memory Address - lo */
|
||||
uint32_t addr_hi; /* Memory Address of start of buffer - hi */
|
||||
#else
|
||||
uint32_t addr_hi; /* Memory Address of start of buffer - hi */
|
||||
uint32_t addr_lo; /* Memory Address - lo */
|
||||
#endif
|
||||
|
||||
uint32_t len_flag; /* Length of the data in the frame */
|
||||
#define SG_ENTRY_LENGTH_MASK 0x3FFFFFFF
|
||||
#define SG_ENTRY_EXTENSION_BIT 0x80000000
|
||||
#define SG_ENTRY_FINAL_BIT 0x40000000
|
||||
uint32_t bpid_offset;
|
||||
#define SG_ENTRY_BPID_MASK 0x00FF0000
|
||||
#define SG_ENTRY_BPID_SHIFT 16
|
||||
#define SG_ENTRY_OFFSET_MASK 0x00001FFF
|
||||
#define SG_ENTRY_OFFSET_SHIFT 0
|
||||
};
|
||||
|
||||
/*
|
||||
* SHA256-256 context
|
||||
* contain the following fields
|
||||
* State
|
||||
* count low
|
||||
* count high
|
||||
* block data buffer
|
||||
* index to the buffer
|
||||
*/
|
||||
struct hash_ctx {
|
||||
struct sg_entry sg_tbl[MAX_SG];
|
||||
uint32_t hash_desc[64];
|
||||
uint8_t hash[SHA256_DIGEST_SIZE];
|
||||
uint32_t sg_num;
|
||||
uint32_t len;
|
||||
uint8_t *data;
|
||||
enum hash_algo algo;
|
||||
bool active;
|
||||
};
|
||||
|
||||
int hash_init(enum hash_algo algo, void **ctx);
|
||||
int hash_update(enum hash_algo algo, void *context, void *data_ptr,
|
||||
unsigned int data_len);
|
||||
int hash_final(enum hash_algo algo, void *context, void *hash_ptr,
|
||||
unsigned int hash_len);
|
||||
|
||||
#endif
|
||||
Reference in New Issue
Block a user