MAXREFDES143#: DeepCover Embedded Security in IoT Authenticated Sensing & Notification

Dependencies:   MaximInterface mbed

The MAXREFDES143# is an Internet of Things (IoT) embedded security reference design, built to protect an industrial sensing node by means of authentication and notification to a web server. The hardware includes a peripheral module representing a protected sensor node monitoring operating temperature and remaining life of a filter (simulated through ambient light sensing) and an mbed shield representing a controller node responsible for monitoring one or more sensor nodes. The design is hierarchical with each controller node communicating data from connected sensor nodes to a web server that maintains a centralized log and dispatches notifications as necessary. The mbed shield contains a Wi-Fi module, a DS2465 coprocessor with 1-Wire® master function, an LCD, LEDs, and pushbuttons. The protected sensor node contains a DS28E15 authenticator, a DS7505 temperature sensor, and a MAX44009 light sensor. The mbed shield communicates to a web server by the onboard Wi-Fi module and to the protected sensor node with I2C and 1-Wire. The MAXREFDES143# is equipped with a standard shield connector for immediate testing using an mbed board such as the MAX32600MBED#. The simplicity of this design enables rapid integration into any star-topology IoT network requiring the heightened security with low overhead provided by the SHA-256 symmetric-key algorithm.

More information about the MAXREFDES143# is available on the Maxim Integrated website.

Files at this revision

API Documentation at this revision

Comitter:
IanBenzMaxim
Date:
Tue Sep 06 11:33:14 2016 -0500
Parent:
19:b8b0cd35f7b4
Child:
21:b43e2f7bea6f
Commit message:
Fixed issues flagged by GCC.

Changed in this revision

ESP8266.cpp Show annotated file Show diff for this revision Revisions of this file
SensorNode.cpp Show annotated file Show diff for this revision Revisions of this file
WebServerInterface.cpp Show annotated file Show diff for this revision Revisions of this file
common.cpp Show annotated file Show diff for this revision Revisions of this file
main.cpp Show annotated file Show diff for this revision Revisions of this file
--- a/ESP8266.cpp	Mon Aug 15 13:59:17 2016 +0000
+++ b/ESP8266.cpp	Tue Sep 06 11:33:14 2016 -0500
@@ -350,7 +350,7 @@
   static const size_t maxSizeDigits = 4;
   
   static size_t dataFinishedSize = 0;
-  static int index = 0;
+  static size_t index = 0;
   static char sizeDigits[] = { '\0', '\0', '\0', '\0', '\0' };
   static DataRecvState state = Header;
   
--- a/SensorNode.cpp	Mon Aug 15 13:59:17 2016 +0000
+++ b/SensorNode.cpp	Tue Sep 06 11:33:14 2016 -0500
@@ -159,7 +159,7 @@
 bool SensorNode::readSensorData(SensorData & sensorData)
 {
   bool result;
-  std::int8_t temp;
+  int8_t temp;
   
   // Read temperature sensor
   result = (ds7505.read_current_temp(temp) == DS7505::Success);
--- a/WebServerInterface.cpp	Mon Aug 15 13:59:17 2016 +0000
+++ b/WebServerInterface.cpp	Tue Sep 06 11:33:14 2016 -0500
@@ -213,7 +213,7 @@
   calculateHttpPostMac(macCoproc, &hashInput[0], hashInput.size(), mac);
   
   char contentLen[5];
-  std::snprintf(contentLen, sizeof(contentLen) / sizeof(char), "%u", (hashInput.size() - challengeLen) + (mac.length * charsPerByte) + 5 /* &MAC= */);
+  snprintf(contentLen, sizeof(contentLen) / sizeof(contentLen[0]), "%u", (hashInput.size() - challengeLen) + (mac.length * charsPerByte) + 5 /* &MAC= */);
   
   // Construct full post request
   httpPost = "";
--- a/common.cpp	Mon Aug 15 13:59:17 2016 +0000
+++ b/common.cpp	Tue Sep 06 11:33:14 2016 -0500
@@ -31,6 +31,7 @@
 *******************************************************************************
 */
 
+#include <stdio.h>
 #include "common.hpp"
 
 const size_t charsPerByte = 2;
@@ -48,7 +49,7 @@
   char hexBuf[charsPerByte + 1];
   for (size_t i = 0; i < byteArraySize; i++)
   {
-    std::snprintf(hexBuf, (sizeof(hexBuf) / sizeof(hexBuf[0])), "%2.2X", byteArray[i]);
+    snprintf(hexBuf, (sizeof(hexBuf) / sizeof(hexBuf[0])), "%2.2X", byteArray[i]);
     hexString.append(hexBuf, charsPerByte);
   }
 }
\ No newline at end of file
--- a/main.cpp	Mon Aug 15 13:59:17 2016 +0000
+++ b/main.cpp	Tue Sep 06 11:33:14 2016 -0500
@@ -266,7 +266,7 @@
           filterLifeAlarmLed = !sensorData.filterLifeAlarm(); // Active Low
           
           // Send measurements to web if time interval reached
-          if (webPostTimer.read_ms() >= webPostIntervalMs)
+          if (static_cast<unsigned int>(webPostTimer.read_ms()) >= webPostIntervalMs)
           {
             // Format, sign, and transmit data to web server
             result = webIntf.authPostHttpEvent(ds2465, SensorDataEvent, WebServerInterface::formatSensorDataPostBody(sensorData), !useInvalidSecret);
@@ -316,7 +316,7 @@
           break;
         }
         // Try to authenticate and return to normal operation
-        else if (webPostTimer.read_ms() >= webPostIntervalMs)
+        else if (static_cast<unsigned int>(webPostTimer.read_ms()) >= webPostIntervalMs)
         {
           // Send event message to server
           result = webIntf.authPostHttpEvent(ds2465, InvalidSensorEvent, "", !useInvalidSecret);
@@ -343,7 +343,7 @@
             break;
           }
         }
-      } while (retryTimer.read_ms() < webPostIntervalMs);
+      } while (static_cast<unsigned int>(retryTimer.read_ms()) < webPostIntervalMs);
       retryTimer.stop();
       break;