89 lines
2.1 KiB
C
89 lines
2.1 KiB
C
/*
|
|
* Copyright (c) 2022 Intel Corporation.
|
|
*
|
|
* SPDX-License-Identifier: Apache-2.0
|
|
*/
|
|
|
|
#ifndef ZEPHYR_DRIVERS_CRYPTO_CRYPTO_INTEL_SHA_PRIV_H_
|
|
#define ZEPHYR_DRIVERS_CRYPTO_CRYPTO_INTEL_SHA_PRIV_H_
|
|
|
|
#include <zephyr/kernel.h>
|
|
#include "crypto_intel_sha_registers.h"
|
|
|
|
#define SHA_HASH_DATA_BLOCK_LEN (64)
|
|
#define SHA_API_MAX_FRAG_LEN (64 * 1024 - 256)
|
|
#define SHA_REQUIRED_BLOCK_ALIGNMENT (512)
|
|
|
|
/* Possible SHA states */
|
|
#define SHA_FIRST (2)
|
|
#define SHA_MIDLE (3)
|
|
#define SHA_LAST (0)
|
|
/* SHA resume flag */
|
|
#define SHA_HRSM_ENABLE (1)
|
|
#define SHA_HRSM_DISABLE (0)
|
|
|
|
#define SHA1_ALGORITHM_HASH_SIZEOF (160 / 8)
|
|
#define SHA224_ALGORITHM_HASH_SIZEOF (224 / 8)
|
|
#define SHA256_ALGORITHM_HASH_SIZEOF (256 / 8)
|
|
#define SHA384_ALGORITHM_HASH_SIZEOF (384 / 8)
|
|
#define SHA512_ALGORITHM_HASH_SIZEOF (512 / 8)
|
|
|
|
#define SHA_MAX_SESSIONS 8
|
|
|
|
#define IS_ALIGNED(address, alignment) (((uintptr_t)(address)) % (alignment) == 0)
|
|
#define BYTE_SWAP32(x) \
|
|
(((x >> 24) & 0x000000FF) | ((x << 24) & 0xFF000000) | ((x >> 8) & 0x0000FF00) | \
|
|
((x << 8) & 0x00FF0000))
|
|
|
|
struct sha_hw_regs {
|
|
union PIBCS pibcs;
|
|
union PIBBA pibba;
|
|
union PIBS pibs;
|
|
union PIBFPI pibfpi;
|
|
union PIBRP pibrp;
|
|
union PIBWP pibwp;
|
|
union PIBSP pibsp;
|
|
uint32_t not_used1[5];
|
|
union SHARLDW0 sharldw0;
|
|
union SHARLDW1 sharldw1;
|
|
union SHAALDW0 shaaldw0;
|
|
union SHAALDW1 shaaldw1;
|
|
union SHACTL shactl;
|
|
union SHASTS shasts;
|
|
uint32_t not_used12[2];
|
|
uint8_t initial_vector[64];
|
|
uint8_t sha_result[64];
|
|
};
|
|
|
|
union sha_state {
|
|
uint32_t full;
|
|
struct {
|
|
/* Hash state: SHA_FIRST, SHA_MIDLE or SHA_LAST */
|
|
uint32_t state : 3;
|
|
/* Hash resume bit */
|
|
uint32_t hrsm : 1;
|
|
uint32_t rsvd : 28;
|
|
} part;
|
|
};
|
|
|
|
struct sha_context {
|
|
union SHAALDW0 shaaldw0;
|
|
union SHAALDW1 shaaldw1;
|
|
uint8_t initial_vector[SHA_HASH_DATA_BLOCK_LEN];
|
|
uint8_t sha_result[SHA_HASH_DATA_BLOCK_LEN];
|
|
};
|
|
|
|
struct sha_session {
|
|
struct sha_context sha_ctx;
|
|
union sha_state state;
|
|
uint32_t algo;
|
|
bool in_use;
|
|
};
|
|
|
|
struct sha_container {
|
|
/* pointer to DSP SHA Registers */
|
|
volatile struct sha_hw_regs *dfsha;
|
|
};
|
|
|
|
#endif
|