DeepPass / mDot_AT_firmware

Dependencies:   MTS-Serial libmDot mbed-rtos mbed-src

Fork of mDot_AT_firmware by MultiTech

Embed: (wiki syntax)

« Back to documentation index

Show/hide line numbers CmdNetworkKey.cpp Source File

CmdNetworkKey.cpp

00001 #include "CmdNetworkKey.h"
00002 
00003 CmdNetworkKey::CmdNetworkKey(mDot* dot, mts::MTSSerial& serial) :
00004     Command(dot, "Network Key", "AT+NK", "Configured network key/passphrase (App Key in LoraMac) ##  AT+NK=0,hex  AT+NK=1,passphrase (Net key = cmac(passphrase)) (16 bytes)"),
00005     _serial(serial)
00006 {
00007     _help = std::string(text()) + ": " + std::string(desc());
00008     _usage = "(0,(hex:16)),(1,(string:128))";
00009     _queryable = true;
00010 }
00011 
00012 uint32_t CmdNetworkKey::action(std::vector<std::string> args)
00013 {
00014     if (args.size() == 1)
00015     {
00016         if (_dot->getVerbose())
00017             _serial.writef("Network Key: ");
00018 
00019         _serial.writef("%s\r\n", mts::Text::bin2hexString(_dot->getNetworkKey(), ".").c_str());
00020         if (!_dot->getNetworkPassphrase().empty())
00021             _serial.writef("Passphrase: '%s'\r\n", _dot->getNetworkPassphrase().c_str());
00022 
00023     }
00024     else if (args.size() == 3)
00025     {
00026         int32_t code;
00027 
00028         if (args[1].find("1") == 0 && args[1].size() == 1)
00029         {
00030             std::string text;
00031             if (args.size() > 3)
00032             {
00033                 // passphrase was split on commas
00034                 for (size_t i = 2; i < args.size(); i++)
00035                 {
00036                     text.append(args[i]);
00037                     if (i < args.size() - 1)
00038                         text.append(",");
00039                 }
00040             }
00041             else
00042             {
00043                 text = args[2];
00044             }
00045 
00046             if ((code = _dot->setNetworkPassphrase(text)) == mDot::MDOT_OK)
00047             {
00048                 _serial.writef("Set Network Passphrase: ");
00049                 _serial.writef("%s\r\n", text.c_str());
00050             }
00051             else
00052             {
00053                 std::string error = mDot::getReturnCodeString(code) + " - " + _dot->getLastError();
00054                 setErrorMessage(error);
00055                 return 1;
00056             }
00057         }
00058         else
00059         {
00060             std::vector<uint8_t> NewKey;
00061             readByteArray(args[2], NewKey, KEY_LENGTH);
00062             if ((code = _dot->setNetworkKey(NewKey)) == mDot::MDOT_OK)
00063             {
00064                 _serial.writef("Set Network Key: ");
00065                 _serial.writef("%s\r\n", mts::Text::bin2hexString(NewKey, ".").c_str());
00066             }
00067             else
00068             {
00069                 std::string error = mDot::getReturnCodeString(code) + " - " + _dot->getLastError();
00070                 setErrorMessage(error);
00071                 return 1;
00072             }
00073         }
00074     }
00075 
00076     return 0;
00077 }
00078 
00079 bool CmdNetworkKey::verify(std::vector<std::string> args)
00080 {
00081     if (args.size() == 1)
00082         return true;
00083 
00084     if (args.size() == 3) {
00085         if (args[1] != "0" && args[1] != "1") {
00086             setErrorMessage("Invalid type, expects (0,1)");
00087             return false;
00088         }
00089         if (args[1] == "0" && !isHexString(args[2], 16)) {
00090             setErrorMessage("Invalid key, expects (hex:16)");
00091             return false;
00092         }
00093 
00094         if (args[1] == "1" && args[2].size() < 8) {
00095             setErrorMessage("Invalid name, expects minimum 8 characters");
00096             return false;
00097         }
00098 
00099         if (args[1] == "1" && (args[2].size() > 128 || args[2].size() < 8)) {
00100             setErrorMessage("Invalid passphrase, expects (string:8-128)");
00101             return false;
00102         }
00103 
00104         return true;
00105     }
00106 
00107     setErrorMessage("Invalid arguments");
00108     return false;
00109 }
00110