mirror of
https://github.com/espressif/ESP8266_RTOS_SDK.git
synced 2025-09-28 18:06:47 +08:00

1. add spi flash erase protect mechanism, boot and current runing user bin can not been erased; 2. add memleak debug feature; 3. fix spi overlap issue; 4. fix call wifi_station_disconnect, disconnect event enter twice issue; 5. fix crash when set opmode from station to softAP in scan done callback; 6. modify spi flash erase/write flow, clear protect status if needed; 7. fix rf init data sector broken issue, add user_rf_cal_sector_set, user application MUST have this function, refer to examples; 8. fix system parameter sector broken issue when frequently power on/off; 9. fix the max value of os_timer_arm; 10. fix dns issue in some routers; 11. add sntp support; 12. update smartconfig to 2.5.4; 13. update open freedom to support send beacon packet; 14. fix seldom rf not work issue after external reset; 15. fix pwm issue; 16. fix status error got by wifi_station_get_connect_status; 17. fix assert in pp; 18. fix huawei X4 connect softAP issue; 19. optimize sleep strategy; 20. add vendor IE support; 21. update libphy.a to 1055; 22. add weak function wifi_set_backup_mac to let user set MAC; 23. fix bug of lwip and optimize socket mechanism; 24. update boot loader to v1.6; 25. update esp_init_data_default.bin 26. add mbedtls support; 27. fix other bugs;
114 lines
3.7 KiB
C
114 lines
3.7 KiB
C
/*
|
|
* Copyright (c) 2007, Cameron Rich
|
|
*
|
|
* All rights reserved.
|
|
*
|
|
* Redistribution and use in source and binary forms, with or without
|
|
* modification, are permitted provided that the following conditions are met:
|
|
*
|
|
* * Redistributions of source code must retain the above copyright notice,
|
|
* this list of conditions and the following disclaimer.
|
|
* * Redistributions in binary form must reproduce the above copyright notice,
|
|
* this list of conditions and the following disclaimer in the documentation
|
|
* and/or other materials provided with the distribution.
|
|
* * Neither the name of the axTLS project nor the names of its contributors
|
|
* may be used to endorse or promote products derived from this software
|
|
* without specific prior written permission.
|
|
*
|
|
* THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS
|
|
* "AS IS" AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT
|
|
* LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR
|
|
* A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL THE COPYRIGHT OWNER OR
|
|
* CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
|
|
* EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
|
|
* PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
|
|
* PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF
|
|
* LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING
|
|
* NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS
|
|
* SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
|
|
*/
|
|
|
|
/**
|
|
* HMAC implementation - This code was originally taken from RFC2104
|
|
* See http://www.ietf.org/rfc/rfc2104.txt and
|
|
* http://www.faqs.org/rfcs/rfc2202.html
|
|
*/
|
|
|
|
#include "ssl/ssl_os_port.h"
|
|
#include "ssl/ssl_crypto.h"
|
|
|
|
#ifdef MEMLEAK_DEBUG
|
|
static const char mem_debug_file[] ICACHE_RODATA_ATTR STORE_ATTR = __FILE__;
|
|
#endif
|
|
|
|
/**
|
|
* Perform HMAC-MD5
|
|
* NOTE: does not handle keys larger than the block size.
|
|
*/
|
|
void ICACHE_FLASH_ATTR ssl_hmac_md5(const uint8_t *msg, int length, const uint8_t *key,
|
|
int key_len, uint8_t *digest)
|
|
{
|
|
MD5_CTX context;
|
|
uint8_t *k_ipad = (uint8_t *)SSL_ZALLOC(64);
|
|
uint8_t *k_opad = (uint8_t *)SSL_ZALLOC(64);
|
|
int i;
|
|
|
|
// memset(k_ipad, 0, sizeof k_ipad);
|
|
// memset(k_opad, 0, sizeof k_opad);
|
|
memcpy(k_ipad, key, key_len);
|
|
memcpy(k_opad, key, key_len);
|
|
|
|
for (i = 0; i < 64; i++)
|
|
{
|
|
k_ipad[i] ^= 0x36;
|
|
k_opad[i] ^= 0x5c;
|
|
}
|
|
|
|
MD5_Init(&context);
|
|
MD5_Update(&context, k_ipad, 64);
|
|
MD5_Update(&context, msg, length);
|
|
MD5_Final(digest, &context);
|
|
MD5_Init(&context);
|
|
MD5_Update(&context, k_opad, 64);
|
|
MD5_Update(&context, digest, MD5_SIZE);
|
|
MD5_Final(digest, &context);
|
|
SSL_FREE(k_ipad);
|
|
SSL_FREE(k_opad);
|
|
}
|
|
|
|
/**
|
|
* Perform HMAC-SHA1
|
|
* NOTE: does not handle keys larger than the block size.
|
|
*/
|
|
void ICACHE_FLASH_ATTR ssl_hmac_sha1(const uint8_t *msg, int length, const uint8_t *key,
|
|
int key_len, uint8_t *digest)
|
|
{
|
|
SHA1_CTX context;
|
|
uint8_t *k_ipad = (uint8_t *)SSL_ZALLOC(64);
|
|
uint8_t *k_opad = (uint8_t *)SSL_ZALLOC(64);
|
|
int i;
|
|
|
|
// memset(k_ipad, 0, sizeof k_ipad);
|
|
// memset(k_opad, 0, sizeof k_opad);
|
|
memcpy(k_ipad, key, key_len);
|
|
memcpy(k_opad, key, key_len);
|
|
|
|
for (i = 0; i < 64; i++)
|
|
{
|
|
k_ipad[i] ^= 0x36;
|
|
k_opad[i] ^= 0x5c;
|
|
}
|
|
|
|
SHA1_Init(&context);
|
|
SHA1_Update(&context, k_ipad, 64);
|
|
SHA1_Update(&context, msg, length);
|
|
SHA1_Final(digest, &context);
|
|
SHA1_Init(&context);
|
|
SHA1_Update(&context, k_opad, 64);
|
|
SHA1_Update(&context, digest, SHA1_SIZE);
|
|
SHA1_Final(digest, &context);
|
|
|
|
SSL_FREE(k_ipad);
|
|
SSL_FREE(k_opad);
|
|
}
|