Skip to content

Commit 4bab277

Browse files
committed
Update sm2 and zuc
1 parent 3dfae96 commit 4bab277

14 files changed

Lines changed: 8517 additions & 5415 deletions

File tree

.gitignore

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -209,7 +209,6 @@ apps/gmca/.ca
209209
# engines
210210
/engines/e_skf*
211211
/engines/e_sdf*
212-
/engines/e_gmi*
213212
/engines/sdf
214213
/engines/skf
215214

README.md

Lines changed: 9 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -125,8 +125,8 @@ $ gmssl sms4 -d -in README.sms4
125125
ZUC encryption and decryption:
126126

127127
```sh
128-
$ gmssl zuc -in README.md -out README.sms4
129-
$ gmssl zuc -d -in README.sms4
128+
$ gmssl zuc -in README.md -out README.zuc
129+
$ gmssl zuc -d -in README.zuc
130130
```
131131

132132
SM2 private key generation:
@@ -157,6 +157,13 @@ $ echo "Top Secret" | gmssl sm2utl -encrypt -pubin -inkey ekey.pem -out cipherte
157157
$ gmssl sm2utl -decrypt -inkey dkey.pem -in ciphertext.sm2
158158
```
159159

160+
Identity-based encryption with SM9
161+
162+
```
163+
$ echo "Message" | gmssl pkeyutl -encrypt -pubin -inkey params.pem -pkeyopt id:Alice -out ciphertext.der
164+
$ gmssl pkeyutl -decrypt -inkey sm9key.pem -in ciphertext.der
165+
```
166+
160167
Self-signed SM2 certificate generation:
161168

162169
```sh

apps/progs.h

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -306,6 +306,9 @@ static FUNCTION functions[] = {
306306
#ifndef OPENSSL_NO_SMS4
307307
{ FT_cipher, "sms4-cfb", enc_main, enc_options },
308308
#endif
309+
#ifndef OPENSSL_NO_ZUC
310+
{ FT_cipher, "zuc", enc_main, enc_options },
311+
#endif
309312
#ifndef OPENSSL_NO_AES
310313
{ FT_cipher, "aes-128-cbc", enc_main, enc_options },
311314
#endif

apps/progs.pl

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -118,7 +118,7 @@
118118
cast5 => "cast",
119119
);
120120
foreach my $cmd (
121-
"sms4", "sms4-cbc", "sms4-ecb", "sms4-ofb", "sms4-cfb",
121+
"sms4", "sms4-cbc", "sms4-ecb", "sms4-ofb", "sms4-cfb", "zuc",
122122
"aes-128-cbc", "aes-128-ecb",
123123
"aes-192-cbc", "aes-192-ecb",
124124
"aes-256-cbc", "aes-256-ecb",

apps/speed.c

Lines changed: 39 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -122,6 +122,9 @@
122122
#ifndef OPENSSL_NO_SMS4
123123
# include <openssl/sms4.h>
124124
#endif
125+
#ifndef OPENSSL_NO_ZUC
126+
# include <openssl/zuc.h>
127+
#endif
125128
#ifndef OPENSSL_NO_SM9
126129
# include <openssl/sm9.h>
127130
#endif
@@ -145,7 +148,7 @@
145148
#define BUFSIZE (1024*16+1)
146149
#define MAX_MISALIGNMENT 63
147150

148-
#define ALGOR_NUM 32
151+
#define ALGOR_NUM 33
149152
#define SIZE_NUM 6
150153
#define PRIME_NUM 3
151154
#define RSA_NUM 7
@@ -294,7 +297,7 @@ static const char *names[ALGOR_NUM] = {
294297
"camellia-128 cbc", "camellia-192 cbc", "camellia-256 cbc",
295298
"evp", "sha256", "sha512", "whirlpool",
296299
"aes-128 ige", "aes-192 ige", "aes-256 ige", "ghash",
297-
"sm3", "sms4 cbc"
300+
"sm3", "sms4 cbc", "zuc"
298301
};
299302

300303
static double results[ALGOR_NUM][SIZE_NUM];
@@ -479,6 +482,7 @@ OPTIONS speed_options[] = {
479482
#define D_GHASH 29
480483
#define D_SM3 30
481484
#define D_CBC_SMS4 31
485+
#define D_ZUC 32
482486
static OPT_PAIR doit_choices[] = {
483487
#ifndef OPENSSL_NO_MD2
484488
{"md2", D_MD2},
@@ -554,6 +558,9 @@ static OPT_PAIR doit_choices[] = {
554558
#ifndef OPENSSL_NO_SMS4
555559
{"sms4-cbc", D_CBC_SMS4},
556560
{"sms4", D_CBC_SMS4},
561+
#endif
562+
#ifndef OPENSSL_NO_ZUC
563+
{"zuc", D_ZUC},
557564
#endif
558565
{NULL}
559566
};
@@ -1188,10 +1195,11 @@ static int SM2_encrypt_loop(void *args)
11881195
size_t *sm2cipherlen = &tempargs->cipherlen;
11891196
int ret, count;
11901197
for (count = 0; COND(sm2enc_c[testnum][0]); count++) {
1191-
ret = SM2_encrypt(NID_sm3, buf, 32, sm2cipher,
1198+
*sm2cipherlen = BUFSIZE;
1199+
ret = SM2_encrypt(NID_sm3, buf, 32, sm2cipher,
11921200
sm2cipherlen, sm2[testnum]);
11931201
if (ret == 0) {
1194-
BIO_printf(bio_err, "SM2 sign failure\n");
1202+
BIO_printf(bio_err, "SM2 encrypt failure\n");
11951203
ERR_print_errors(bio_err);
11961204
count = -1;
11971205
break;
@@ -1494,6 +1502,9 @@ int speed_main(int argc, char **argv)
14941502
#ifndef OPENSSL_NO_SMS4
14951503
sms4_key_t sms4_ks;
14961504
#endif
1505+
#ifndef OPENSSL_NO_ZUC
1506+
ZUC_KEY zuc_ks;
1507+
#endif
14971508
#ifndef OPENSSL_NO_BF
14981509
BF_KEY bf_ks;
14991510
#endif
@@ -1985,6 +1996,9 @@ int speed_main(int argc, char **argv)
19851996
#ifndef OPENSSL_NO_SMS4
19861997
sms4_set_encrypt_key(&sms4_ks, key16);
19871998
#endif
1999+
#ifndef OPENSSL_NO_ZUC
2000+
ZUC_set_key(&zuc_ks, key16, iv);
2001+
#endif
19882002
#ifndef OPENSSL_NO_RC4
19892003
RC4_set_key(&rc4_ks, 16, key16);
19902004
#endif
@@ -2045,6 +2059,7 @@ int speed_main(int argc, char **argv)
20452059
c[D_GHASH][0] = count;
20462060
c[D_SM3][0] = count;
20472061
c[D_CBC_SMS4][0] = count;
2062+
c[D_ZUC][0] = count;
20482063

20492064
for (i = 1; i < SIZE_NUM; i++) {
20502065
long l0, l1;
@@ -2086,6 +2101,7 @@ int speed_main(int argc, char **argv)
20862101
c[D_IGE_192_AES][i] = c[D_IGE_192_AES][i - 1] * l0 / l1;
20872102
c[D_IGE_256_AES][i] = c[D_IGE_256_AES][i - 1] * l0 / l1;
20882103
c[D_CBC_SMS4][i] = c[D_CBC_SMS4][i - 1] * l0 / l1;
2104+
c[D_ZUC][i] = c[D_ZUC][i - 1] * l0 / l1;
20892105
}
20902106

20912107
# ifndef OPENSSL_NO_RSA
@@ -2588,6 +2604,24 @@ int speed_main(int argc, char **argv)
25882604
}
25892605
}
25902606
#endif
2607+
#ifndef OPENSSL_NO_ZUC
2608+
if (doit[D_ZUC]) {
2609+
if (async_jobs > 0) {
2610+
BIO_printf(bio_err, "Async mode is not supported with %s\n",
2611+
names[D_ZUC]);
2612+
doit[D_ZUC] = 0;
2613+
}
2614+
for (testnum = 0; testnum < SIZE_NUM && async_init == 0; testnum++) {
2615+
print_message(names[D_ZUC], c[D_ZUC][testnum], lengths[testnum]);
2616+
Time_F(START);
2617+
for (count = 0, run = 1; COND(c[D_ZUC][testnum]); count++)
2618+
ZUC_generate_keystream(&zuc_ks, lengths[testnum]/4,
2619+
(unsigned int *)loopargs[0].buf);
2620+
d = Time_F(STOP);
2621+
print_result(D_ZUC, testnum, count, d);
2622+
}
2623+
}
2624+
#endif
25912625
#ifndef OPENSSL_NO_RC2
25922626
if (doit[D_CBC_RC2]) {
25932627
if (async_jobs > 0) {
@@ -3160,6 +3194,7 @@ int speed_main(int argc, char **argv)
31603194
EC_KEY_precompute_mult(loopargs[i].sm2[testnum], NULL);
31613195
/* Perform SM2 encryption test */
31623196
EC_KEY_generate_key(loopargs[i].sm2[testnum]);
3197+
loopargs[i].cipherlen = BUFSIZE;
31633198
st = SM2_encrypt(NID_sm3, loopargs[i].buf, 32, loopargs[i].buf2,
31643199
&loopargs[i].cipherlen, loopargs[i].sm2[testnum]);
31653200
if (st == 0)

0 commit comments

Comments
 (0)