summaryrefslogtreecommitdiff
path: root/src/lib
diff options
context:
space:
mode:
authorjsing <>2024-03-28 08:26:42 +0000
committerjsing <>2024-03-28 08:26:42 +0000
commitde80624154406ecce32edd705e0da6cf08b93c21 (patch)
treeaafd62bf405526e055bc10d84d31f597f332a696 /src/lib
parent34aad48234972fa68141734c3b9438e29822b963 (diff)
downloadopenbsd-de80624154406ecce32edd705e0da6cf08b93c21.tar.gz
openbsd-de80624154406ecce32edd705e0da6cf08b93c21.tar.bz2
openbsd-de80624154406ecce32edd705e0da6cf08b93c21.zip
Expand HASH_* defines.
No change in generated assembly.
Diffstat (limited to 'src/lib')
-rw-r--r--src/lib/libcrypto/sm3/sm3.c54
1 files changed, 28 insertions, 26 deletions
diff --git a/src/lib/libcrypto/sm3/sm3.c b/src/lib/libcrypto/sm3/sm3.c
index 06b5f167f0..6406454568 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.9 2024/03/28 08:13:11 jsing Exp $ */ 1/* $OpenBSD: sm3.c,v 1.10 2024/03/28 08:26:42 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018, Ribose Inc 3 * Copyright (c) 2018, Ribose Inc
4 * 4 *
@@ -276,47 +276,47 @@ SM3_Init(SM3_CTX *c)
276LCRYPTO_ALIAS(SM3_Init); 276LCRYPTO_ALIAS(SM3_Init);
277 277
278int 278int
279HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len) 279SM3_Update(SM3_CTX *c, const void *data_, size_t len)
280{ 280{
281 const unsigned char *data = data_; 281 const unsigned char *data = data_;
282 unsigned char *p; 282 unsigned char *p;
283 HASH_LONG l; 283 SM3_WORD l;
284 size_t n; 284 size_t n;
285 285
286 if (len == 0) 286 if (len == 0)
287 return 1; 287 return 1;
288 288
289 l = (c->Nl + (((HASH_LONG)len) << 3))&0xffffffffUL; 289 l = (c->Nl + (((SM3_WORD)len) << 3))&0xffffffffUL;
290 /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to 290 /* 95-05-24 eay Fixed a bug with the overflow handling, thanks to
291 * Wei Dai <weidai@eskimo.com> for pointing it out. */ 291 * Wei Dai <weidai@eskimo.com> for pointing it out. */
292 if (l < c->Nl) /* overflow */ 292 if (l < c->Nl) /* overflow */
293 c->Nh++; 293 c->Nh++;
294 c->Nh+=(HASH_LONG)(len>>29); /* might cause compiler warning on 16-bit */ 294 c->Nh+=(SM3_WORD)(len>>29); /* might cause compiler warning on 16-bit */
295 c->Nl = l; 295 c->Nl = l;
296 296
297 n = c->num; 297 n = c->num;
298 if (n != 0) { 298 if (n != 0) {
299 p = (unsigned char *)c->data; 299 p = (unsigned char *)c->data;
300 300
301 if (len >= HASH_CBLOCK || len + n >= HASH_CBLOCK) { 301 if (len >= SM3_CBLOCK || len + n >= SM3_CBLOCK) {
302 memcpy (p + n, data, HASH_CBLOCK - n); 302 memcpy(p + n, data, SM3_CBLOCK - n);
303 HASH_BLOCK_DATA_ORDER (c, p, 1); 303 SM3_block_data_order(c, p, 1);
304 n = HASH_CBLOCK - n; 304 n = SM3_CBLOCK - n;
305 data += n; 305 data += n;
306 len -= n; 306 len -= n;
307 c->num = 0; 307 c->num = 0;
308 memset (p,0,HASH_CBLOCK); /* keep it zeroed */ 308 memset(p, 0, SM3_CBLOCK); /* keep it zeroed */
309 } else { 309 } else {
310 memcpy (p + n, data, len); 310 memcpy(p + n, data, len);
311 c->num += (unsigned int)len; 311 c->num += (unsigned int)len;
312 return 1; 312 return 1;
313 } 313 }
314 } 314 }
315 315
316 n = len/HASH_CBLOCK; 316 n = len / SM3_CBLOCK;
317 if (n > 0) { 317 if (n > 0) {
318 HASH_BLOCK_DATA_ORDER (c, data, n); 318 SM3_block_data_order(c, data, n);
319 n *= HASH_CBLOCK; 319 n *= SM3_CBLOCK;
320 data += n; 320 data += n;
321 len -= n; 321 len -= n;
322 } 322 }
@@ -324,18 +324,20 @@ HASH_UPDATE(HASH_CTX *c, const void *data_, size_t len)
324 if (len != 0) { 324 if (len != 0) {
325 p = (unsigned char *)c->data; 325 p = (unsigned char *)c->data;
326 c->num = (unsigned int)len; 326 c->num = (unsigned int)len;
327 memcpy (p, data, len); 327 memcpy(p, data, len);
328 } 328 }
329 return 1; 329 return 1;
330} 330}
331LCRYPTO_ALIAS(SM3_Update); 331LCRYPTO_ALIAS(SM3_Update);
332 332
333void HASH_TRANSFORM (HASH_CTX *c, const unsigned char *data) 333void
334SM3_Transform(SM3_CTX *c, const unsigned char *data)
334{ 335{
335 HASH_BLOCK_DATA_ORDER (c, data, 1); 336 SM3_block_data_order(c, data, 1);
336} 337}
337 338
338int HASH_FINAL (unsigned char *md, HASH_CTX *c) 339int
340SM3_Final(unsigned char *md, SM3_CTX *c)
339{ 341{
340 unsigned char *p = (unsigned char *)c->data; 342 unsigned char *p = (unsigned char *)c->data;
341 size_t n = c->num; 343 size_t n = c->num;
@@ -343,14 +345,14 @@ int HASH_FINAL (unsigned char *md, HASH_CTX *c)
343 p[n] = 0x80; /* there is always room for one */ 345 p[n] = 0x80; /* there is always room for one */
344 n++; 346 n++;
345 347
346 if (n > (HASH_CBLOCK - 8)) { 348 if (n > (SM3_CBLOCK - 8)) {
347 memset (p + n, 0, HASH_CBLOCK - n); 349 memset(p + n, 0, SM3_CBLOCK - n);
348 n = 0; 350 n = 0;
349 HASH_BLOCK_DATA_ORDER (c, p, 1); 351 SM3_block_data_order(c, p, 1);
350 } 352 }
351 memset (p + n, 0, HASH_CBLOCK - 8 - n); 353 memset(p + n, 0, SM3_CBLOCK - 8 - n);
352 354
353 p += HASH_CBLOCK - 8; 355 p += SM3_CBLOCK - 8;
354#if defined(DATA_ORDER_IS_BIG_ENDIAN) 356#if defined(DATA_ORDER_IS_BIG_ENDIAN)
355 HOST_l2c(c->Nh, p); 357 HOST_l2c(c->Nh, p);
356 HOST_l2c(c->Nl, p); 358 HOST_l2c(c->Nl, p);
@@ -358,10 +360,10 @@ int HASH_FINAL (unsigned char *md, HASH_CTX *c)
358 HOST_l2c(c->Nl, p); 360 HOST_l2c(c->Nl, p);
359 HOST_l2c(c->Nh, p); 361 HOST_l2c(c->Nh, p);
360#endif 362#endif
361 p -= HASH_CBLOCK; 363 p -= SM3_CBLOCK;
362 HASH_BLOCK_DATA_ORDER (c, p, 1); 364 SM3_block_data_order(c, p, 1);
363 c->num = 0; 365 c->num = 0;
364 memset (p, 0, HASH_CBLOCK); 366 memset(p, 0, SM3_CBLOCK);
365 367
366#ifndef HASH_MAKE_STRING 368#ifndef HASH_MAKE_STRING
367#error "HASH_MAKE_STRING must be defined!" 369#error "HASH_MAKE_STRING must be defined!"