@@ -12040,6 +12040,7 @@ void bench_ecc(int useDeviceID, int curveId)
1204012040 int ret = 0, i, times, count, pending = 0;
1204112041 int deviceID;
1204212042 int keySize;
12043+ int dgstSize;
1204312044 char name[BENCH_ECC_NAME_SZ];
1204412045 WC_DECLARE_ARRAY(genKey, ecc_key, BENCH_MAX_PENDING,
1204512046 sizeof(ecc_key), HEAP_HINT);
@@ -12068,7 +12069,7 @@ void bench_ecc(int useDeviceID, int curveId)
1206812069 WC_DECLARE_ARRAY(sig, byte,
1206912070 BENCH_MAX_PENDING, ECC_MAX_SIG_SIZE, HEAP_HINT);
1207012071 WC_DECLARE_ARRAY(digest, byte,
12071- BENCH_MAX_PENDING, MAX_ECC_BYTES , HEAP_HINT);
12072+ BENCH_MAX_PENDING, WC_MAX_DIGEST_SIZE , HEAP_HINT);
1207212073#endif
1207312074
1207412075 bench_stats_prepare();
@@ -12099,6 +12100,29 @@ void bench_ecc(int useDeviceID, int curveId)
1209912100 deviceID = useDeviceID ? devId : INVALID_DEVID;
1210012101
1210112102 keySize = wc_ecc_get_curve_size_from_id(curveId);
12103+ if (keySize < 28) {
12104+ /* SHA-1 */
12105+ dgstSize = 20;
12106+ }
12107+ else if (keySize < 32) {
12108+ /* SHA-224/SHA512-224/SHA3-224 */
12109+ dgstSize = 28;
12110+ }
12111+ else if (keySize < 48) {
12112+ /* SHA-256/SHA512-256/SHA3-256 */
12113+ dgstSize = 32;
12114+ }
12115+ else if (keySize < 64) {
12116+ /* SHA-384/SHA3-384 */
12117+ dgstSize = 48;
12118+ }
12119+ else {
12120+ /* SHA-512/SHA3-512 */
12121+ dgstSize = 64;
12122+ }
12123+ if (dgstSize > WC_MAX_DIGEST_SIZE) {
12124+ dgstSize = WC_MAX_DIGEST_SIZE;
12125+ }
1210212126
1210312127 /* init keys */
1210412128 for (i = 0; i < BENCH_MAX_PENDING; i++) {
@@ -12187,7 +12211,7 @@ void bench_ecc(int useDeviceID, int curveId)
1218712211
1218812212 /* Init digest to sign */
1218912213 for (i = 0; i < BENCH_MAX_PENDING; i++) {
12190- for (count = 0; count < keySize ; count++) {
12214+ for (count = 0; count < dgstSize ; count++) {
1219112215 digest[i][count] = (byte)count;
1219212216 }
1219312217 }
@@ -12207,7 +12231,7 @@ void bench_ecc(int useDeviceID, int curveId)
1220712231 x[i] = ECC_MAX_SIG_SIZE;
1220812232 }
1220912233
12210- ret = wc_ecc_sign_hash(digest[i], (word32)keySize , sig[i],
12234+ ret = wc_ecc_sign_hash(digest[i], (word32)dgstSize , sig[i],
1221112235 &x[i], GLOBAL_RNG, genKey[i]);
1221212236
1221312237 if (!bench_async_handle(&ret,
@@ -12259,7 +12283,7 @@ void bench_ecc(int useDeviceID, int curveId)
1225912283 }
1226012284
1226112285 ret = wc_ecc_verify_hash(sig[i], x[i], digest[i],
12262- (word32)keySize , &verify[i],
12286+ (word32)dgstSize , &verify[i],
1226312287 genKey[i]);
1226412288
1226512289 if (!bench_async_handle(&ret,
0 commit comments