forked from espressif/esp-idf
fix(esp_wifi): Add alternate SHA1 APIs in WiFi
Add alternate SHA1 APIs to handle cases when `CONFIG_MBEDTLS_SHA1_C` is disabled.
This commit is contained in:
committed by
harshal.patil
parent
e442f11320
commit
1a5b2a267b
@@ -127,6 +127,9 @@ if(CONFIG_ESP_WIFI_MBEDTLS_CRYPTO)
|
|||||||
if(NOT CONFIG_MBEDTLS_DES_C)
|
if(NOT CONFIG_MBEDTLS_DES_C)
|
||||||
set(crypto_src ${crypto_src} "src/crypto/des-internal.c")
|
set(crypto_src ${crypto_src} "src/crypto/des-internal.c")
|
||||||
endif()
|
endif()
|
||||||
|
if(NOT CONFIG_MBEDTLS_SHA1_C)
|
||||||
|
set(crypto_src ${crypto_src} "src/crypto/sha1.c")
|
||||||
|
endif()
|
||||||
# Enabling this only for WiFi is probably not a good idea since MbedTLS
|
# Enabling this only for WiFi is probably not a good idea since MbedTLS
|
||||||
# uses generic crypto init/update functions for this. That causes
|
# uses generic crypto init/update functions for this. That causes
|
||||||
# binary size increment since all the other enabled module
|
# binary size increment since all the other enabled module
|
||||||
|
@@ -35,6 +35,7 @@
|
|||||||
#include "aes_wrap.h"
|
#include "aes_wrap.h"
|
||||||
#include "crypto.h"
|
#include "crypto.h"
|
||||||
#include "mbedtls/esp_config.h"
|
#include "mbedtls/esp_config.h"
|
||||||
|
#include "mbedtls/sha1.h"
|
||||||
|
|
||||||
#ifdef CONFIG_FAST_PBKDF2
|
#ifdef CONFIG_FAST_PBKDF2
|
||||||
#include "fastpbkdf2.h"
|
#include "fastpbkdf2.h"
|
||||||
@@ -105,7 +106,28 @@ int sha512_vector(size_t num_elem, const u8 *addr[], const size_t *len,
|
|||||||
|
|
||||||
int sha1_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
int sha1_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
||||||
{
|
{
|
||||||
|
#if defined(MBEDTLS_SHA1_C)
|
||||||
return digest_vector(MBEDTLS_MD_SHA1, num_elem, addr, len, mac);
|
return digest_vector(MBEDTLS_MD_SHA1, num_elem, addr, len, mac);
|
||||||
|
#elif defined(MBEDTLS_SHA1_ALT)
|
||||||
|
mbedtls_sha1_context ctx;
|
||||||
|
size_t i;
|
||||||
|
int ret;
|
||||||
|
|
||||||
|
mbedtls_sha1_init(&ctx);
|
||||||
|
for (i = 0; i < num_elem; i++) {
|
||||||
|
ret = mbedtls_sha1_update(&ctx, addr[i], len[i]);
|
||||||
|
if (ret != 0) {
|
||||||
|
goto exit;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
ret = mbedtls_sha1_finish(&ctx, mac);
|
||||||
|
|
||||||
|
exit:
|
||||||
|
mbedtls_sha1_free(&ctx);
|
||||||
|
return ret;
|
||||||
|
#else
|
||||||
|
return -ENOTSUP;
|
||||||
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
int md5_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
int md5_vector(size_t num_elem, const u8 *addr[], const size_t *len, u8 *mac)
|
||||||
@@ -363,6 +385,7 @@ int hmac_md5(const u8 *key, size_t key_len, const u8 *data, size_t data_len,
|
|||||||
return hmac_md5_vector(key, key_len, 1, &data, &data_len, mac);
|
return hmac_md5_vector(key, key_len, 1, &data, &data_len, mac);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#ifdef MBEDTLS_SHA1_C
|
||||||
int hmac_sha1_vector(const u8 *key, size_t key_len, size_t num_elem,
|
int hmac_sha1_vector(const u8 *key, size_t key_len, size_t num_elem,
|
||||||
const u8 *addr[], const size_t *len, u8 *mac)
|
const u8 *addr[], const size_t *len, u8 *mac)
|
||||||
{
|
{
|
||||||
@@ -375,6 +398,7 @@ int hmac_sha1(const u8 *key, size_t key_len, const u8 *data, size_t data_len,
|
|||||||
{
|
{
|
||||||
return hmac_sha1_vector(key, key_len, 1, &data, &data_len, mac);
|
return hmac_sha1_vector(key, key_len, 1, &data, &data_len, mac);
|
||||||
}
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
static void *aes_crypt_init(int mode, const u8 *key, size_t len)
|
static void *aes_crypt_init(int mode, const u8 *key, size_t len)
|
||||||
{
|
{
|
||||||
|
Reference in New Issue
Block a user