diff options
Diffstat (limited to 'src')
-rw-r--r-- | src/lib/libcrypto/sm3/sm3.c | 72 | ||||
-rw-r--r-- | src/lib/libcrypto/sm3/sm3_local.h | 85 |
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 | |||
47 | void SM3_block_data_order(SM3_CTX *c, const void *p, size_t num); | ||
48 | void 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 | |||
23 | LCRYPTO_ALIAS(SM3_Update); | 91 | LCRYPTO_ALIAS(SM3_Update); |
24 | LCRYPTO_ALIAS(SM3_Final); | 92 | LCRYPTO_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 | |||
43 | void SM3_block_data_order(SM3_CTX *c, const void *p, size_t num); | ||
44 | void 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 | ||