tracker.cpp 3.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141
  1. // Local imports
  2. #include "crypto.h"
  3. #include "rng.h"
  4. #include <WiFi.h>
  5. #include <WiFiClient.h>
  6. // Energia constructors
  7. #include "Arduino.h"
  8. #define MLEN 32
  9. void setup();
  10. void loop();
  11. char ssid[] = "";
  12. char pass[] = "";
  13. uint16_t ID = 1050; // Device ID
  14. uint16_t port = 9000;
  15. IPAddress server(192,168,0,10);
  16. WiFiClient wclient;
  17. uint8_t aes_key[16] = {
  18. 0x03, 0x02, 0x01, 0x00,
  19. 0x07, 0x06, 0x05, 0x04,
  20. 0x0b, 0x0a, 0x09, 0x08,
  21. 0x0f, 0x0e, 0x0d, 0x0c
  22. };
  23. typedef struct {
  24. uint16_t ID;
  25. uint16_t LEN;
  26. } header;
  27. uint8_t AESData[MLEN], *AESResult, AESResult2[MLEN];
  28. uint32_t AESDataLength=MLEN;
  29. void setup() {
  30. // initialising
  31. Serial.begin(9600);
  32. Serial.print("Setup RNG ..");
  33. RNGSetup();
  34. Serial.println("OK");
  35. Serial.print("Setup AES ..");
  36. AESSetup(AES_KEY_128BIT, aes_key);
  37. Serial.println("OK");
  38. Serial.print("Setup WiFi ..");
  39. WiFi.begin(ssid, pass);
  40. while (WiFi.status() != WL_CONNECTED) {delay(200);}
  41. Serial.println("OK");
  42. Serial.print("Setup DHCP ..");
  43. while (WiFi.localIP() == INADDR_NONE) {delay(200);}
  44. Serial.print("OK ");
  45. Serial.println(WiFi.localIP());
  46. Serial.print("Setup Socket ..");
  47. while(wclient.connect(server, port) == false) {delay(200);}
  48. Serial.println("OK");
  49. //String msg = "This is secret!";
  50. //msg.toCharArray((char *)AESData, MLEN);
  51. //
  52. // Serial.print("KEY: ");
  53. // for(int i=0;i<16;i++) {
  54. // Serial.print(aes_key[i], HEX);
  55. // Serial.print(' ');
  56. // }
  57. // Serial.println();
  58. //
  59. // Serial.print("IV: ");
  60. // for(int i=0;i<16;i++) {
  61. // Serial.print(aes_iv[i], HEX);
  62. // Serial.print(' ');
  63. // }
  64. // Serial.println();
  65. //
  66. // Serial.print("Message: ");
  67. // for(int i=0;i<MLEN;i++) {
  68. // Serial.print(AESData[i], HEX);
  69. // Serial.print(' ');
  70. // }
  71. // Serial.println();
  72. //
  73. //AESResult = AESEncrypt(AESData, AESDataLength);
  74. // AESCrypt(AES_DIR_ENCRYPT, aes_iv, AESData, AESResult, AESDataLength);
  75. //Serial.print("Encrypted: ");
  76. //for(uint32_t i=0;i<AESDataLength+getBlockSize();i++) {
  77. //Serial.print(AESResult[i], HEX);
  78. //Serial.print(' ');
  79. //}
  80. //Serial.println();
  81. // AESCrypt(AES_DIR_DECRYPT, &aesv, AESResult, AESResult2, AESDataLength);
  82. // Serial.print("Decrypted: ");
  83. // for(int i=0;i<MLEN;i++) {
  84. // Serial.print(AESResult2[i], HEX);
  85. // Serial.print(' ');
  86. // }
  87. // Serial.println();
  88. }
  89. uint8_t buffer[32] = {0};
  90. uint16_t bufferPnt = 0;
  91. void send() {
  92. uint32_t resLen = 0;
  93. Serial.print("encrypting..");
  94. uint8_t *res = AESEncrypt(buffer, 32, &resLen);
  95. Serial.println(resLen);
  96. header h = {ID, resLen};
  97. wclient.write((uint8_t *) &h, sizeof(h));
  98. wclient.write(res, (uint16_t) resLen);
  99. free(res);
  100. bufferPnt = 0;
  101. }
  102. void loop() {
  103. while (Serial.available() > 0) {
  104. uint8_t val = Serial.read();
  105. Serial.write(val); // echo
  106. if ((val == 8 || val == 127) && bufferPnt > 0) {
  107. bufferPnt--;
  108. continue;
  109. }
  110. if(val == 13) {
  111. send();
  112. continue;
  113. }
  114. if(bufferPnt >= 255) send();
  115. buffer[bufferPnt] = val;
  116. bufferPnt++;
  117. }
  118. }