Skip to content

Commit d201c1f

Browse files
author
Nicolas Emiliani
committed
(homieiot#648) enable psk tls if ESP32
1 parent b9f6bc1 commit d201c1f

File tree

4 files changed

+47
-1
lines changed

4 files changed

+47
-1
lines changed

src/Homie/Boot/BootNormal.cpp

+25-1
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,9 @@
22

33
using namespace HomieInternals;
44

5+
char psk_id[] = "test\0";
6+
char psk[] = "ebdc054ebb238a422d4d4d50e477096366d113b55a5c46e61bfcc8e9bbfc5b81\0";
7+
58
BootNormal::BootNormal()
69
: Boot("normal")
710
, _mqttReconnectTimer(MQTT_RECONNECT_INITIAL_INTERVAL, MQTT_RECONNECT_MAX_BACKOFF)
@@ -77,12 +80,18 @@ void BootNormal::setup() {
7780
#if ASYNC_TCP_SSL_ENABLED
7881
Interface::get().getLogger() << "SSL is: " << Interface::get().getConfig().get().mqtt.server.ssl.enabled << endl;
7982
Interface::get().getMqttClient().setSecure(Interface::get().getConfig().get().mqtt.server.ssl.enabled);
80-
if (Interface::get().getConfig().get().mqtt.server.ssl.enabled && Interface::get().getConfig().get().mqtt.server.ssl.hasFingerprint) {
83+
if (Interface::get().getConfig().get().mqtt.server.ssl.enabled){ // && Interface::get().getConfig().get().mqtt.server.ssl.hasFingerprint) {
84+
#if defined(ESP8266)
8185
char hexBuf[MAX_FINGERPRINT_STRING_LENGTH];
8286
Helpers::byteArrayToHexString(Interface::get().getConfig().get().mqtt.server.ssl.fingerprint, hexBuf, MAX_FINGERPRINT_SIZE);
8387
Interface::get().getLogger() << "Using fingerprint: " << hexBuf << endl;
8488
Interface::get().getMqttClient().addServerFingerprint((const uint8_t*)Interface::get().getConfig().get().mqtt.server.ssl.fingerprint);
89+
#elif defined(ESP32)
90+
Interface::get().getMqttClient().setPsk(
91+
Interface::get().getConfig().get().mqtt.server.ssl.psk_ident,
92+
Interface::get().getConfig().get().mqtt.server.ssl.psk);
8593
}
94+
#endif
8695
#endif
8796

8897
Interface::get().getMqttClient().setMaxTopicLength(MAX_MQTT_TOPIC_LENGTH);
@@ -779,6 +788,13 @@ void BootNormal::_onMqttDisconnected(AsyncMqttClientDisconnectReason reason) {
779788
}
780789

781790
void BootNormal::_onMqttMessage(char* topic, char* payload, AsyncMqttClientMessageProperties properties, size_t len, size_t index, size_t total) {
791+
/*
792+
Interface::get().getLogger() << F("BootNormal::_onMqttMessage") << endl;
793+
Interface::get().getLogger() << "topic > " << topic << endl;
794+
Interface::get().getLogger() << "len > " << len << endl;
795+
Interface::get().getLogger() << "index > " << index << endl;
796+
Interface::get().getLogger() << "total > " << total << endl;
797+
*/
782798
if (total == 0) return; // no empty message possible
783799

784800
if (index == 0) {
@@ -875,6 +891,13 @@ bool HomieInternals::BootNormal::__fillPayloadBuffer(char * topic, char * payloa
875891
}
876892

877893
bool HomieInternals::BootNormal::__handleOTAUpdates(char* topic, char* payload, const AsyncMqttClientMessageProperties& properties, size_t len, size_t index, size_t total) {
894+
/*
895+
Interface::get().getLogger() << F("HomieInternals::BootNormal::__handleOTAUpdates...") << endl;
896+
Interface::get().getLogger() << "0 > " << _mqttTopicLevels.get()[0] << endl;
897+
Interface::get().getLogger() << "1 > " << _mqttTopicLevels.get()[1] << endl;
898+
Interface::get().getLogger() << "2 > " << _mqttTopicLevels.get()[2] << endl;
899+
Interface::get().getLogger() << "3 > " << _mqttTopicLevels.get()[3] << endl;
900+
*/
878901
if (
879902
_mqttTopicLevelsCount == 5
880903
&& strcmp(_mqttTopicLevels.get()[0], Interface::get().getConfig().get().deviceId) == 0
@@ -1047,6 +1070,7 @@ bool HomieInternals::BootNormal::__handleOTAUpdates(char* topic, char* payload,
10471070
}
10481071
return true;
10491072
}
1073+
Interface::get().getLogger() << F("HomieInternals::BootNormal::__handleOTAUpdates FALSE") << endl;
10501074
return false;
10511075
}
10521076

src/Homie/Config.cpp

+14
Original file line numberDiff line numberDiff line change
@@ -90,6 +90,8 @@ bool Config::load() {
9090
const char* reqMqttUsername = reqMqtt["username"] | "";
9191
const char* reqMqttPassword = reqMqtt["password"] | "";
9292
const char* reqMqttFingerprint = reqMqtt["ssl_fingerprint"] | "";
93+
const char* reqMqttPsk = reqMqtt["psk"] | "";
94+
const char* reqMqttPskIdent = reqMqtt["psk_identity"] | "";
9395
const char* reqMqttBaseTopic = reqMqtt["base_topic"] | DEFAULT_MQTT_BASE_TOPIC;
9496

9597
strlcpy(_configStruct.name, reqName, MAX_FRIENDLY_NAME_LENGTH);
@@ -107,10 +109,15 @@ bool Config::load() {
107109
strlcpy(_configStruct.mqtt.server.host, reqMqttHost, MAX_HOSTNAME_LENGTH);
108110
#if ASYNC_TCP_SSL_ENABLED
109111
_configStruct.mqtt.server.ssl.enabled = reqMqttSsl;
112+
#if ESP8266
110113
if (strcmp_P(reqMqttFingerprint, PSTR("")) != 0) {
111114
_configStruct.mqtt.server.ssl.hasFingerprint = true;
112115
Helpers::hexStringToByteArray(reqMqttFingerprint, _configStruct.mqtt.server.ssl.fingerprint, MAX_FINGERPRINT_SIZE);
113116
}
117+
#elif defined(ESP32)
118+
strlcpy(_configStruct.mqtt.server.ssl.psk, reqMqttPsk, MAX_PSK_STRING_LENGTH);
119+
strlcpy(_configStruct.mqtt.server.ssl.psk_ident, reqMqttPskIdent, MAX_PSK_STRING_LENGTH);
120+
#endif
114121
#endif
115122
_configStruct.mqtt.server.port = reqMqttPort;
116123
strlcpy(_configStruct.mqtt.baseTopic, reqMqttBaseTopic, MAX_MQTT_BASE_TOPIC_LENGTH);
@@ -305,11 +312,18 @@ void Config::log() const {
305312
Interface::get().getLogger() << F(" ◦ Port: ") << _configStruct.mqtt.server.port << endl;
306313
#if ASYNC_TCP_SSL_ENABLED
307314
Interface::get().getLogger() << F(" ◦ SSL enabled: ") << (_configStruct.mqtt.server.ssl.enabled ? "true" : "false") << endl;
315+
#if ESP8266
308316
if (_configStruct.mqtt.server.ssl.enabled && _configStruct.mqtt.server.ssl.hasFingerprint) {
309317
char hexBuf[MAX_FINGERPRINT_STRING_LENGTH];
310318
Helpers::byteArrayToHexString(Interface::get().getConfig().get().mqtt.server.ssl.fingerprint, hexBuf, MAX_FINGERPRINT_SIZE);
311319
Interface::get().getLogger() << F(" ◦ Fingerprint: ") << hexBuf << endl;
312320
}
321+
#elif defined(ESP32)
322+
if (_configStruct.mqtt.server.ssl.enabled) {
323+
Interface::get().getLogger() << F(" ◦ PSK identity not shown") << endl;
324+
Interface::get().getLogger() << F(" ◦ PSK not shown") << endl;
325+
}
326+
#endif
313327
#endif
314328
Interface::get().getLogger() << F(" ◦ Base topic: ") << _configStruct.mqtt.baseTopic << endl;
315329
Interface::get().getLogger() << F(" ◦ Auth? ") << (_configStruct.mqtt.auth ? F("yes") : F("no")) << endl;

src/Homie/Datatypes/ConfigStruct.hpp

+6
Original file line numberDiff line numberDiff line change
@@ -28,9 +28,14 @@ struct ConfigStruct {
2828
#if ASYNC_TCP_SSL_ENABLED
2929
struct {
3030
bool enabled;
31+
#if ESP8266
3132
bool hasFingerprint;
3233
uint8_t fingerprint[MAX_FINGERPRINT_SIZE];
34+
#elif ESP32
35+
char psk_ident[MAX_PSK_STRING_LENGTH];
36+
char psk[MAX_PSK_STRING_LENGTH];
3337
} ssl;
38+
#endif
3439
#endif
3540
} server;
3641
char baseTopic[MAX_MQTT_BASE_TOPIC_LENGTH];
@@ -44,3 +49,4 @@ struct ConfigStruct {
4449
} ota;
4550
};
4651
} // namespace HomieInternals
52+

src/Homie/Limits.hpp

+2
Original file line numberDiff line numberDiff line change
@@ -36,4 +36,6 @@ namespace HomieInternals {
3636

3737
const uint8_t MAX_IP_STRING_LENGTH = 16 + 1;
3838

39+
const uint8_t MAX_PSK_STRING_LENGTH = 64 + 1;
40+
3941
} // namespace HomieInternals

0 commit comments

Comments
 (0)