SiLabs: address PR comments to cleanup

This commit is contained in:
Elms
2020-12-07 15:52:55 -08:00
parent 3abc4719ae
commit 919c2a2dfb
6 changed files with 32 additions and 24 deletions

View File

@@ -4864,7 +4864,7 @@ static int wc_ecc_sign_hash_hw(const byte* in, word32 inlen,
#elif defined(WOLFSSL_SILABS_SE_ACCEL) #elif defined(WOLFSSL_SILABS_SE_ACCEL)
err = silabs_ecc_sign_hash(in, inlen, out, outlen, key); err = silabs_ecc_sign_hash(in, inlen, out, outlen, key);
if (err != 0) { if (err != 0) {
return BAD_COND_E; return WC_HW_E;
} }
#elif defined(WOLFSSL_CRYPTOCELL) #elif defined(WOLFSSL_CRYPTOCELL)
@@ -6231,7 +6231,7 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash,
word32 msgLenInBytes = hashlen; word32 msgLenInBytes = hashlen;
CRYS_ECPKI_HASH_OpMode_t hash_mode; CRYS_ECPKI_HASH_OpMode_t hash_mode;
#elif defined(WOLFSSL_SILABS_SE_ACCEL) #elif defined(WOLFSSL_SILABS_SE_ACCEL)
byte sigRS[64*2]; byte sigRS[ECC_MAX_CRYPTO_HW_SIZE * 2];
#elif !defined(WOLFSSL_SP_MATH) || defined(FREESCALE_LTC_ECC) #elif !defined(WOLFSSL_SP_MATH) || defined(FREESCALE_LTC_ECC)
int did_init = 0; int did_init = 0;
ecc_point *mG = NULL, *mQ = NULL; ecc_point *mG = NULL, *mQ = NULL;
@@ -6351,9 +6351,9 @@ int wc_ecc_verify_hash_ex(mp_int *r, mp_int *s, const byte* hash,
return err; return err;
} }
silabs_ecc_verify_hash(&sigRS[0], keySz*2, err = silabs_ecc_verify_hash(&sigRS[0], keySz*2,
hash, hashlen, hash, hashlen,
res, key); res, key);
#else #else
/* checking if private key with no public part */ /* checking if private key with no public part */

View File

@@ -29,6 +29,7 @@ Update was preformed under Simplicity Studio directory:
versions requesting too much data or too quickly may result in versions requesting too much data or too quickly may result in
system reset and setting `SESYSREQ`. system reset and setting `SESYSREQ`.
## Benchmarks ## Benchmarks
See our [benchmarks](https://www.wolfssl.com/docs/benchmarks/) on the wolfSSL website. See our [benchmarks](https://www.wolfssl.com/docs/benchmarks/) on the wolfSSL website.
@@ -61,9 +62,6 @@ ECDSA 256 sign 158 ops took 1.010 sec, avg 6.392 ms, 156.436 ops/sec
ECDSA 256 verify 148 ops took 1.001 sec, avg 6.764 ms, 147.852 ops/sec ECDSA 256 verify 148 ops took 1.001 sec, avg 6.764 ms, 147.852 ops/sec
``` ```
### Benchmarks and Memory Use
# Support # Support

View File

@@ -33,10 +33,11 @@
#include <wolfssl/wolfcrypt/port/silabs/silabs_ecc.h> #include <wolfssl/wolfcrypt/port/silabs/silabs_ecc.h>
#define SILABS_UNSUPPORTED_KEY_TYPE 0xFFFFFFFF
sl_se_key_type_t silabs_map_key_type (ecc_curve_id curve_id) static sl_se_key_type_t silabs_map_key_type (ecc_curve_id curve_id)
{ {
sl_se_key_type_t res = 0; sl_se_key_type_t res = SILABS_UNSUPPORTED_KEY_TYPE;
switch(curve_id) { switch(curve_id) {
case ECC_SECP192R1: case ECC_SECP192R1:
@@ -71,8 +72,7 @@ sl_se_key_type_t silabs_map_key_type (ecc_curve_id curve_id)
#endif #endif
default: default:
WOLFSSL_MSG("silabs_map_key_type() ECC curve unsupported by hardware"); res = SILABS_UNSUPPORTED_KEY_TYPE;
res = 0;
break; break;
} }
@@ -139,12 +139,14 @@ int silabs_ecc_make_key(ecc_key* key, int keysize)
sl_status_t sl_stat; sl_status_t sl_stat;
key->key.type = silabs_map_key_type(key->dp->id); key->key.type = silabs_map_key_type(key->dp->id);
if (SILABS_UNSUPPORTED_KEY_TYPE == key->key.type)
return WC_HW_E;
key->key.size = keysize; key->key.size = keysize;
key->key.storage.method = SL_SE_KEY_STORAGE_EXTERNAL_PLAINTEXT; key->key.storage.method = SL_SE_KEY_STORAGE_EXTERNAL_PLAINTEXT;
key->key.flags = SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PRIVATE_KEY key->key.flags = SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PRIVATE_KEY
| SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PUBLIC_KEY | SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PUBLIC_KEY
| SL_SE_KEY_FLAG_ASYMMMETRIC_SIGNING_ONLY | SL_SE_KEY_FLAG_ASYMMMETRIC_SIGNING_ONLY;
;
sl_stat = sl_se_get_storage_size(&key->key, &key->key.storage.location.buffer.size); sl_stat = sl_se_get_storage_size(&key->key, &key->key.storage.location.buffer.size);
key->key.storage.location.buffer.pointer = key->key_raw; key->key.storage.location.buffer.pointer = key->key_raw;
@@ -175,12 +177,14 @@ int silabs_ecc_import(ecc_key* key, word32 keysize)
word32 used = keysize; word32 used = keysize;
key->key.type = silabs_map_key_type(key->dp->id); key->key.type = silabs_map_key_type(key->dp->id);
if (SILABS_UNSUPPORTED_KEY_TYPE == key->key.type)
return WC_HW_E;
key->key.size = keysize; key->key.size = keysize;
key->key.storage.method = SL_SE_KEY_STORAGE_EXTERNAL_PLAINTEXT; key->key.storage.method = SL_SE_KEY_STORAGE_EXTERNAL_PLAINTEXT;
key->key.flags = SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PRIVATE_KEY key->key.flags = SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PRIVATE_KEY
| SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PUBLIC_KEY | SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PUBLIC_KEY
| SL_SE_KEY_FLAG_ASYMMMETRIC_SIGNING_ONLY | SL_SE_KEY_FLAG_ASYMMMETRIC_SIGNING_ONLY;
;
sl_stat = sl_se_get_storage_size(&key->key, &key->key.storage.location.buffer.size); sl_stat = sl_se_get_storage_size(&key->key, &key->key.storage.location.buffer.size);
key->key.storage.location.buffer.pointer = key->key_raw; key->key.storage.location.buffer.pointer = key->key_raw;
@@ -211,11 +215,13 @@ int silabs_ecc_import_private(ecc_key* key, word32 keysize)
sl_status_t sl_stat; sl_status_t sl_stat;
word32 keySz = keysize; word32 keySz = keysize;
key->key.type = silabs_map_key_type(key->dp->id); key->key.type = silabs_map_key_type(key->dp->id);
if (SILABS_UNSUPPORTED_KEY_TYPE == key->key.type)
return WC_HW_E;
key->key.size = key->dp->size; key->key.size = key->dp->size;
key->key.storage.method = SL_SE_KEY_STORAGE_EXTERNAL_PLAINTEXT; key->key.storage.method = SL_SE_KEY_STORAGE_EXTERNAL_PLAINTEXT;
key->key.flags = SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PRIVATE_KEY key->key.flags = SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PRIVATE_KEY
| SL_SE_KEY_FLAG_ASYMMMETRIC_SIGNING_ONLY | SL_SE_KEY_FLAG_ASYMMMETRIC_SIGNING_ONLY;
;
sl_stat = sl_se_get_storage_size(&key->key, &key->key.storage.location.buffer.size); sl_stat = sl_se_get_storage_size(&key->key, &key->key.storage.location.buffer.size);
key->key.storage.location.buffer.pointer = key->key_raw; key->key.storage.location.buffer.pointer = key->key_raw;
@@ -233,6 +239,9 @@ int silabs_ecc_sig_to_rs(ecc_key* key, word32 keySz)
int err = MP_OKAY; int err = MP_OKAY;
key->key.type = silabs_map_key_type(key->dp->id); key->key.type = silabs_map_key_type(key->dp->id);
if (SILABS_UNSUPPORTED_KEY_TYPE == key->key.type)
return WC_HW_E;
key->key.size = keySz; key->key.size = keySz;
key->key.storage.method = SL_SE_KEY_STORAGE_EXTERNAL_PLAINTEXT; key->key.storage.method = SL_SE_KEY_STORAGE_EXTERNAL_PLAINTEXT;
key->key.flags = SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PUBLIC_KEY key->key.flags = SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PUBLIC_KEY
@@ -294,7 +303,7 @@ int silabs_ecc_shared_secret(ecc_key* private_key, ecc_key* public_key,
sl_status_t sl_stat; sl_status_t sl_stat;
pub_key = public_key->key; pub_key = public_key->key;
pub_key.flags = 0x2000; pub_key.flags = SL_SE_KEY_FLAG_ASYMMETRIC_BUFFER_HAS_PUBLIC_KEY;
*outlen = pub_key.size * 2; *outlen = pub_key.size * 2;
pub_sz = pub_key.size * 2; pub_sz = pub_key.size * 2;

View File

@@ -40,10 +40,10 @@ int wc_silabs_se_hash_init (wc_silabs_sha_t* sha, enum wc_HashType type)
int ret = 0; int ret = 0;
sl_status_t rr; sl_status_t rr;
// set sizes and state /* set sizes and state */
XMEMSET(sha, 0, sizeof(wc_silabs_sha_t)); XMEMSET(sha, 0, sizeof(wc_silabs_sha_t));
// set init state /* set init state */
switch(type) { switch(type) {
case WC_HASH_TYPE_SHA: case WC_HASH_TYPE_SHA:
rr = sl_se_hash_starts(&sha->hash_ctx, rr = sl_se_hash_starts(&sha->hash_ctx,
@@ -88,7 +88,7 @@ int wc_silabs_se_hash_init (wc_silabs_sha_t* sha, enum wc_HashType type)
} }
if (rr == SL_STATUS_OK) { if (rr == SL_STATUS_OK) {
// init handles if it is already initialized /* init handles if it is already initialized */
ret = sl_se_init(); ret = sl_se_init();
} else { } else {
ret = BUFFER_E; ret = BUFFER_E;

View File

@@ -36,7 +36,6 @@
typedef enum ecc_curve_id ecc_curve_id; typedef enum ecc_curve_id ecc_curve_id;
typedef struct ecc_key ecc_key; typedef struct ecc_key ecc_key;
sl_se_key_type_t silabs_map_key_type (ecc_curve_id curve_id);
int silabs_ecc_sign_hash (const byte* in, word32 inlen, int silabs_ecc_sign_hash (const byte* in, word32 inlen,
byte* out, word32 *outlen, byte* out, word32 *outlen,
ecc_key* key); ecc_key* key);

View File

@@ -1394,7 +1394,9 @@ extern void uITRON4_free(void *p) ;
#if defined(RTOS_MODULE_NET_AVAIL) || (APP_CFG_TCPIP_EN == DEF_ENABLED) #if defined(RTOS_MODULE_NET_AVAIL) || (APP_CFG_TCPIP_EN == DEF_ENABLED)
#include <net_cfg.h> #include <net_cfg.h>
#include <net_sock.h> #include <net_sock.h>
//#include <net_err.h> #if (OS_VERSION < 50000)
#include <net_err.h>
#endif
#endif #endif
#include <lib_mem.h> #include <lib_mem.h>
#include <lib_math.h> #include <lib_math.h>