feat(util): refactor SHA algorithm of util components

This commit is contained in:
Dong Heng
2019-12-10 14:23:00 +08:00
parent e45679882a
commit b29087fd5c
11 changed files with 741 additions and 753 deletions

View File

@@ -21,63 +21,28 @@
extern "C" {
#endif
typedef int (*sha_cal_t)(void *ctx, const void *src);
typedef enum {
SHA1 = 0,
SHA224 = 1,
SHA256 = 2,
SHA384 = 3,
SHA512 = 4,
SHA_INVALID = -1,
} esp_sha_type_t;
typedef struct {
uint32_t state[5];
uint32_t total[2];
uint8_t buffer[64];
} esp_sha1_t;
typedef struct {
esp_sha_type_t type; /*!< The sha type */
uint8_t buffer[64]; /*!< The data block being processed. */
uint32_t total[2]; /*!< The number of Bytes processed. */
uint32_t state[8]; /*!< The intermediate digest state. */
sha_cal_t sha_cal; /*!< The sha calculation. */
} esp_sha_t;
uint64_t length;
uint32_t curlen;
uint32_t state[8];
uint8_t buf[64];
} esp_sha256_t;
typedef struct {
esp_sha_type_t type; /*!< The sha type */
uint8_t buffer[128]; /*!< The data block being processed. */
uint64_t total[2]; /*!< The number of Bytes processed. */
uint64_t state[8]; /*!< The intermediate digest state. */
sha_cal_t sha_cal; /*!< The sha calculation. */
uint64_t total[2];
uint64_t state[8];
uint8_t buffer[128];
} esp_sha512_t;
typedef esp_sha_t esp_sha1_t;
typedef esp_sha_t esp_sha224_t;
typedef esp_sha_t esp_sha256_t;
typedef esp_sha512_t esp_sha384_t;
typedef esp_sha256_t esp_sha224_t;
/**
* @brief initialize the SHA(1/224/256) contex
*
* @param ctx SHA contex pointer
* @param type SHA type
* @param state_ctx SHA calculation factor
* @param size calculation factor size by "uint32_t"
* @param sha_cal calculation function for real SHA
*
* @return 0 if success or fail
*/
int __esp_sha_init(esp_sha_t *ctx, esp_sha_type_t type, const uint32_t *state_ctx, size_t size, sha_cal_t sha_cal);
/**
* @brief initialize the SHA(384/512) contex
*
* @param ctx SHA contex pointer
* @param type SHA type
* @param state_ctx SHA calculation factor
* @param size calculation factor size by "uint64_t"
*
* @return 0 if success or fail
*/
int __esp_sha512_init(esp_sha512_t *ctx, esp_sha_type_t type, const uint64_t *state_ctx, size_t size);
typedef esp_sha512_t esp_sha384_t;
/**
* @brief initialize the SHA1 contex
@@ -86,13 +51,7 @@ int __esp_sha512_init(esp_sha512_t *ctx, esp_sha_type_t type, const uint64_t *st
*
* @return 0 if success or fail
*/
static inline int esp_sha1_init(esp_sha1_t *ctx)
{
extern const uint32_t __g_esp_sha1_state_ctx[];
extern int __esp_sha1_process(void *ctx, const void *data);
return __esp_sha_init(ctx, SHA1, __g_esp_sha1_state_ctx, 5, __esp_sha1_process);
}
int esp_sha1_init(esp_sha1_t *ctx);
/**
* @brief initialize the SHA224 contex
@@ -101,13 +60,7 @@ static inline int esp_sha1_init(esp_sha1_t *ctx)
*
* @return 0 if success or fail
*/
static inline int esp_sha224_init(esp_sha224_t *ctx)
{
extern const uint32_t __g_esp_sha224_state_ctx[];
extern int __esp_sha256_process(void *ctx, const void *data);
return __esp_sha_init(ctx, SHA224, __g_esp_sha224_state_ctx, 8, __esp_sha256_process);
}
int esp_sha224_init(esp_sha224_t *ctx);
/**
* @brief initialize the SHA256 contex
@@ -116,13 +69,7 @@ static inline int esp_sha224_init(esp_sha224_t *ctx)
*
* @return 0 if success or fail
*/
static inline int esp_sha256_init(esp_sha256_t *ctx)
{
extern const uint32_t __g_esp_sha256_state_ctx[];
extern int __esp_sha256_process(void *ctx, const void *data);
return __esp_sha_init(ctx, SHA256, __g_esp_sha256_state_ctx, 8, __esp_sha256_process);
}
int esp_sha256_init(esp_sha256_t *ctx);
/**
* @brief initialize the SHA384 contex
@@ -131,12 +78,7 @@ static inline int esp_sha256_init(esp_sha256_t *ctx)
*
* @return 0 if success or fail
*/
static inline int esp_sha384_init(esp_sha384_t *ctx)
{
extern const uint64_t __g_esp_sha384_state_ctx[];
return __esp_sha512_init(ctx, SHA384, __g_esp_sha384_state_ctx, 8);
}
int esp_sha384_init(esp_sha384_t *ctx);
/**
* @brief initialize the SHA512 contex
@@ -145,23 +87,7 @@ static inline int esp_sha384_init(esp_sha384_t *ctx)
*
* @return 0 if success or fail
*/
static inline int esp_sha512_init(esp_sha512_t *ctx)
{
extern const uint64_t __g_esp_sha512_state_ctx[];
return __esp_sha512_init(ctx, SHA512, __g_esp_sha512_state_ctx, 8);
}
/**
* @brief calculate input data for SHA
*
* @param ctx SHA contex pointer
* @param src input data buffer pointer
* @param size input data bytes
*
* @return 0 if success or fail
*/
int __esp_sha_update(esp_sha_t *ctx, const void *src, size_t size);
int esp_sha512_init(esp_sha512_t *ctx);
/**
* @brief calculate input data for SHA1
@@ -172,10 +98,7 @@ int __esp_sha_update(esp_sha_t *ctx, const void *src, size_t size);
*
* @return 0 if success or fail
*/
static inline int esp_sha1_update(esp_sha1_t *ctx, const void *src, size_t size)
{
return __esp_sha_update(ctx, src, size);
}
int esp_sha1_update(esp_sha1_t *ctx, const void *src, size_t size);
/**
* @brief calculate input data for SHA224
@@ -186,10 +109,7 @@ static inline int esp_sha1_update(esp_sha1_t *ctx, const void *src, size_t size)
*
* @return 0 if success or fail
*/
static inline int esp_sha224_update(esp_sha224_t *ctx, const void *src, size_t size)
{
return __esp_sha_update(ctx, src, size);
}
int esp_sha224_update(esp_sha224_t *ctx, const void *src, size_t size);
/**
* @brief calculate input data for SHA256
@@ -200,10 +120,7 @@ static inline int esp_sha224_update(esp_sha224_t *ctx, const void *src, size_t s
*
* @return 0 if success or fail
*/
static inline int esp_sha256_update(esp_sha256_t *ctx, const void *src, size_t size)
{
return __esp_sha_update(ctx, src, size);
}
int esp_sha256_update(esp_sha256_t *ctx, const void *src, size_t size);
/**
* @brief calculate input data for SHA384
@@ -214,10 +131,7 @@ static inline int esp_sha256_update(esp_sha256_t *ctx, const void *src, size_t s
*
* @return 0 if success or fail
*/
static inline int esp_sha384_update(esp_sha384_t *ctx, const void *src, size_t size)
{
return __esp_sha_update((esp_sha_t *)ctx, src, size);
}
int esp_sha384_update(esp_sha384_t *ctx, const void *src, size_t size);
/**
* @brief calculate input data for SHA512
@@ -228,20 +142,7 @@ static inline int esp_sha384_update(esp_sha384_t *ctx, const void *src, size_t s
*
* @return 0 if success or fail
*/
static inline int esp_sha512_update(esp_sha512_t *ctx, const void *src, size_t size)
{
return __esp_sha_update((esp_sha_t *)ctx, src, size);
}
/**
* @brief output SHA(1/224/256/384/512) calculation result
*
* @param ctx SHA contex pointer
* @param dest output data buffer pointer
*
* @return 0 if success or fail
*/
int __esp_sha_finish(esp_sha_t *ctx, void *dest);
int esp_sha512_update(esp_sha512_t *ctx, const void *src, size_t size);
/**
* @brief output SHA1 calculation result
@@ -251,10 +152,7 @@ int __esp_sha_finish(esp_sha_t *ctx, void *dest);
*
* @return 0 if success or fail
*/
static inline int esp_sha1_finish(esp_sha1_t *ctx, void *dest)
{
return __esp_sha_finish(ctx, dest);
}
int esp_sha1_finish(esp_sha1_t *ctx, void *dest);
/**
* @brief output SHA224 calculation result
@@ -264,10 +162,7 @@ static inline int esp_sha1_finish(esp_sha1_t *ctx, void *dest)
*
* @return 0 if success or fail
*/
static inline int esp_sha224_finish(esp_sha224_t *ctx, void *dest)
{
return __esp_sha_finish(ctx, dest);
}
int esp_sha224_finish(esp_sha224_t *ctx, void *dest);
/**
* @brief output SHA256 calculation result
@@ -277,10 +172,7 @@ static inline int esp_sha224_finish(esp_sha224_t *ctx, void *dest)
*
* @return 0 if success or fail
*/
static inline int esp_sha256_finish(esp_sha256_t *ctx, void *dest)
{
return __esp_sha_finish(ctx, dest);
}
int esp_sha256_finish(esp_sha256_t *ctx, void *dest);
/**
* @brief output SHA384 calculation result
@@ -290,10 +182,7 @@ static inline int esp_sha256_finish(esp_sha256_t *ctx, void *dest)
*
* @return 0 if success or fail
*/
static inline int esp_sha384_finish(esp_sha384_t *ctx, void *dest)
{
return __esp_sha_finish((esp_sha_t *)ctx, dest);
}
int esp_sha384_finish(esp_sha384_t *ctx, void *dest);
/**
* @brief output SHA512 calculation result
@@ -303,10 +192,7 @@ static inline int esp_sha384_finish(esp_sha384_t *ctx, void *dest)
*
* @return 0 if success or fail
*/
static inline int esp_sha512_finish(esp_sha512_t *ctx, void *dest)
{
return __esp_sha_finish((esp_sha_t *)ctx, dest);
}
int esp_sha512_finish(esp_sha512_t *ctx, void *dest);
#ifdef __cplusplus
}