diff --git a/libraries/WiFi/examples/WiFiSmartConfig/WiFiSmartConfig.ino b/libraries/WiFi/examples/WiFiSmartConfig/WiFiSmartConfig.ino index 4c1f1a8ce6d..0c2d99e657c 100644 --- a/libraries/WiFi/examples/WiFiSmartConfig/WiFiSmartConfig.ino +++ b/libraries/WiFi/examples/WiFiSmartConfig/WiFiSmartConfig.ino @@ -1,11 +1,43 @@ #include "WiFi.h" +#include "mbedtls/md.h" //Included for generation of key void setup() { Serial.begin(115200); //Init WiFi as Station, start SmartConfig WiFi.mode(WIFI_AP_STA); + +// -------------------------------------------------------------------- + char *prodKey = ""; //ProductKey = Per Vendor + char *devID = ""; //DeviceID = Per IoT Device + byte hmacResult[32]; + + mbedtls_md_context_t ctx; + mbedtls_md_type_t md_type = MBEDTLS_MD_SHA256; + + const size_t devIDLength = strlen(devID); + const size_t prodKeyLength = strlen(prodKey); + + mbedtls_md_init(&ctx); + mbedtls_md_setup(&ctx, mbedtls_md_info_from_type(md_type), 1); + mbedtls_md_hmac_starts(&ctx, (const unsigned char *) prodKey, prodKeyLength); + mbedtls_md_hmac_update(&ctx, (const unsigned char *) devID, devIDLength); + mbedtls_md_hmac_finish(&ctx, hmacResult); + mbedtls_md_free(&ctx); + + //Serial.print("Hash: "); + /* + for(int i= 0; i< sizeof(hmacResult); i++){ + char str[3]; + + sprintf(str, "%02x", (int)hmacResult[i]); + Serial.print(str); + } + */ + + //WiFi.beginSmartConfig(hmacResult); //Enter param (byte hmacResult[32]) WiFi.beginSmartConfig(); +// -------------------------------------------------------------------- //Wait for SmartConfig packet from mobile Serial.println("Waiting for SmartConfig."); diff --git a/libraries/WiFi/src/WiFiSTA.cpp b/libraries/WiFi/src/WiFiSTA.cpp index b76dea05913..fd392b187ca 100644 --- a/libraries/WiFi/src/WiFiSTA.cpp +++ b/libraries/WiFi/src/WiFiSTA.cpp @@ -621,7 +621,9 @@ bool WiFiSTAClass::_smartConfigStarted = false; bool WiFiSTAClass::_smartConfigDone = false; +//bool WiFiSTAClass::beginSmartConfig(byte hmac_key[32]) { bool WiFiSTAClass::beginSmartConfig() { + if (_smartConfigStarted) { return false; } diff --git a/libraries/WiFi/src/WiFiSTA.h b/libraries/WiFi/src/WiFiSTA.h index b383a7b1be1..fccdb6aedf8 100644 --- a/libraries/WiFi/src/WiFiSTA.h +++ b/libraries/WiFi/src/WiFiSTA.h @@ -87,6 +87,7 @@ class WiFiSTAClass static bool _autoReconnect; public: + //bool beginSmartConfig(byte hmac_key[32]); //Include param (byte hmacResult[32]) bool beginSmartConfig(); bool stopSmartConfig(); bool smartConfigDone(); @@ -96,6 +97,8 @@ class WiFiSTAClass static bool _smartConfigDone; static void _smartConfigCallback(uint32_t status, void* result); + //static bool _checkHmacResult(); + };