summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorjsing <>2025-01-22 09:42:27 +0000
committerjsing <>2025-01-22 09:42:27 +0000
commit6af57e6fd73f1bb07d22e1dbf5dbacdb67871349 (patch)
tree8ffe6d00f693fa815c02d1548833227428b124bb /src
parent96a1e660b2205dd364475572ad5939f41dbf268e (diff)
downloadopenbsd-6af57e6fd73f1bb07d22e1dbf5dbacdb67871349.tar.gz
openbsd-6af57e6fd73f1bb07d22e1dbf5dbacdb67871349.tar.bz2
openbsd-6af57e6fd73f1bb07d22e1dbf5dbacdb67871349.zip
Pull the family key and constant key tables out of SM4_set_key().
ok tb@
Diffstat (limited to 'src')
-rw-r--r--src/lib/libcrypto/sm4/sm4.c55
1 files changed, 27 insertions, 28 deletions
diff --git a/src/lib/libcrypto/sm4/sm4.c b/src/lib/libcrypto/sm4/sm4.c
index cf9d55634c..a6c072de3b 100644
--- a/src/lib/libcrypto/sm4/sm4.c
+++ b/src/lib/libcrypto/sm4/sm4.c
@@ -1,4 +1,4 @@
1/* $OpenBSD: sm4.c,v 1.3 2025/01/22 09:37:07 jsing Exp $ */ 1/* $OpenBSD: sm4.c,v 1.4 2025/01/22 09:42:27 jsing Exp $ */
2/* 2/*
3 * Copyright (c) 2017, 2019 Ribose Inc 3 * Copyright (c) 2017, 2019 Ribose Inc
4 * 4 *
@@ -142,45 +142,44 @@ SM4_T(uint32_t X)
142 crypto_rol_u32(SM4_SBOX_T[(uint8_t)X], 8); 142 crypto_rol_u32(SM4_SBOX_T[(uint8_t)X], 8);
143} 143}
144 144
145/*
146 * SM4 Family Key
147 */
148static const uint32_t SM4_FK[4] = {
149 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc,
150};
151
152/*
153 * SM4 Constant Key
154 */
155static const uint32_t SM4_CK[32] = {
156 0x00070E15, 0x1C232A31, 0x383F464D, 0x545B6269,
157 0x70777E85, 0x8C939AA1, 0xA8AFB6BD, 0xC4CBD2D9,
158 0xE0E7EEF5, 0xFC030A11, 0x181F262D, 0x343B4249,
159 0x50575E65, 0x6C737A81, 0x888F969D, 0xA4ABB2B9,
160 0xC0C7CED5, 0xDCE3EAF1, 0xF8FF060D, 0x141B2229,
161 0x30373E45, 0x4C535A61, 0x686F767D, 0x848B9299,
162 0xA0A7AEB5, 0xBCC3CAD1, 0xD8DFE6ED, 0xF4FB0209,
163 0x10171E25, 0x2C333A41, 0x484F565D, 0x646B7279,
164};
165
145int 166int
146SM4_set_key(const uint8_t *key, SM4_KEY *k) 167SM4_set_key(const uint8_t *key, SM4_KEY *k)
147{ 168{
148 struct sm4_key *ks = (struct sm4_key *)k; 169 struct sm4_key *ks = (struct sm4_key *)k;
149
150 /*
151 * Family Key
152 */
153 static const uint32_t FK[4] = {
154 0xa3b1bac6, 0x56aa3350, 0x677d9197, 0xb27022dc,
155 };
156
157 /*
158 * Constant Key
159 */
160 static const uint32_t CK[32] = {
161 0x00070E15, 0x1C232A31, 0x383F464D, 0x545B6269,
162 0x70777E85, 0x8C939AA1, 0xA8AFB6BD, 0xC4CBD2D9,
163 0xE0E7EEF5, 0xFC030A11, 0x181F262D, 0x343B4249,
164 0x50575E65, 0x6C737A81, 0x888F969D, 0xA4ABB2B9,
165 0xC0C7CED5, 0xDCE3EAF1, 0xF8FF060D, 0x141B2229,
166 0x30373E45, 0x4C535A61, 0x686F767D, 0x848B9299,
167 0xA0A7AEB5, 0xBCC3CAD1, 0xD8DFE6ED, 0xF4FB0209,
168 0x10171E25, 0x2C333A41, 0x484F565D, 0x646B7279,
169 };
170
171 uint32_t K[4]; 170 uint32_t K[4];
172 int i; 171 int i;
173 172
174 K[0] = load_u32_be(key, 0) ^ FK[0]; 173 K[0] = load_u32_be(key, 0) ^ SM4_FK[0];
175 K[1] = load_u32_be(key, 1) ^ FK[1]; 174 K[1] = load_u32_be(key, 1) ^ SM4_FK[1];
176 K[2] = load_u32_be(key, 2) ^ FK[2]; 175 K[2] = load_u32_be(key, 2) ^ SM4_FK[2];
177 K[3] = load_u32_be(key, 3) ^ FK[3]; 176 K[3] = load_u32_be(key, 3) ^ SM4_FK[3];
178 177
179 for (i = 0; i < SM4_KEY_SCHEDULE; i++) { 178 for (i = 0; i < SM4_KEY_SCHEDULE; i++) {
180 uint32_t X; 179 uint32_t X;
181 uint32_t t = 0; 180 uint32_t t = 0;
182 181
183 X = K[(i + 1) % 4] ^ K[(i + 2) % 4] ^ K[(i + 3) % 4] ^ CK[i]; 182 X = K[(i + 1) % 4] ^ K[(i + 2) % 4] ^ K[(i + 3) % 4] ^ SM4_CK[i];
184 183
185 t |= ((uint32_t)SM4_S[(uint8_t)(X >> 24)]) << 24; 184 t |= ((uint32_t)SM4_S[(uint8_t)(X >> 24)]) << 24;
186 t |= ((uint32_t)SM4_S[(uint8_t)(X >> 16)]) << 16; 185 t |= ((uint32_t)SM4_S[(uint8_t)(X >> 16)]) << 16;