From eee7431e0350b59c94998fa6ad5ff020d6d630b8 Mon Sep 17 00:00:00 2001 From: Larry Bernstone Date: Fri, 12 Oct 2018 12:53:05 -0600 Subject: [PATCH] Added loadCert methods to WiFiClientSecure --- .../WiFiClientSecure/src/WiFiClientSecure.cpp | 45 +++++++++++++++++++ .../WiFiClientSecure/src/WiFiClientSecure.h | 6 +++ 2 files changed, 51 insertions(+) diff --git a/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp b/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp index 23bf1068062..40054f1c1e1 100644 --- a/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp +++ b/libraries/WiFiClientSecure/src/WiFiClientSecure.cpp @@ -230,6 +230,51 @@ bool WiFiClientSecure::verify(const char* fp, const char* domain_name) return verify_ssl_fingerprint(sslclient, fp, domain_name); } +char *WiFiClientSecure::_streamLoad(Stream& stream, size_t size) { + char *dest = (char*)malloc(size); + if (!dest) { + return nullptr; + } + if (size != stream.readBytes(dest, size)) { + free(dest); + return nullptr; + } + char ret[size+1]; + snprintf(ret, size, "%s", dest); + free(dest); + return ret; +} + +bool WiFiClientSecure::loadCACert(Stream& stream, size_t size) { + char *dest = _streamLoad(stream, size); + bool ret = false; + if (dest) { + setCACert(dest); + ret = true; + } + return ret; +} + +bool WiFiClientSecure::loadCertificate(Stream& stream, size_t size) { + char *dest = _streamLoad(stream, size); + bool ret = false; + if (dest) { + setCertificate(dest); + ret = true; + } + return ret; +} + +bool WiFiClientSecure::loadPrivateKey(Stream& stream, size_t size) { + char *dest = _streamLoad(stream, size); + bool ret = false; + if (dest) { + setPrivateKey(dest); + ret = true; + } + return ret; +} + int WiFiClientSecure::lastError(char *buf, const size_t size) { if (!_lastError) { diff --git a/libraries/WiFiClientSecure/src/WiFiClientSecure.h b/libraries/WiFiClientSecure/src/WiFiClientSecure.h index 60f24e79b81..21d9152fc3a 100644 --- a/libraries/WiFiClientSecure/src/WiFiClientSecure.h +++ b/libraries/WiFiClientSecure/src/WiFiClientSecure.h @@ -58,6 +58,9 @@ class WiFiClientSecure : public WiFiClient void setCACert(const char *rootCA); void setCertificate(const char *client_ca); void setPrivateKey (const char *private_key); + bool loadCACert(Stream& stream, size_t size); + bool loadCertificate(Stream& stream, size_t size); + bool loadPrivateKey(Stream& stream, size_t size); bool verify(const char* fingerprint, const char* domain_name); operator bool() @@ -84,6 +87,9 @@ class WiFiClientSecure : public WiFiClient return sslclient->socket = -1; } +private: + char *_streamLoad(Stream& stream, size_t size); + //friend class WiFiServer; using Print::write; };