Skip to content

Commit 6c16865

Browse files
GonsixShingo Morimoto
andauthored
Add Non-blocking mode (#3)
* Add non-blocking mode for ECC Signature Example * Add non-blocking mode for RSA with TFM * Add ecc_vfy_only and ecc_vfy_only_nonblock - Add ecc_vfy_only to separate the function Verifying only from the ecc_sign_verify that signing and verifying the signatures. - Rename rsa_buffer to rsa_sign_verify - Add rsa_vfy_only_nonblock * Revise the README --------- Co-authored-by: Shingo Morimoto <shingo@wolfssl.com>
1 parent ce00346 commit 6c16865

29 files changed

+1979
-27
lines changed

embedded/signature/README.md

Lines changed: 7 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,9 +4,13 @@ This directory includes the following examples under the sub-directories.Each ha
44
55
|Scheme|Directory|Description|
66
|---|---|---|
7-
|RSA|rsa_vfy_only |verify signature|
8-
||rsa_buffer|sign/verify signature |
9-
|ECDSA|signature/ecc-sign-verify/|sign msg and verify signature|
7+
|RSA|rsa_sign_verify|sign/verify signature |
8+
||rsa_vfy_only |verify signature|
9+
||rsa_vfy_only_nonblock|verify signature with non-blocking|
10+
|ECDSA|ecc_sign_verify/|sign msg and verify signature|
11+
||ecc_vfy_only|verify Signature|
12+
||ecc_vfy_only_nonblock|verify signature with non-blocking|
13+
1014

1115
You can specify a target function of Simple example, Benchemark or Memory track program.It also has options for optimized code for MCU architectures such as Intel x86, ARM64 or a generic code by default, as well as Math library of Single Precision or TFM.
1216

embedded/signature/ecc-sign-verify/Makefile renamed to embedded/signature/ecc_sign_verify/Makefile

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
# The path to the wolfssl directory must be set correctly for your environment.
12
WOLFROOT = ../../../../wolfssl
23

34
CFLAGS = $(EX_CFLAGS) -DWOLFSSL_USER_SETTINGS -I. -I$(WOLFROOT) -Os
@@ -61,7 +62,7 @@ endif
6162
all : ecc_sign_verify bench mem
6263

6364
ecc_sign_verify: clean $(OBJ)
64-
$(CC) $(CFLAGS) -o ecc_sign_verify ecc_sign_verify.c $(OBJ) -lpthread
65+
$(CC) $(CFLAGS) -o ecc_sign_verify ecc_sign_verify.c $(OBJ)
6566

6667
bench: clean $(OBJ)
6768
$(CC) $(CFLAGS) -DBENCHMARK -o ecc_sign_verify_bench ecc_sign_verify.c $(OBJ) -lpthread

embedded/signature/ecc-sign-verify/README.md renamed to embedded/signature/ecc_sign_verify/README.md

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -119,9 +119,9 @@ Successfully verified signature w/ ecc key size 512!
119119
Key size is 521, byteField = 66
120120
Successfully verified signature w/ ecc key size 521!
121121
122-
total Allocs = 522
123-
total Deallocs = 522
124-
total Bytes = 243047
122+
total Allocs = 422
123+
total Deallocs = 422
124+
total Bytes = 195047
125125
peak Bytes = 5557
126126
current Bytes = 0
127127
stack used = 14448

embedded/signature/ecc-sign-verify/ecc_sign_verify.c renamed to embedded/signature/ecc_sign_verify/ecc_sign_verify.c

Lines changed: 6 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,6 @@
11
/* ecc_sign_verify.c
22
*
3-
* Copyright (C) 2006-2020 wolfSSL Inc.
3+
* Copyright (C) 2006-2023 wolfSSL Inc.
44
*
55
* This file is part of wolfSSL. (formerly known as CyaSSL)
66
*
@@ -117,6 +117,7 @@ int do_sig_ver_test(int eccKeySz)
117117
WC_RNG rng;
118118
int verified = 0;
119119

120+
120121
/* Variables for Benchmark */
121122
double start_time, total_time;
122123
#ifndef BENCH_TIME_SEC
@@ -158,9 +159,6 @@ double start_time, total_time;
158159
ret = wc_InitRng(&rng);
159160
CHECK_RET(ret, 0, key_done, "wc_InitRng()");
160161

161-
ret = wc_ecc_make_key(&rng, byteField, &key);
162-
CHECK_RET(ret, 0, rng_done, "wc_ecc_make_key()");
163-
164162
#ifdef BENCHMARK
165163
count = 0;
166164
start_time = current_time(1);
@@ -172,17 +170,17 @@ double start_time, total_time;
172170

173171
ret = wc_ecc_make_key(&rng, byteField, &key);
174172
CHECK_RET(ret, 0, rng_done, "wc_ecc_make_key()");
175-
// printf("%s\n",hash);
176173
ret = wc_ecc_sign_hash(hash, sizeof(hash), sig, &maxSigSz, &rng, &key);
177174
CHECK_RET(ret, 0, rng_done, "wc_ecc_sign_hash()");
178175

179176
#ifdef SHOW_SIGS_IN_EXAMPLE
180177
hexdump(sig, maxSigSz, 16);
181178
#endif
182-
183179

184-
ret = wc_ecc_verify_hash(sig, maxSigSz, hash, sizeof(hash), &verified,
185-
&key);
180+
ret = wc_ecc_verify_hash(sig, maxSigSz, hash, sizeof(hash),
181+
&verified, &key);
182+
183+
186184
CHECK_RET(ret, 0, rng_done, "wc_ecc_verify_hash()");
187185
CHECK_RET(verified, 1, rng_done, "verification check");
188186
verified = 0;
Lines changed: 77 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,77 @@
1+
# The path to the wolfssl directory must be set correctly for your environment.
2+
WOLFROOT = ../../../../wolfssl
3+
4+
CFLAGS = $(EX_CFLAGS) -DWOLFSSL_USER_SETTINGS -I. -I$(WOLFROOT) -Os
5+
ASFLAGS = -DWOLFSSL_USER_SETTINGS -I. -I$(WOLFROOT)
6+
7+
OBJ=\
8+
$(WOLFROOT)/wolfcrypt/src/ecc.o\
9+
$(WOLFROOT)/wolfcrypt/src/sha256.o\
10+
$(WOLFROOT)/wolfcrypt/src/hash.o\
11+
$(WOLFROOT)/wolfcrypt/src/random.o\
12+
$(WOLFROOT)/wolfcrypt/src/asn.o\
13+
$(WOLFROOT)/wolfcrypt/src/wc_port.o\
14+
$(WOLFROOT)/wolfcrypt/src/coding.o\
15+
$(WOLFROOT)/wolfcrypt/src/memory.o\
16+
$(WOLFROOT)/wolfcrypt/src/wolfmath.o\
17+
18+
OBJ_SP_C32 := \
19+
$(WOLFROOT)/wolfcrypt/src/sp_int.o\
20+
$(WOLFROOT)/wolfcrypt/src/sp_c32.o\
21+
22+
OBJ_SP_C64 := \
23+
$(WOLFROOT)/wolfcrypt/src/sp_int.o\
24+
$(WOLFROOT)/wolfcrypt/src/sp_c64.o\
25+
26+
OBJ_SP_ARM64 := \
27+
$(WOLFROOT)/wolfcrypt/src/sp_int.o\
28+
$(WOLFROOT)/wolfcrypt/src/sp_arm64.o\
29+
30+
OBJ_SP_X86_64 := \
31+
$(WOLFROOT)/wolfcrypt/src/sp_int.o\
32+
$(WOLFROOT)/wolfcrypt/src/cpuid.o\
33+
$(WOLFROOT)/wolfcrypt/src/sp_x86_64.o\
34+
$(WOLFROOT)/wolfcrypt/src/sp_x86_64_asm.o\
35+
36+
OBJ_TFM := \
37+
$(WOLFROOT)/wolfcrypt/src/tfm.o\
38+
39+
.PHONY: all clean mem size bench
40+
41+
ifeq ($(math) $(arch),sp x64)
42+
ASFLAGS+= -DSP_X86_64_FLAG
43+
CFLAGS += -DSP_X86_64_FLAG
44+
OBJ += $(OBJ_SP_X86_64)
45+
else ifeq ($(math) $(arch),sp arm64)
46+
CFLAGS += -DSP_ARM64_FLAG
47+
OBJ += $(OBJ_SP_ARM64)
48+
else ifeq ($(math) $(arch),sp c64)
49+
CFLAGS += -DSP_C64_FLAG
50+
OBJ += $(OBJ_SP_C64)
51+
else ifeq ($(math) $(arch),sp c32)
52+
CFLAGS += -DSP_C32_FLAG
53+
OBJ += $(OBJ_SP_C32)
54+
else ifeq ($(math), tfm)
55+
CFLAGS += -DTFM_FLAG
56+
OBJ += $(OBJ_TFM)
57+
else
58+
CFLAGS += -DSP_C64_FLAG
59+
OBJ += $(OBJ_SP_C64)
60+
endif
61+
62+
all : ecc_verify bench mem
63+
64+
65+
ecc_verify: clean $(OBJ)
66+
$(CC) $(CFLAGS) -o ecc_verify ecc_verify.c $(OBJ)
67+
68+
bench: clean $(OBJ)
69+
$(CC) $(CFLAGS) -DBENCHMARK -o ecc_verify_bench ecc_verify.c $(OBJ)
70+
71+
mem: clean $(OBJ)
72+
$(CC) $(CFLAGS) -DDEBUG_MEMORY -o ecc_verify_mem ecc_verify.c $(OBJ) -lpthread
73+
clean:
74+
rm -f ecc_verify ecc_verify_bench ecc_verify_mem $(WOLFROOT)/wolfcrypt/src/*.o
75+
76+
size :
77+
size $(OBJ) ecc_verify
Lines changed: 150 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,150 @@
1+
unsigned char ecc_PublicKey_112[] = {
2+
0x04, 0x67, 0xa6, 0xdc, 0x12, 0x25, 0xdb, 0x81,
3+
0x5c, 0x67, 0x7c, 0xbf, 0x55, 0x3b, 0xd9, 0x51,
4+
0xb1, 0x61, 0xb4, 0x88, 0xb8, 0x6c, 0xa5, 0x4a,
5+
0xb0, 0xe8, 0x79, 0x15, 0x4a, 0xfc, 0x6f, 0x01,
6+
0x6b, 0xc0, 0xc5, 0xdd, 0xc2, 0xe3, 0x59, 0xda,
7+
0x18, 0x82, 0x46, 0xa4, 0x32, 0xb5, 0x6d, 0x3b,
8+
0xd1, 0x91, 0xcc, 0x19, 0xb7, 0xab, 0x8d, 0x99,
9+
0xad,
10+
};
11+
12+
unsigned char ecc_PublicKey_128[] = {
13+
0x04, 0x0f, 0x31, 0xea, 0x92, 0x1d, 0x84, 0xcf,
14+
0xce, 0xe1, 0xe5, 0x0b, 0x13, 0xda, 0xd3, 0xb2,
15+
0xb0, 0x57, 0x0c, 0x02, 0xdb, 0x50, 0xaa, 0xaa,
16+
0x65, 0x47, 0x6c, 0x2a, 0x41, 0xd4, 0x01, 0x72,
17+
0xdb, 0xd3, 0xcf, 0x42, 0x81, 0x7c, 0x05, 0x67,
18+
0x6e, 0x2a, 0x0a, 0x03, 0x0f, 0x91, 0x2b, 0x3b,
19+
0xe3, 0x48, 0x87, 0xb3, 0xb3, 0x70, 0x58, 0x17,
20+
0xed,
21+
};
22+
23+
unsigned char ecc_PublicKey_160[] = {
24+
0x04, 0xf8, 0x93, 0xf7, 0xf7, 0x1f, 0xc6, 0x56,
25+
0x8c, 0x40, 0x11, 0x14, 0x74, 0xf5, 0x98, 0xa8,
26+
0x12, 0xc3, 0xba, 0x06, 0x9e, 0x6d, 0xdc, 0x1b,
27+
0xd3, 0x94, 0x9c, 0xf0, 0xc1, 0x99, 0x4e, 0x83,
28+
0xe9, 0x42, 0x53, 0xcd, 0x8d, 0x26, 0x5a, 0x01,
29+
0x4f, 0x82, 0x06, 0x42, 0x83, 0x65, 0x3c, 0x9e,
30+
0xd5, 0x2d, 0x73, 0x52, 0xbc, 0x49, 0x1b, 0x99,
31+
0x5c,
32+
};
33+
34+
unsigned char ecc_PublicKey_192[] = {
35+
0x04, 0xf7, 0xea, 0x10, 0xc6, 0x43, 0xba, 0xbb,
36+
0x21, 0x14, 0x93, 0x11, 0xfe, 0x1a, 0x68, 0x59,
37+
0x23, 0x71, 0x52, 0xde, 0x47, 0x08, 0x04, 0xd1,
38+
0x77, 0xe4, 0x6f, 0x1f, 0x48, 0x4e, 0x8b, 0x92,
39+
0x1a, 0xb9, 0xe9, 0x61, 0xf4, 0x3c, 0x1b, 0xcd,
40+
0xe7, 0xaf, 0xc8, 0x59, 0x64, 0x9f, 0x80, 0x7e,
41+
0x4e, 0x72, 0x98, 0x15, 0x18, 0x60, 0x01, 0x77,
42+
0x8d,
43+
};
44+
45+
unsigned char ecc_PublicKey_224[] = {
46+
0x04, 0xf1, 0x25, 0xec, 0xac, 0x14, 0x47, 0x35,
47+
0xcf, 0x32, 0x1a, 0xd2, 0x31, 0x60, 0xf6, 0x6b,
48+
0xb6, 0x8c, 0x02, 0xd1, 0x46, 0xfa, 0xa6, 0xe3,
49+
0xd9, 0xfd, 0x96, 0xbe, 0x44, 0x79, 0xc8, 0xbb,
50+
0x0f, 0x41, 0xc6, 0x3d, 0x52, 0xd2, 0x8b, 0xc7,
51+
0xe1, 0xfb, 0x03, 0x01, 0x07, 0x11, 0xaa, 0xba,
52+
0xf9, 0x57, 0x90, 0x5f, 0xc2, 0xaf, 0x20, 0xe2,
53+
0xd7,
54+
};
55+
56+
unsigned char ecc_PublicKey_239[] = {
57+
0x04, 0x01, 0xc2, 0x14, 0xbf, 0x8c, 0x36, 0x9c,
58+
0x9d, 0xca, 0xb1, 0x20, 0xc8, 0x36, 0x45, 0x37,
59+
0x79, 0x60, 0x97, 0xe9, 0x57, 0xc3, 0x1e, 0x86,
60+
0xd1, 0x15, 0xc1, 0x57, 0xf1, 0x78, 0x91, 0x4e,
61+
0x69, 0x8f, 0xee, 0xf3, 0xb2, 0xcd, 0xae, 0x00,
62+
0x4e, 0x67, 0x47, 0x61, 0xab, 0xdd, 0x04, 0x79,
63+
0x0b, 0xf9, 0xeb, 0x4b, 0x70, 0xa3, 0x22, 0xa0,
64+
0xce, 0xb3, 0xc2, 0xd3, 0xd2,
65+
};
66+
67+
unsigned char ecc_PublicKey_256[] = {
68+
0x04, 0x80, 0xc7, 0xb7, 0x97, 0xe3, 0xc6, 0x63,
69+
0x34, 0xcc, 0x72, 0x19, 0xb0, 0x3f, 0x4b, 0xe0,
70+
0x68, 0x3e, 0xba, 0x8c, 0x0e, 0x60, 0xb0, 0xef,
71+
0xfb, 0x6a, 0xb5, 0x5d, 0xaa, 0xaa, 0x27, 0x3b,
72+
0x5d, 0x4c, 0x2d, 0x58, 0x0f, 0x96, 0x75, 0xe0,
73+
0xe7, 0x5a, 0xab, 0xa0, 0xe9, 0x6a, 0x6a, 0x5f,
74+
0xa7, 0xd7, 0x5d, 0xb1, 0x1a, 0x8b, 0x3b, 0x74,
75+
0xcd, 0x75, 0x51, 0xa6, 0x89, 0xd4, 0x3d, 0x00,
76+
0xeb,
77+
};
78+
79+
unsigned char ecc_PublicKey_320[] = {
80+
0x04, 0x5b, 0xf1, 0x32, 0x17, 0xf3, 0x63, 0x82,
81+
0xfc, 0x1c, 0x93, 0xca, 0x30, 0x7d, 0x22, 0xf6,
82+
0x97, 0xc9, 0x2d, 0x54, 0x35, 0x11, 0x77, 0x9c,
83+
0x3f, 0x44, 0x37, 0x9f, 0x8b, 0x82, 0x8d, 0x50,
84+
0x68, 0x2d, 0x0d, 0x1a, 0x19, 0x6d, 0xfc, 0xac,
85+
0xde, 0xc1, 0x81, 0x13, 0x90, 0x31, 0xcc, 0x0f,
86+
0x00, 0xa2, 0xf6, 0x7b, 0xc3, 0x51, 0x05, 0x46,
87+
0x67, 0xd3, 0x91, 0xb7, 0xaa, 0xdd, 0xb9, 0x87,
88+
0x03, 0x4e, 0x21, 0xd0, 0xa0, 0xfa, 0x31, 0x93,
89+
0x04, 0xc8, 0xea, 0xc5, 0x71, 0x4b, 0x0f, 0x98,
90+
0x4d, 0x16, 0x69, 0xe9, 0xc7, 0xda, 0xff, 0xfa,
91+
0xe1, 0xf0, 0xa5, 0xdd, 0x36, 0xf2, 0x04, 0x62,
92+
0xa6,
93+
};
94+
95+
unsigned char ecc_PublicKey_384[] = {
96+
0x04, 0x51, 0xb3, 0x72, 0xda, 0xd2, 0xd7, 0x81,
97+
0x53, 0xe3, 0x4e, 0xa1, 0x27, 0x9a, 0x91, 0x42,
98+
0x8a, 0x29, 0x62, 0x7c, 0x8f, 0x49, 0x47, 0x47,
99+
0x4c, 0x0e, 0x23, 0x09, 0xf5, 0x13, 0x56, 0x08,
100+
0x2d, 0x54, 0xc3, 0xac, 0x05, 0xc4, 0x1f, 0x16,
101+
0x27, 0xd0, 0x4c, 0x3b, 0xed, 0xa0, 0x74, 0x62,
102+
0xe3, 0x1b, 0xa3, 0xd5, 0xf2, 0xf2, 0x5d, 0x6a,
103+
0x87, 0xa2, 0xf4, 0x09, 0x9a, 0x87, 0xee, 0xab,
104+
0x20, 0xe7, 0x42, 0xd2, 0x6d, 0x1b, 0x1c, 0x75,
105+
0x69, 0x46, 0x2e, 0x8c, 0x00, 0xe5, 0xd7, 0xc5,
106+
0xc4, 0xfb, 0x46, 0xe7, 0xf8, 0xc1, 0x25, 0x7c,
107+
0x94, 0x30, 0xd0, 0xd5, 0xdb, 0x8d, 0xe3, 0x15,
108+
0xc8,
109+
};
110+
111+
unsigned char ecc_PublicKey_512[] = {
112+
0x04, 0x01, 0x5c, 0x37, 0xe0, 0x37, 0x3b, 0xad,
113+
0x8a, 0xfe, 0x3c, 0x52, 0x5d, 0xe7, 0xab, 0x77,
114+
0x39, 0x67, 0x94, 0x6c, 0x2a, 0x3f, 0xee, 0x95,
115+
0x19, 0x8d, 0xcc, 0xdc, 0xad, 0x62, 0x50, 0x97,
116+
0x79, 0xeb, 0xde, 0x70, 0xed, 0x2d, 0x44, 0x8f,
117+
0xcf, 0x1d, 0x49, 0x46, 0x32, 0x96, 0xe3, 0xb6,
118+
0xc5, 0x61, 0x4c, 0xfd, 0xcb, 0x65, 0x1f, 0x04,
119+
0x97, 0x39, 0x54, 0x46, 0xde, 0x54, 0x2f, 0x0a,
120+
0x51, 0xd5, 0xe6, 0x01, 0x1e, 0x78, 0x20, 0x15,
121+
0x1c, 0xb3, 0x6f, 0x14, 0x8f, 0x2f, 0x95, 0x9c,
122+
0x40, 0xea, 0x12, 0x52, 0x5a, 0xce, 0x7c, 0x43,
123+
0x28, 0x22, 0x31, 0x00, 0xcb, 0xbf, 0x86, 0x56,
124+
0xdc, 0x72, 0xa4, 0x49, 0x75, 0x80, 0xa4, 0x17,
125+
0xde, 0xa6, 0xf8, 0x3b, 0x39, 0x88, 0xd0, 0x8b,
126+
0x4e, 0x44, 0x69, 0x39, 0x7a, 0xcc, 0xcc, 0xc7,
127+
0x15, 0x1e, 0x6c, 0x76, 0xf2, 0x8d, 0x1b, 0x6c,
128+
0x64, 0x0a, 0x4c, 0x29, 0x35,
129+
};
130+
131+
132+
unsigned char ecc_PublicKey_521[] = {
133+
0x04, 0x00, 0xf9, 0x56, 0xfb, 0x6c, 0x5a, 0x3d,
134+
0xc4, 0xf3, 0xb8, 0x07, 0x19, 0x2f, 0x93, 0x07,
135+
0x3c, 0x30, 0x7b, 0xd9, 0x9c, 0x11, 0xe8, 0xda,
136+
0xbe, 0x1b, 0x1b, 0xa3, 0xf2, 0x81, 0xf9, 0xd0,
137+
0x47, 0x0d, 0x06, 0xa4, 0x47, 0xa0, 0x8b, 0xca,
138+
0x0f, 0x0a, 0x3a, 0xda, 0x68, 0x38, 0x67, 0x5d,
139+
0x11, 0x77, 0xf8, 0x2f, 0x28, 0x0f, 0x31, 0xe5,
140+
0x26, 0xf5, 0x88, 0x2a, 0x79, 0x5f, 0xce, 0x55,
141+
0xe9, 0x71, 0x4c, 0x00, 0x9e, 0xfc, 0x7d, 0x00,
142+
0x04, 0xb8, 0x89, 0x04, 0xfc, 0x06, 0x38, 0x3f,
143+
0x9f, 0x0a, 0x80, 0x7f, 0x6b, 0x4c, 0xd2, 0x61,
144+
0x69, 0x00, 0x7f, 0x9c, 0x7c, 0x9b, 0xab, 0xa6,
145+
0x9c, 0x71, 0xa9, 0x15, 0x63, 0x4a, 0x03, 0xe8,
146+
0x96, 0xbb, 0x79, 0x6a, 0x50, 0xa6, 0xd0, 0xdf,
147+
0x66, 0xf5, 0xc8, 0xfa, 0x22, 0x94, 0xe0, 0x72,
148+
0xa6, 0x15, 0x94, 0x1e, 0x3b, 0x47, 0x36, 0x8e,
149+
0xcb, 0x10, 0x15, 0x27, 0x5b,
150+
};

0 commit comments

Comments
 (0)