esp_wifi: Optimize sae crypto operations for esp32

This commit is contained in:
Kapil Gupta 2023-06-16 12:43:38 +05:30
parent a300e79589
commit 02aa8e1a89
2 changed files with 13 additions and 26 deletions

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@ -162,27 +162,10 @@ int crypto_bignum_mulmod(const struct crypto_bignum *a,
const struct crypto_bignum *c, const struct crypto_bignum *c,
struct crypto_bignum *d) struct crypto_bignum *d)
{ {
int res; return mbedtls_mpi_mul_mpi((mbedtls_mpi *)d, (const mbedtls_mpi *)a, (const mbedtls_mpi *)b) ||
#if ALLOW_EVEN_MOD || !CONFIG_MBEDTLS_HARDWARE_MPI // Must enable ALLOW_EVEN_MOD if c is even mbedtls_mpi_mod_mpi((mbedtls_mpi *)d, (mbedtls_mpi *)d, (const mbedtls_mpi *)c) ? -1 : 0;
mbedtls_mpi temp;
mbedtls_mpi_init(&temp);
res = mbedtls_mpi_mul_mpi(&temp, (const mbedtls_mpi *) a, (const mbedtls_mpi *) b);
if (res) {
return -1;
}
res = mbedtls_mpi_mod_mpi((mbedtls_mpi *) d, &temp, (mbedtls_mpi *) c);
mbedtls_mpi_free(&temp);
#else
// Works with odd modulus only, but it is faster with HW acceleration
res = esp_mpi_mul_mpi_mod((mbedtls_mpi *) d, (mbedtls_mpi *) a, (mbedtls_mpi *) b, (mbedtls_mpi *) c);
#endif
return res ? -1 : 0;
} }
int crypto_bignum_sqrmod(const struct crypto_bignum *a, int crypto_bignum_sqrmod(const struct crypto_bignum *a,
const struct crypto_bignum *b, const struct crypto_bignum *b,
struct crypto_bignum *c) struct crypto_bignum *c)

View File

@ -1,5 +1,5 @@
/* /*
* SPDX-FileCopyrightText: 2015-2021 Espressif Systems (Shanghai) CO LTD * SPDX-FileCopyrightText: 2015-2023 Espressif Systems (Shanghai) CO LTD
* *
* SPDX-License-Identifier: Apache-2.0 * SPDX-License-Identifier: Apache-2.0
*/ */
@ -382,14 +382,18 @@ struct crypto_bignum *crypto_ec_point_compute_y_sqr(struct crypto_ec *e,
mbedtls_mpi_init(&num); mbedtls_mpi_init(&num);
mbedtls_mpi_init(y_sqr); mbedtls_mpi_init(y_sqr);
/* y^2 = x^3 + ax + b mod P*/ /* y^2 = x^3 + ax + b mod P */
/* mbedtls does not have mod-add or mod-mul apis. /* X*X*X is faster on esp32 whereas X^3 is faster on other chips */
* #if CONFIG_IDF_TARGET_ESP32
*/ /* Calculate x*x*x mod P*/
MBEDTLS_MPI_CHK(mbedtls_mpi_mul_mpi(&temp, (const mbedtls_mpi *) x, (const mbedtls_mpi *) x));
MBEDTLS_MPI_CHK(mbedtls_mpi_mul_mpi(&temp, &temp, (const mbedtls_mpi *) x));
MBEDTLS_MPI_CHK(mbedtls_mpi_mod_mpi(&temp, &temp, &e->group.P));
#else
/* Calculate x^3 mod P*/ /* Calculate x^3 mod P*/
MBEDTLS_MPI_CHK(mbedtls_mpi_lset(&num, 3)); MBEDTLS_MPI_CHK(mbedtls_mpi_lset(&num, 3));
MBEDTLS_MPI_CHK(mbedtls_mpi_exp_mod(&temp, (const mbedtls_mpi *) x, &num, &e->group.P, NULL)); MBEDTLS_MPI_CHK(mbedtls_mpi_exp_mod(&temp, (const mbedtls_mpi *) x, &num, &e->group.P, NULL));
#endif
/* Calculate ax mod P*/ /* Calculate ax mod P*/
MBEDTLS_MPI_CHK(mbedtls_mpi_lset(&num, -3)); MBEDTLS_MPI_CHK(mbedtls_mpi_lset(&num, -3));