Skip to content

Commit 7bc2e59

Browse files
author
Me No Dev
committed
Add option to give ArduinoOTA a hashed value of the password
hashed password can be safely stored on flash
1 parent c4f9f10 commit 7bc2e59

File tree

3 files changed

+18
-8
lines changed

3 files changed

+18
-8
lines changed

libraries/ArduinoOTA/ArduinoOTA.cpp

Lines changed: 11 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -29,6 +29,7 @@ extern "C" {
2929

3030
ArduinoOTAClass::ArduinoOTAClass()
3131
: _port(0)
32+
, _pass_is_hash(false)
3233
, _udp_ota(0)
3334
, _initialized(false)
3435
, _state(OTA_IDLE)
@@ -81,9 +82,10 @@ String ArduinoOTAClass::getHostname() {
8182
return _hostname;
8283
}
8384

84-
void ArduinoOTAClass::setPassword(const char * password) {
85+
void ArduinoOTAClass::setPassword(const char * password, bool isHash) {
8586
if (!_initialized && !_password.length() && password) {
8687
_password = password;
88+
_pass_is_hash = isHash;
8789
}
8890
}
8991

@@ -206,11 +208,14 @@ void ArduinoOTAClass::_onRx(){
206208
return;
207209
}
208210

209-
MD5Builder _passmd5;
210-
_passmd5.begin();
211-
_passmd5.add(_password);
212-
_passmd5.calculate();
213-
String passmd5 = _passmd5.toString();
211+
String passmd5 = _password;
212+
if(!_pass_is_hash){
213+
MD5Builder _passmd5;
214+
_passmd5.begin();
215+
_passmd5.add(_password);
216+
_passmd5.calculate();
217+
passmd5 = _passmd5.toString();
218+
}
214219

215220
String challenge = passmd5 + ":" + String(_nonce) + ":" + cnonce;
216221
MD5Builder _challengemd5;

libraries/ArduinoOTA/ArduinoOTA.h

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -33,7 +33,7 @@ class ArduinoOTAClass
3333
void setPort(uint16_t port);
3434
void setHostname(const char *hostname);
3535
String getHostname();
36-
void setPassword(const char *password);
36+
void setPassword(const char *password, bool isHash=false);
3737
void onStart(THandlerFunction fn);
3838
void onEnd(THandlerFunction fn);
3939
void onError(THandlerFunction_Error fn);
@@ -44,6 +44,7 @@ class ArduinoOTAClass
4444

4545
private:
4646
int _port;
47+
bool _pass_is_hash;
4748
String _password;
4849
String _hostname;
4950
String _nonce;

libraries/ArduinoOTA/examples/BasicOTA/BasicOTA.ino

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,11 @@ void setup() {
2424
// ArduinoOTA.setHostname("myesp8266");
2525

2626
// No authentication by default
27-
// ArduinoOTA.setPassword((const char *)"123");
27+
// ArduinoOTA.setPassword("admin");
28+
29+
// Password can be set with it's md5 value as well
30+
// MD5(admin) = 21232f297a57a5a743894a0e4a801fc3
31+
// ArduinoOTA.setPassword("21232f297a57a5a743894a0e4a801fc3", true);
2832

2933
ArduinoOTA.onStart([]() {
3034
String type;

0 commit comments

Comments
 (0)