summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--src/lib/libcrypto/sm3/sm3.c37
1 files changed, 20 insertions, 17 deletions
diff --git a/src/lib/libcrypto/sm3/sm3.c b/src/lib/libcrypto/sm3/sm3.c
index 6406454568..d19156a6a1 100644
--- a/src/lib/libcrypto/sm3/sm3.c
+++ b/src/lib/libcrypto/sm3/sm3.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sm3.c,v 1.10 2024/03/28 08:26:42 jsing Exp $ */ 1/* $OpenBSD: sm3.c,v 1.11 2024/03/28 08:30:25 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018, Ribose Inc 3 * Copyright (c) 2018, Ribose Inc
4 * 4 *
@@ -31,17 +31,6 @@
31#define HASH_UPDATE SM3_Update 31#define HASH_UPDATE SM3_Update
32#define HASH_TRANSFORM SM3_Transform 32#define HASH_TRANSFORM SM3_Transform
33#define HASH_FINAL SM3_Final 33#define HASH_FINAL SM3_Final
34#define HASH_MAKE_STRING(c, s) do { \
35 unsigned long ll; \
36 ll = (c)->A; HOST_l2c(ll, (s)); \
37 ll = (c)->B; HOST_l2c(ll, (s)); \
38 ll = (c)->C; HOST_l2c(ll, (s)); \
39 ll = (c)->D; HOST_l2c(ll, (s)); \
40 ll = (c)->E; HOST_l2c(ll, (s)); \
41 ll = (c)->F; HOST_l2c(ll, (s)); \
42 ll = (c)->G; HOST_l2c(ll, (s)); \
43 ll = (c)->H; HOST_l2c(ll, (s)); \
44} while (0)
45#define HASH_BLOCK_DATA_ORDER SM3_block_data_order 34#define HASH_BLOCK_DATA_ORDER SM3_block_data_order
46 35
47void SM3_block_data_order(SM3_CTX *c, const void *p, size_t num); 36void SM3_block_data_order(SM3_CTX *c, const void *p, size_t num);
@@ -341,6 +330,7 @@ SM3_Final(unsigned char *md, SM3_CTX *c)
341{ 330{
342 unsigned char *p = (unsigned char *)c->data; 331 unsigned char *p = (unsigned char *)c->data;
343 size_t n = c->num; 332 size_t n = c->num;
333 unsigned long ll;
344 334
345 p[n] = 0x80; /* there is always room for one */ 335 p[n] = 0x80; /* there is always room for one */
346 n++; 336 n++;
@@ -365,11 +355,24 @@ SM3_Final(unsigned char *md, SM3_CTX *c)
365 c->num = 0; 355 c->num = 0;
366 memset(p, 0, SM3_CBLOCK); 356 memset(p, 0, SM3_CBLOCK);
367 357
368#ifndef HASH_MAKE_STRING 358 do {
369#error "HASH_MAKE_STRING must be defined!" 359 ll = (c)->A;
370#else 360 HOST_l2c(ll, md);
371 HASH_MAKE_STRING(c, md); 361 ll = (c)->B;
372#endif 362 HOST_l2c(ll, md);
363 ll = (c)->C;
364 HOST_l2c(ll, md);
365 ll = (c)->D;
366 HOST_l2c(ll, md);
367 ll = (c)->E;
368 HOST_l2c(ll, md);
369 ll = (c)->F;
370 HOST_l2c(ll, md);
371 ll = (c)->G;
372 HOST_l2c(ll, md);
373 ll = (c)->H;
374 HOST_l2c(ll, md);
375 } while (0);
373 376
374 return 1; 377 return 1;
375} 378}