Skip to content

Commit b6b5569

Browse files
committed
Copy key and cert to malloc()ed memory. Needed for persistency, but also because PROGMEM key/cert are not always supported by esp32_https_server.
1 parent d0d1353 commit b6b5569

File tree

2 files changed

+17
-3
lines changed

2 files changed

+17
-3
lines changed

src/ESPWebServerSecure.cpp

Lines changed: 15 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,9 @@
44
ESPWebServerSecure::ESPWebServerSecure(IPAddress addr, int port)
55
: ESPWebServer(new httpsserver::HTTPSServer(&_sslCert, port, 4, addr)),
66
_underlyingServer(this),
7-
_sslCert()
7+
_sslCert(),
8+
keyStore(NULL),
9+
certStore(NULL)
810
{}
911

1012
ESPWebServerSecure::ESPWebServerSecure(int port)
@@ -14,8 +16,18 @@ ESPWebServerSecure::ESPWebServerSecure(int port)
1416
{}
1517

1618
void ESPWebServerSecure::setServerKeyAndCert(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen) {
17-
_sslCert.setPK((unsigned char *)key, keyLen);
18-
_sslCert.setCert((unsigned char *)cert, certLen);
19+
if (keyStore) free(keyStore);
20+
if (certStore) free(certStore);
21+
keyStore = (uint8_t *)malloc(keyLen);
22+
certStore = (uint8_t *)malloc(certLen);
23+
if (keyStore == NULL || certStore == NULL) {
24+
HTTPS_LOGE("Out of memory for key and cert");
25+
return;
26+
}
27+
memcpy_P(keyStore, key, keyLen);
28+
memcpy_P(certStore, cert, certLen);
29+
_sslCert.setPK(keyStore, keyLen);
30+
_sslCert.setCert(certStore, certLen);
1931
}
2032

2133
void ESPWebServerSecure::setServerKeyAndCert_P(const uint8_t *key, int keyLen, const uint8_t *cert, int certLen) {

src/ESPWebServerSecure.hpp

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,6 +31,8 @@ class ESPWebServerSecure : public ESPWebServer {
3131
protected:
3232
ESPWebServerUnderlyingServer _underlyingServer;
3333
httpsserver::SSLCert _sslCert;
34+
uint8_t* keyStore;
35+
uint8_t* certStore;
3436
};
3537

3638
#endif //ESPWEBSERVERSECURE_H

0 commit comments

Comments
 (0)