Skip to content

Commit 7361332

Browse files
Merge pull request #6616 from SparkiDev/sm2_sp_not_avail
ECC and SM2: SP implementation not available yet
2 parents a96983e + 377417e commit 7361332

2 files changed

Lines changed: 44 additions & 2 deletions

File tree

src/ssl.c

Lines changed: 10 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10298,7 +10298,11 @@ int wolfSSL_CTX_SetTmpEC_DHE_Sz(WOLFSSL_CTX* ctx, word16 sz)
1029810298
}
1029910299

1030010300
/* check size */
10301-
if (sz < ECC_MINSIZE || sz > ECC_MAXSIZE)
10301+
#if ECC_MIN_KEY_SZ > 0
10302+
if (sz < ECC_MINSIZE)
10303+
return BAD_FUNC_ARG;
10304+
#endif
10305+
if (sz > ECC_MAXSIZE)
1030210306
return BAD_FUNC_ARG;
1030310307

1030410308
ctx->eccTempKeySz = sz;
@@ -10314,7 +10318,11 @@ int wolfSSL_SetTmpEC_DHE_Sz(WOLFSSL* ssl, word16 sz)
1031410318
return BAD_FUNC_ARG;
1031510319

1031610320
/* check size */
10317-
if (sz < ECC_MINSIZE || sz > ECC_MAXSIZE)
10321+
#if ECC_MIN_KEY_SZ > 0
10322+
if (sz < ECC_MINSIZE)
10323+
return BAD_FUNC_ARG;
10324+
#endif
10325+
if (sz > ECC_MAXSIZE)
1031810326
return BAD_FUNC_ARG;
1031910327

1032010328
ssl->eccTempKeySz = sz;

wolfcrypt/src/ecc.c

Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2154,12 +2154,14 @@ static int _ecc_projective_add_point(ecc_point* P, ecc_point* Q, ecc_point* R,
21542154

21552155
#ifndef WOLFSSL_SP_NO_256
21562156
if (modBits == 256) {
2157+
#ifdef SM2_SP_IMPL_AVAILABLE
21572158
#ifdef WOLFSSL_SM2
21582159
if (!mp_is_bit_set(modulus, 224)) {
21592160
return sp_ecc_proj_add_point_sm2_256(P->x, P->y, P->z, Q->x, Q->y,
21602161
Q->z, R->x, R->y, R->z);
21612162
}
21622163
#endif
2164+
#endif
21632165
return sp_ecc_proj_add_point_256(P->x, P->y, P->z, Q->x, Q->y, Q->z,
21642166
R->x, R->y, R->z);
21652167
}
@@ -2524,12 +2526,14 @@ static int _ecc_projective_dbl_point(ecc_point *P, ecc_point *R, mp_int* a,
25242526

25252527
#ifndef WOLFSSL_SP_NO_256
25262528
if (modBits == 256) {
2529+
#ifdef SM2_SP_IMPL_AVAILABLE
25272530
#ifdef WOLFSSL_SM2
25282531
if (!mp_is_bit_set(modulus, 224)) {
25292532
return sp_ecc_proj_dbl_point_sm2_256(P->x, P->y, P->z, R->x, R->y,
25302533
R->z);
25312534
}
25322535
#endif
2536+
#endif
25332537
return sp_ecc_proj_dbl_point_256(P->x, P->y, P->z, R->x, R->y, R->z);
25342538
}
25352539
#endif
@@ -2782,11 +2786,13 @@ int ecc_map_ex(ecc_point* P, mp_int* modulus, mp_digit mp, int ct)
27822786

27832787
#ifndef WOLFSSL_SP_NO_256
27842788
if (mp_count_bits(modulus) == 256) {
2789+
#ifdef SM2_SP_IMPL_AVAILABLE
27852790
#ifdef WOLFSSL_SM2
27862791
if (!mp_is_bit_set(modulus, 224)) {
27872792
return sp_ecc_map_sm2_256(P->x, P->y, P->z);
27882793
}
27892794
#endif
2795+
#endif
27902796
return sp_ecc_map_256(P->x, P->y, P->z);
27912797
}
27922798
#endif
@@ -3687,11 +3693,13 @@ int wc_ecc_mulmod_ex(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
36873693
#ifdef WOLFSSL_HAVE_SP_ECC
36883694
#ifndef WOLFSSL_SP_NO_256
36893695
if (mp_count_bits(modulus) == 256) {
3696+
#ifdef SM2_SP_IMPL_AVAILABLE
36903697
#ifdef WOLFSSL_SM2
36913698
if (!mp_is_bit_set(modulus, 224)) {
36923699
return sp_ecc_mulmod_sm2_256(k, G, R, map, heap);
36933700
}
36943701
#endif
3702+
#endif
36953703
return sp_ecc_mulmod_256(k, G, R, map, heap);
36963704
}
36973705
#endif
@@ -4680,6 +4688,7 @@ int wc_ecc_shared_secret_gen_sync(ecc_key* private_key, ecc_point* point,
46804688
#endif /* !WC_ECC_NONBLOCK */
46814689
}
46824690
else
4691+
#ifdef SM2_SP_IMPL_AVAILABLE
46834692
#ifdef WOLFSSL_SM2
46844693
if (private_key->idx != ECC_CUSTOM_IDX &&
46854694
ecc_sets[private_key->idx].id == ECC_SM2P256V1) {
@@ -4688,6 +4697,7 @@ int wc_ecc_shared_secret_gen_sync(ecc_key* private_key, ecc_point* point,
46884697
}
46894698
else
46904699
#endif
4700+
#endif
46914701
#endif /* ! WOLFSSL_SP_NO_256 */
46924702
#ifdef WOLFSSL_SP_384
46934703
if (private_key->idx != ECC_CUSTOM_IDX &&
@@ -5272,12 +5282,14 @@ static int ecc_make_pub_ex(ecc_key* key, ecc_curve_spec* curve,
52725282
err = sp_ecc_mulmod_base_256(key->k, pub, 1, key->heap);
52735283
}
52745284
else
5285+
#ifdef SM2_SP_IMPL_AVAILABLE
52755286
#ifdef WOLFSSL_SM2
52765287
if (key->idx != ECC_CUSTOM_IDX && ecc_sets[key->idx].id == ECC_SM2P256V1) {
52775288
err = sp_ecc_mulmod_base_sm2_256(&key->k, pub, 1, key->heap);
52785289
}
52795290
else
52805291
#endif
5292+
#endif
52815293
#endif /* WOLFSSL_SP_NO_256 */
52825294
#ifdef WOLFSSL_SP_384
52835295
if (key->idx != ECC_CUSTOM_IDX && ecc_sets[key->idx].id == ECC_SECP384R1) {
@@ -5654,6 +5666,7 @@ static int _ecc_make_key_ex(WC_RNG* rng, int keysize, ecc_key* key,
56545666
}
56555667
}
56565668
else
5669+
#ifdef SM2_SP_IMPL_AVAILABLE
56575670
#ifdef WOLFSSL_SM2
56585671
if (key->idx != ECC_CUSTOM_IDX && ecc_sets[key->idx].id == ECC_SM2P256V1) {
56595672
err = sp_ecc_make_key_sm2_256(rng, &key->k, &key->pubkey, key->heap);
@@ -5663,6 +5676,7 @@ static int _ecc_make_key_ex(WC_RNG* rng, int keysize, ecc_key* key,
56635676
}
56645677
else
56655678
#endif
5679+
#endif
56665680
#endif /* !WOLFSSL_SP_NO_256 */
56675681
#ifdef WOLFSSL_SP_384
56685682
if (key->idx != ECC_CUSTOM_IDX && ecc_sets[key->idx].id == ECC_SECP384R1) {
@@ -6871,12 +6885,14 @@ static int ecc_sign_hash_sp(const byte* in, word32 inlen, WC_RNG* rng,
68716885
}
68726886
#endif
68736887
}
6888+
#ifdef SM2_SP_IMPL_AVAILABLE
68746889
#ifdef WOLFSSL_SM2
68756890
if (ecc_sets[key->idx].id == ECC_SM2P256V1) {
68766891
return sp_ecc_sign_sm2_256(in, inlen, rng, &key->k, r, s, sign_k,
68776892
key->heap);
68786893
}
68796894
#endif
6895+
#endif
68806896
#endif
68816897
#ifdef WOLFSSL_SP_384
68826898
if (ecc_sets[key->idx].id == ECC_SECP384R1) {
@@ -8447,6 +8463,7 @@ static int ecc_verify_hash_sp(mp_int *r, mp_int *s, const byte* hash,
84478463
}
84488464
#endif
84498465
}
8466+
#ifdef SM2_SP_IMPL_AVAILABLE
84508467
#ifdef WOLFSSL_SM2
84518468
if (ecc_sets[key->idx].id == ECC_SM2P256V1) {
84528469
#if defined(FP_ECC_CONTROL) && !defined(WOLFSSL_DSP_BUILD)
@@ -8463,6 +8480,7 @@ static int ecc_verify_hash_sp(mp_int *r, mp_int *s, const byte* hash,
84638480
}
84648481
#endif
84658482
#endif
8483+
#endif
84668484
#ifdef WOLFSSL_SP_384
84678485
if (ecc_sets[key->idx].id == ECC_SECP384R1) {
84688486
#ifdef WC_ECC_NONBLOCK
@@ -9083,13 +9101,15 @@ int wc_ecc_import_point_der_ex(const byte* in, word32 inLen,
90839101
err = sp_ecc_uncompress_256(point->x, pointType, point->y);
90849102
}
90859103
else
9104+
#ifdef SM2_SP_IMPL_AVAILABLE
90869105
#ifdef WOLFSSL_SM2
90879106
if (curve_idx != ECC_CUSTOM_IDX &&
90889107
ecc_sets[curve_idx->idx].id == ECC_SM2P256V1) {
90899108
sp_ecc_uncompress_sm2_256(point->x, pointType, point->y);
90909109
}
90919110
else
90929111
#endif
9112+
#endif
90939113
#endif
90949114
#ifdef WOLFSSL_SP_384
90959115
if (curve_idx != ECC_CUSTOM_IDX &&
@@ -9638,11 +9658,13 @@ static int _ecc_is_point(ecc_point* ecp, mp_int* a, mp_int* b, mp_int* prime)
96389658
#ifdef WOLFSSL_HAVE_SP_ECC
96399659
#ifndef WOLFSSL_SP_NO_256
96409660
if (mp_count_bits(prime) == 256) {
9661+
#ifdef SM2_SP_IMPL_AVAILABLE
96419662
#ifdef WOLFSSL_SM2
96429663
if (!mp_is_bit_set(prime, 224)) {
96439664
return sp_ecc_is_point_sm2_256(ecp->x, ecp->y);
96449665
}
96459666
#endif
9667+
#endif
96469668
return sp_ecc_is_point_256(ecp->x, ecp->y);
96479669
}
96489670
#endif
@@ -9735,6 +9757,7 @@ static int ecc_check_privkey_gen(ecc_key* key, mp_int* a, mp_int* prime)
97359757
}
97369758
}
97379759
else
9760+
#ifdef SM2_SP_IMPL_AVAILABLE
97389761
#ifdef WOLFSSL_SM2
97399762
if (key->idx != ECC_CUSTOM_IDX && ecc_sets[key->idx].id == ECC_SM2P256V1) {
97409763
if (err == MP_OKAY) {
@@ -9744,6 +9767,7 @@ static int ecc_check_privkey_gen(ecc_key* key, mp_int* a, mp_int* prime)
97449767
else
97459768
#endif
97469769
#endif
9770+
#endif
97479771
#ifdef WOLFSSL_SP_384
97489772
if (key->idx != ECC_CUSTOM_IDX && ecc_sets[key->idx].id == ECC_SECP384R1) {
97499773
if (err == MP_OKAY) {
@@ -9976,6 +10000,7 @@ static int ecc_check_pubkey_order(ecc_key* key, ecc_point* pubkey, mp_int* a,
997610000
err = sp_ecc_mulmod_256(order, pubkey, inf, 1, key->heap);
997710001
}
997810002
else
10003+
#ifdef SM2_SP_IMPL_AVAILABLE
997910004
#ifdef WOLFSSL_SM2
998010005
if (key->idx != ECC_CUSTOM_IDX &&
998110006
ecc_sets[key->idx].id == ECC_SM2P256V1) {
@@ -9984,6 +10009,7 @@ static int ecc_check_pubkey_order(ecc_key* key, ecc_point* pubkey, mp_int* a,
998410009
else
998510010
#endif
998610011
#endif
10012+
#endif
998710013
#ifdef WOLFSSL_SP_384
998810014
if (key->idx != ECC_CUSTOM_IDX &&
998910015
ecc_sets[key->idx].id == ECC_SECP384R1) {
@@ -10088,13 +10114,15 @@ static int _ecc_validate_public_key(ecc_key* key, int partial, int priv)
1008810114
return sp_ecc_check_key_256(key->pubkey.x, key->pubkey.y,
1008910115
key->type == ECC_PRIVATEKEY ? key->k : NULL, key->heap);
1009010116
}
10117+
#ifdef SM2_SP_IMPL_AVAILABLE
1009110118
#ifdef WOLFSSL_SM2
1009210119
if (key->idx != ECC_CUSTOM_IDX && ecc_sets[key->idx].id == ECC_SM2P256V1) {
1009310120
return sp_ecc_check_key_sm2_256(key->pubkey.x, key->pubkey.y
1009410121
key->type == ECC_PRIVATEKEY ? &key->k : NULL, key->heap);
1009510122
}
1009610123
#endif
1009710124
#endif
10125+
#endif
1009810126
#ifdef WOLFSSL_SP_384
1009910127
if (key->idx != ECC_CUSTOM_IDX && ecc_sets[key->idx].id == ECC_SECP384R1) {
1010010128
return sp_ecc_check_key_384(key->pubkey.x, key->pubkey.y,
@@ -10471,12 +10499,14 @@ int wc_ecc_import_x963_ex(const byte* in, word32 inLen, ecc_key* key,
1047110499
key->pubkey.y);
1047210500
}
1047310501
else
10502+
#ifdef SM2_SP_IMPL_AVAILABLE
1047410503
#ifdef WOLFSSL_SM2
1047510504
if (key->dp->id == ECC_SM2P256V1) {
1047610505
sp_ecc_uncompress_sm2_256(key->pubkey.x, pointType, key->pubkey.y);
1047710506
}
1047810507
else
1047910508
#endif
10509+
#endif
1048010510
#endif
1048110511
#ifdef WOLFSSL_SP_384
1048210512
if (key->dp->id == ECC_SECP384R1) {
@@ -13026,12 +13056,14 @@ int wc_ecc_mulmod_ex(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
1302613056
if (mp_count_bits(modulus) == 256) {
1302713057
int ret;
1302813058
SAVE_VECTOR_REGISTERS(return _svr_ret);
13059+
#ifdef SM2_SP_IMPL_AVAILABLE
1302913060
#ifdef WOLFSSL_SM2
1303013061
if (!mp_is_bit_set(modulus, 224)) {
1303113062
ret = sp_ecc_mulmod_sm2_256(k, G, R, map, heap);
1303213063
}
1303313064
else
1303413065
#endif
13066+
#endif
1303513067
{
1303613068
ret = sp_ecc_mulmod_256(k, G, R, map, heap);
1303713069
}
@@ -13203,12 +13235,14 @@ int wc_ecc_mulmod_ex2(const mp_int* k, ecc_point *G, ecc_point *R, mp_int* a,
1320313235
if (mp_count_bits(modulus) == 256) {
1320413236
int ret;
1320513237
SAVE_VECTOR_REGISTERS(return _svr_ret);
13238+
#ifdef SM2_SP_IMPL_AVAILABLE
1320613239
#ifdef WOLFSSL_SM2
1320713240
if (!mp_is_bit_set(modulus, 224)) {
1320813241
ret = sp_ecc_mulmod_sm2_256(k, G, R, map, heap);
1320913242
}
1321013243
else
1321113244
#endif
13245+
#endif
1321213246
{
1321313247
ret = sp_ecc_mulmod_256(k, G, R, map, heap);
1321413248
}

0 commit comments

Comments
 (0)