Important changes to repositories hosted on mbed.com
Mbed hosted mercurial repositories are deprecated and are due to be permanently deleted in July 2026.
To keep a copy of this software download the repository Zip archive or clone locally using Mercurial.
It is also possible to export all your personal repositories from the account settings page.
Dependencies: mbed HTTPClient SHA256 uECC MMA8451Q W5500Interface
Revision 0:c04aac922df3, committed 2019-07-30
- Comitter:
- kelapuresarthak
- Date:
- Tue Jul 30 09:00:36 2019 +0000
- Commit message:
- test
Changed in this revision
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/HTTPClient.lib Tue Jul 30 09:00:36 2019 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/users/kaizen/code/HTTPClient/#9ba72b4d7ffc
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/MMA8451Q.lib Tue Jul 30 09:00:36 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/kelapuresarthak/code/MMA8451Q/#4549fb37670a
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/SHA256.lib Tue Jul 30 09:00:36 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/Remco/code/SHA256/#c0ed1bf37651
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/W5500Interface.lib Tue Jul 30 09:00:36 2019 +0000 @@ -0,0 +1,1 @@ +http://mbed.org/teams/EthernetInterfaceW5500-makers/code/W5500Interface/#af0ed4fbca02
--- /dev/null Thu Jan 01 00:00:00 1970 +0000
+++ b/main.cpp Tue Jul 30 09:00:36 2019 +0000
@@ -0,0 +1,211 @@
+#include "mbed.h"
+#include "uECC.h"
+#include "MMA8451Q.h"
+#include "SHA256.h"
+#include <string>
+#include <stdlib.h>
+#include "W5500Interface/EthernetInterface.h"
+#include "HTTPClient.h"
+using namespace std;
+
+
+char privateKey[43];
+char publicKey[81];
+
+char myDevID[6];
+
+PinName const SDA = PTE25;
+PinName const SCL = PTE24;
+bool isHashed = false;
+
+#define MMA8451_I2C_ADDRESS (0x1d<<1)
+
+int count = 0;
+int blockNo = 0;
+SHA256 hash;
+unsigned int mac_addr[6] = {0x00, 0x08, 0xdc, 0x1c, 0xb8, 0x4a};
+
+char* DEV_ID;
+
+static int RNG(uint8_t *dest, unsigned size) {
+ //TODO: Add Random number according to mac addr
+ return 1;
+}
+
+/*
+Generate Keys using uECC, private and public key. secp256k1
+*/
+void getKeys(){
+ const struct uECC_Curve_t * curve = uECC_secp256k1();
+ uint8_t privKey[21];
+
+ uint8_t pubKey[40];
+
+ int key_status = uECC_make_key(pubKey, privKey, curve);
+ if(key_status)
+ {
+ for(int i = 0; i < 21; ++i) {
+ sprintf(privateKey+2*i,"%02x", privKey[i]);
+ }
+ for(int j = 0; j < 40; ++j) {
+ sprintf(publicKey+2*j,"%02x", pubKey[j]);
+ }
+ }
+
+ wait(1);
+}
+
+/*
+Send data to the REST API
+*/
+char* sendData(int block, char* data, char* hash)
+{
+ char sendIP[100]= "192.168.0.110";
+ char str[512];
+ char get_msg[1024];
+ //data?dev_id=123456&block=1&data=1,2,3,4,5,6,7,8,9,10&hash=123456abcdef...
+
+ sprintf(get_msg, "http://%s:5000/data?dev_id=%s&block=%d&data=%s&hash=%s", sendIP,DEV_ID,block,data,hash);
+
+ HTTPClient http;
+
+ printf("msg : %s\r\n",get_msg);
+ int ret = http.get(get_msg, str, sizeof(str));
+ if(!ret)
+ {
+ printf("\r\nPage fetched successfully - read %d characters\r\n", strlen(str));
+ printf("Result: %s\r\n", str);
+ memset(&myDevID,'\0',6);
+ strcat(myDevID,str);
+ return myDevID;
+ }
+ else
+ {
+ printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());
+ return "Error";
+ }
+}
+
+/*
+Function to get the hash of the data
+Input- SHA256 Object
+Output- char*
+*/
+char* hashData(SHA256 data)
+{
+ return (char*)hash.hexString().c_str();
+}
+
+/*
+Function to sign the data
+Input- char*
+Output- char*
+*/
+char* signData(char* data)
+{
+ const struct uECC_Curve_t * curve = uECC_secp256k1();
+ return (char*)uECC_shared_secret((uint8_t*)publicKey, (uint8_t*)privateKey, (uint8_t*)data, curve);
+}
+/*
+Register the device, public key using REST API
+*/
+char* registerDevice(char* pubKey)
+{
+ char sendIP[100]= "192.168.0.110";
+ char str[512];
+ char get_msg[512];
+ sprintf(get_msg, "http://%s:5000/register?PublicKey=%s", sendIP,pubKey);
+ //"http://192.168.0.110:5000/register?PublicKey=7834783543874";
+
+ HTTPClient http;
+
+ printf("msg : %s\r\n",get_msg);
+ int ret = http.get(get_msg, str, sizeof(str));
+ if(!ret)
+ {
+ printf("\r\nPage fetched successfully - read %d characters\r\n", strlen(str));
+ printf("Result: %s\r\n", str);
+ memset(&myDevID,'\0',6);
+ strcat(myDevID,str);
+ return myDevID;
+ }
+ else
+ {
+ printf("Error - ret = %d - HTTP return code = %d\n", ret, http.getHTTPResponseCode());
+ return "Error";
+ }
+}
+
+int main(void)
+{
+ char data[30];
+ memset(data,'\0',strlen(data));
+ MMA8451Q acc(SDA, SCL, MMA8451_I2C_ADDRESS);
+ PwmOut rled(LED1);
+ PwmOut gled(LED2);
+ PwmOut bled(LED3);
+ uECC_set_rng(&RNG);
+ printf("My Keys are\r\n");
+ getKeys();
+ printf("Public Key %s\r\n", publicKey);
+ printf("Private Key %s\r\n", privateKey);
+ printf("MMA8451 ID: %d\r\n", acc.getWhoAmI());
+ uint8_t myPos = acc.getOrientation();
+ uint8_t myOldPos = myPos;
+
+ //Ethernet enable
+ printf("spi init\r\n");
+ SPI spi(D11, D12, D13); // mosi, miso, sclk
+ wait(1); // 1 second for stable state
+ EthernetInterface eth(&spi, D10, D9);//scs(D10), nRESET(PTA20)
+ printf("App Start\r\n");
+ wait(1); // 1 second for stable state
+
+ uint8_t mac_addr[6] = {0x22, 0x12, 0x34, 0x1c, 0xb8, 0x4a}; // for example
+
+ eth.init((uint8_t *)mac_addr); //Use DHCP
+ eth.connect();
+ printf("Initialized, MAC: %s\r\n", eth.getMACAddress());
+ printf("Connected, IP: %s, MASK: %s, GW: %s\r\n",
+ eth.getIPAddress(), eth.getNetworkMask(), eth.getGateway());
+
+ DEV_ID = (char*)registerDevice(publicKey);
+ if(DEV_ID == "Error")
+ {
+ printf("ERROR IN REGISTRATION\r\n");
+ while(1);
+ }
+ while(true)
+ {
+ myPos = acc.getOrientation();
+ if(abs((int)myPos - (int)myOldPos) > 1)
+ {
+ printf("Count ");
+ count++;
+ printf("%d\r\n",count);
+ char temp[3];
+ sprintf(temp,"%d",count);
+ strcat(data,temp);
+ strcat(data,",");
+ myOldPos = myPos;
+ isHashed = false;
+ }
+ if(count % 10 == 0 && count !=0 && isHashed == false)
+ {
+ blockNo++;
+ data[strlen(data)-1] = '\0';
+ printf("Data %s\r\n", data);
+ hash.append(data);
+ hash.finalize();
+ printf("hash for block %d ", blockNo);
+ printf("%s\r\n", hashData(hash));
+ sendData(blockNo, data, hashData(hash));
+ hash.reset();
+ memset(data,'\0',strlen(data));
+ isHashed = true;
+ }
+ wait(1);
+ }
+}
+
+
\ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/mbed.bld Tue Jul 30 09:00:36 2019 +0000 @@ -0,0 +1,1 @@ +https://os.mbed.com/users/mbed_official/code/mbed/builds/65be27845400 \ No newline at end of file
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/uECC.lib Tue Jul 30 09:00:36 2019 +0000 @@ -0,0 +1,1 @@ +https://developer.mbed.org/users/allankliu/code/uECC/#b6fdeddc0bc9