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 | ||
