mirror of
https://github.com/guanzhi/GmSSL.git
synced 2026-05-06 16:36:16 +08:00
Update SM3
Safe call to sm3_compress_blocks
This commit is contained in:
@@ -58,6 +58,7 @@ void sm3_update(SM3_CTX *ctx, const uint8_t *data, size_t datalen);
|
|||||||
void sm3_finish(SM3_CTX *ctx, uint8_t dgst[SM3_DIGEST_SIZE]);
|
void sm3_finish(SM3_CTX *ctx, uint8_t dgst[SM3_DIGEST_SIZE]);
|
||||||
void sm3_digest(const uint8_t *data, size_t datalen, uint8_t dgst[SM3_DIGEST_SIZE]);
|
void sm3_digest(const uint8_t *data, size_t datalen, uint8_t dgst[SM3_DIGEST_SIZE]);
|
||||||
|
|
||||||
|
void sm3_compress_blocks(uint32_t digest[8], const uint8_t *data, size_t blocks);
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
SM3_CTX sm3_ctx;
|
SM3_CTX sm3_ctx;
|
||||||
|
|||||||
12
src/sm3.c
12
src/sm3.c
@@ -294,7 +294,6 @@ void sm3_compress_blocks(uint32_t digest[8], const uint8_t *data, size_t blocks)
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
void sm3_init(SM3_CTX *ctx)
|
void sm3_init(SM3_CTX *ctx)
|
||||||
{
|
{
|
||||||
memset(ctx, 0, sizeof(*ctx));
|
memset(ctx, 0, sizeof(*ctx));
|
||||||
@@ -321,7 +320,6 @@ void sm3_update(SM3_CTX *ctx, const uint8_t *data, size_t data_len)
|
|||||||
ctx->num += data_len;
|
ctx->num += data_len;
|
||||||
return;
|
return;
|
||||||
} else {
|
} else {
|
||||||
memcpy(ctx->block + ctx->num, data, left);
|
|
||||||
sm3_compress_blocks(ctx->digest, ctx->block, 1);
|
sm3_compress_blocks(ctx->digest, ctx->block, 1);
|
||||||
ctx->nblocks++;
|
ctx->nblocks++;
|
||||||
data += left;
|
data += left;
|
||||||
@@ -330,10 +328,12 @@ void sm3_update(SM3_CTX *ctx, const uint8_t *data, size_t data_len)
|
|||||||
}
|
}
|
||||||
|
|
||||||
blocks = data_len / SM3_BLOCK_SIZE;
|
blocks = data_len / SM3_BLOCK_SIZE;
|
||||||
sm3_compress_blocks(ctx->digest, data, blocks);
|
if (blocks) {
|
||||||
ctx->nblocks += blocks;
|
sm3_compress_blocks(ctx->digest, data, blocks);
|
||||||
data += SM3_BLOCK_SIZE * blocks;
|
ctx->nblocks += blocks;
|
||||||
data_len -= SM3_BLOCK_SIZE * blocks;
|
data += SM3_BLOCK_SIZE * blocks;
|
||||||
|
data_len -= SM3_BLOCK_SIZE * blocks;
|
||||||
|
}
|
||||||
|
|
||||||
ctx->num = data_len;
|
ctx->num = data_len;
|
||||||
if (data_len) {
|
if (data_len) {
|
||||||
|
|||||||
Reference in New Issue
Block a user