summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2023-07-08 06:36:55 +0000
committerjsing <>2023-07-08 06:36:55 +0000
commit8c4ca6bf7bf488ca8360a75710452552ae1bb148 (patch)
tree7c2f367904e3aac0ede3b51147a1c23f889831d9 /src
parente1ea593bb1fac828fbd14800422748eda7a2febd (diff)
downloadopenbsd-8c4ca6bf7bf488ca8360a75710452552ae1bb148.tar.gz
openbsd-8c4ca6bf7bf488ca8360a75710452552ae1bb148.tar.bz2
openbsd-8c4ca6bf7bf488ca8360a75710452552ae1bb148.zip
Inline sm3_local.h in sm3.c.
sm3_local.h is not really a local header, just another layer of indirection that cannot be included by anything other than sm3.c. As such, include it directly instead. No change in generated assembly.
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/sm3/sm3.c72
-rw-r--r--src/lib/libcrypto/sm3/sm3_local.h85
2 files changed, 70 insertions, 87 deletions
diff --git a/src/lib/libcrypto/sm3/sm3.c b/src/lib/libcrypto/sm3/sm3.c
index a787006434..80be935f74 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.5 2023/07/08 06:13:08 beck Exp $ */ 1/* $OpenBSD: sm3.c,v 1.6 2023/07/08 06:36:55 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2018, Ribose Inc 3 * Copyright (c) 2018, Ribose Inc
4 * 4 *
@@ -19,7 +19,75 @@
19 19
20#include <openssl/sm3.h> 20#include <openssl/sm3.h>
21 21
22#include "sm3_local.h" 22#include <string.h>
23
24#include <openssl/opensslconf.h>
25
26#define DATA_ORDER_IS_BIG_ENDIAN
27
28#define HASH_LONG SM3_WORD
29#define HASH_CTX SM3_CTX
30#define HASH_CBLOCK SM3_CBLOCK
31#define HASH_UPDATE SM3_Update
32#define HASH_TRANSFORM SM3_Transform
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
46
47void SM3_block_data_order(SM3_CTX *c, const void *p, size_t num);
48void SM3_transform(SM3_CTX *c, const unsigned char *data);
49
50#include "md32_common.h"
51
52#define P0(X) (X ^ ROTATE(X, 9) ^ ROTATE(X, 17))
53#define P1(X) (X ^ ROTATE(X, 15) ^ ROTATE(X, 23))
54
55#define FF0(X, Y, Z) (X ^ Y ^ Z)
56#define GG0(X, Y, Z) (X ^ Y ^ Z)
57
58#define FF1(X, Y, Z) ((X & Y) | ((X | Y) & Z))
59#define GG1(X, Y, Z) ((Z ^ (X & (Y ^ Z))))
60
61#define EXPAND(W0, W7, W13, W3, W10) \
62 (P1(W0 ^ W7 ^ ROTATE(W13, 15)) ^ ROTATE(W3, 7) ^ W10)
63
64#define ROUND(A, B, C, D, E, F, G, H, TJ, Wi, Wj, FF, GG) do { \
65 const SM3_WORD A12 = ROTATE(A, 12); \
66 const SM3_WORD A12_SM = A12 + E + TJ; \
67 const SM3_WORD SS1 = ROTATE(A12_SM, 7); \
68 const SM3_WORD TT1 = FF(A, B, C) + D + (SS1 ^ A12) + (Wj); \
69 const SM3_WORD TT2 = GG(E, F, G) + H + SS1 + Wi; \
70 B = ROTATE(B, 9); \
71 D = TT1; \
72 F = ROTATE(F, 19); \
73 H = P0(TT2); \
74} while(0)
75
76#define R1(A, B, C, D, E, F, G, H, TJ, Wi, Wj) \
77 ROUND(A, B, C, D, E, F, G, H, TJ, Wi, Wj, FF0, GG0)
78
79#define R2(A, B, C, D, E, F, G, H, TJ, Wi, Wj) \
80 ROUND(A, B, C, D, E, F, G, H, TJ, Wi, Wj, FF1, GG1)
81
82#define SM3_A 0x7380166fUL
83#define SM3_B 0x4914b2b9UL
84#define SM3_C 0x172442d7UL
85#define SM3_D 0xda8a0600UL
86#define SM3_E 0xa96f30bcUL
87#define SM3_F 0x163138aaUL
88#define SM3_G 0xe38dee4dUL
89#define SM3_H 0xb0fb0e4eUL
90
23LCRYPTO_ALIAS(SM3_Update); 91LCRYPTO_ALIAS(SM3_Update);
24LCRYPTO_ALIAS(SM3_Final); 92LCRYPTO_ALIAS(SM3_Final);
25 93
diff --git a/src/lib/libcrypto/sm3/sm3_local.h b/src/lib/libcrypto/sm3/sm3_local.h
deleted file mode 100644
index a941e59c39..0000000000
--- a/src/lib/libcrypto/sm3/sm3_local.h
+++ /dev/null
@@ -1,85 +0,0 @@
1/* $OpenBSD: sm3_local.h,v 1.1 2022/11/26 16:08:54 tb Exp $ */
2/*
3 * Copyright (c) 2018, Ribose Inc
4 *
5 * Permission to use, copy, modify, and/or distribute this software for any
6 * purpose with or without fee is hereby granted, provided that the above
7 * copyright notice and this permission notice appear in all copies.
8 *
9 * THE SOFTWARE IS PROVIDED "AS IS" AND THE AUTHOR DISCLAIMS ALL WARRANTIES
10 * WITH REGARD TO THIS SOFTWARE INCLUDING ALL IMPLIED WARRANTIES OF
11 * MERCHANTABILITY AND FITNESS. IN NO EVENT SHALL THE AUTHOR BE LIABLE FOR
12 * ANY SPECIAL, DIRECT, INDIRECT, OR CONSEQUENTIAL DAMAGES OR ANY DAMAGES
13 * WHATSOEVER RESULTING FROM LOSS OF USE, DATA OR PROFITS, WHETHER IN AN
14 * ACTION OF CONTRACT, NEGLIGENCE OR OTHER TORTIOUS ACTION, ARISING OUT OF
15 * OR IN CONNECTION WITH THE USE OR PERFORMANCE OF THIS SOFTWARE.
16 */
17
18#include <string.h>
19
20#include <openssl/opensslconf.h>
21
22#define DATA_ORDER_IS_BIG_ENDIAN
23
24#define HASH_LONG SM3_WORD
25#define HASH_CTX SM3_CTX
26#define HASH_CBLOCK SM3_CBLOCK
27#define HASH_UPDATE SM3_Update
28#define HASH_TRANSFORM SM3_Transform
29#define HASH_FINAL SM3_Final
30#define HASH_MAKE_STRING(c, s) do { \
31 unsigned long ll; \
32 ll = (c)->A; HOST_l2c(ll, (s)); \
33 ll = (c)->B; HOST_l2c(ll, (s)); \
34 ll = (c)->C; HOST_l2c(ll, (s)); \
35 ll = (c)->D; HOST_l2c(ll, (s)); \
36 ll = (c)->E; HOST_l2c(ll, (s)); \
37 ll = (c)->F; HOST_l2c(ll, (s)); \
38 ll = (c)->G; HOST_l2c(ll, (s)); \
39 ll = (c)->H; HOST_l2c(ll, (s)); \
40} while (0)
41#define HASH_BLOCK_DATA_ORDER SM3_block_data_order
42
43void SM3_block_data_order(SM3_CTX *c, const void *p, size_t num);
44void SM3_transform(SM3_CTX *c, const unsigned char *data);
45
46#include "md32_common.h"
47
48#define P0(X) (X ^ ROTATE(X, 9) ^ ROTATE(X, 17))
49#define P1(X) (X ^ ROTATE(X, 15) ^ ROTATE(X, 23))
50
51#define FF0(X, Y, Z) (X ^ Y ^ Z)
52#define GG0(X, Y, Z) (X ^ Y ^ Z)
53
54#define FF1(X, Y, Z) ((X & Y) | ((X | Y) & Z))
55#define GG1(X, Y, Z) ((Z ^ (X & (Y ^ Z))))
56
57#define EXPAND(W0, W7, W13, W3, W10) \
58 (P1(W0 ^ W7 ^ ROTATE(W13, 15)) ^ ROTATE(W3, 7) ^ W10)
59
60#define ROUND(A, B, C, D, E, F, G, H, TJ, Wi, Wj, FF, GG) do { \
61 const SM3_WORD A12 = ROTATE(A, 12); \
62 const SM3_WORD A12_SM = A12 + E + TJ; \
63 const SM3_WORD SS1 = ROTATE(A12_SM, 7); \
64 const SM3_WORD TT1 = FF(A, B, C) + D + (SS1 ^ A12) + (Wj); \
65 const SM3_WORD TT2 = GG(E, F, G) + H + SS1 + Wi; \
66 B = ROTATE(B, 9); \
67 D = TT1; \
68 F = ROTATE(F, 19); \
69 H = P0(TT2); \
70} while(0)
71
72#define R1(A, B, C, D, E, F, G, H, TJ, Wi, Wj) \
73 ROUND(A, B, C, D, E, F, G, H, TJ, Wi, Wj, FF0, GG0)
74
75#define R2(A, B, C, D, E, F, G, H, TJ, Wi, Wj) \
76 ROUND(A, B, C, D, E, F, G, H, TJ, Wi, Wj, FF1, GG1)
77
78#define SM3_A 0x7380166fUL
79#define SM3_B 0x4914b2b9UL
80#define SM3_C 0x172442d7UL
81#define SM3_D 0xda8a0600UL
82#define SM3_E 0xa96f30bcUL
83#define SM3_F 0x163138aaUL
84#define SM3_G 0xe38dee4dUL
85#define SM3_H 0xb0fb0e4eUL