sforkowany z mirror/meshtastic-firmware
commit
bce2c9347b
|
@ -183,7 +183,7 @@ build_flags =
|
||||||
-Isdk-nrfxlib/crypto/nrf_oberon/include -Lsdk-nrfxlib/crypto/nrf_oberon/lib/cortex-m4/hard-float/ -lliboberon_3.0.3
|
-Isdk-nrfxlib/crypto/nrf_oberon/include -Lsdk-nrfxlib/crypto/nrf_oberon/lib/cortex-m4/hard-float/ -lliboberon_3.0.3
|
||||||
;-DCFG_DEBUG=3
|
;-DCFG_DEBUG=3
|
||||||
src_filter =
|
src_filter =
|
||||||
${arduino_base.src_filter} -<esp32/> -<nimble/> -<meshwifi/>
|
${arduino_base.src_filter} -<esp32/> -<nimble/> -<meshwifi/> -<mesh/wifi/>
|
||||||
lib_ignore =
|
lib_ignore =
|
||||||
BluetoothOTA
|
BluetoothOTA
|
||||||
monitor_port = /dev/ttyACM1
|
monitor_port = /dev/ttyACM1
|
||||||
|
@ -314,6 +314,9 @@ src_filter = ${env.src_filter} -<esp32/> -<nimble/> -<nrf52/> -<meshwifi/>
|
||||||
build_flags = ${arduino_base.build_flags} -O0
|
build_flags = ${arduino_base.build_flags} -O0
|
||||||
framework = arduino
|
framework = arduino
|
||||||
board = linux_x86_64
|
board = linux_x86_64
|
||||||
|
lib_deps =
|
||||||
|
${arduino_base.lib_deps}
|
||||||
|
rweather/Crypto
|
||||||
|
|
||||||
; The GenieBlocks LORA prototype board
|
; The GenieBlocks LORA prototype board
|
||||||
[env:genieblocks_lora]
|
[env:genieblocks_lora]
|
||||||
|
|
|
@ -402,7 +402,7 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
||||||
#define RF95_SCK 5
|
#define RF95_SCK 5
|
||||||
#define RF95_MISO 19
|
#define RF95_MISO 19
|
||||||
#define RF95_MOSI 27
|
#define RF95_MOSI 27
|
||||||
#define RF95_NSS 18
|
#define RF95_NSS RADIOLIB_NC // the ch341f spi controller does CS for us
|
||||||
|
|
||||||
#endif
|
#endif
|
||||||
|
|
||||||
|
|
|
@ -5,7 +5,7 @@
|
||||||
|
|
||||||
WiFiServerAPI::WiFiServerAPI(WiFiClient &_client) : StreamAPI(&client), client(_client)
|
WiFiServerAPI::WiFiServerAPI(WiFiClient &_client) : StreamAPI(&client), client(_client)
|
||||||
{
|
{
|
||||||
DEBUG_MSG("Incoming connection from %s\n", client.remoteIP().toString().c_str());
|
DEBUG_MSG("Incoming wifi connection\n");
|
||||||
}
|
}
|
||||||
|
|
||||||
WiFiServerAPI::~WiFiServerAPI()
|
WiFiServerAPI::~WiFiServerAPI()
|
|
@ -1,6 +1,6 @@
|
||||||
#include "meshwifi.h"
|
#include "meshwifi.h"
|
||||||
#include "NodeDB.h"
|
#include "NodeDB.h"
|
||||||
#include "WiFiServerAPI.h"
|
#include "mesh/wifi/WiFiServerAPI.h"
|
||||||
#include "configuration.h"
|
#include "configuration.h"
|
||||||
#include "main.h"
|
#include "main.h"
|
||||||
#include "meshwifi/meshhttp.h"
|
#include "meshwifi/meshhttp.h"
|
||||||
|
|
|
@ -31,10 +31,16 @@ MeshPacket *PositionPlugin::allocReply()
|
||||||
{
|
{
|
||||||
NodeInfo *node = nodeDB.getNode(nodeDB.getNodeNum());
|
NodeInfo *node = nodeDB.getNode(nodeDB.getNodeNum());
|
||||||
assert(node);
|
assert(node);
|
||||||
assert(node->has_position);
|
|
||||||
|
// We might not have a position yet for our local node, in that case, at least try to send the time
|
||||||
|
if(!node->has_position) {
|
||||||
|
memset(&node->position, 0, sizeof(node->position));
|
||||||
|
node->has_position = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
Position &position = node->position;
|
||||||
|
|
||||||
// Update our local node info with our position (even if we don't decide to update anyone else)
|
// Update our local node info with our position (even if we don't decide to update anyone else)
|
||||||
auto position = node->position;
|
|
||||||
position.time = getValidTime(RTCQualityGPS); // This nodedb timestamp might be stale, so update it if our clock is valid.
|
position.time = getValidTime(RTCQualityGPS); // This nodedb timestamp might be stale, so update it if our clock is valid.
|
||||||
|
|
||||||
return allocDataProtobuf(position);
|
return allocDataProtobuf(position);
|
||||||
|
|
|
@ -0,0 +1,82 @@
|
||||||
|
#include "AES.h"
|
||||||
|
#include "CTR.h"
|
||||||
|
#include "CryptoEngine.h"
|
||||||
|
#include "configuration.h"
|
||||||
|
|
||||||
|
/** A platform independent AES engine implemented using Tiny-AES
|
||||||
|
*/
|
||||||
|
class CrossPlatformCryptoEngine : public CryptoEngine
|
||||||
|
{
|
||||||
|
|
||||||
|
CTRCommon *ctr = NULL;
|
||||||
|
|
||||||
|
/// How many bytes in our key
|
||||||
|
uint8_t keySize = 0;
|
||||||
|
|
||||||
|
public:
|
||||||
|
CrossPlatformCryptoEngine() {}
|
||||||
|
|
||||||
|
~CrossPlatformCryptoEngine() {}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Set the key used for encrypt, decrypt.
|
||||||
|
*
|
||||||
|
* As a special case: If all bytes are zero, we assume _no encryption_ and send all data in cleartext.
|
||||||
|
*
|
||||||
|
* @param numBytes must be 16 (AES128), 32 (AES256) or 0 (no crypt)
|
||||||
|
* @param bytes a _static_ buffer that will remain valid for the life of this crypto instance (i.e. this class will cache the
|
||||||
|
* provided pointer)
|
||||||
|
*/
|
||||||
|
virtual void setKey(size_t numBytes, uint8_t *bytes)
|
||||||
|
{
|
||||||
|
keySize = numBytes;
|
||||||
|
DEBUG_MSG("Installing AES%d key!\n", numBytes * 8);
|
||||||
|
if (ctr) {
|
||||||
|
delete ctr;
|
||||||
|
ctr = NULL;
|
||||||
|
}
|
||||||
|
if (numBytes != 0) {
|
||||||
|
if (numBytes == 16)
|
||||||
|
ctr = new CTR<AES128>();
|
||||||
|
else
|
||||||
|
ctr = new CTR<AES256>();
|
||||||
|
|
||||||
|
ctr->setKey(bytes, numBytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Encrypt a packet
|
||||||
|
*
|
||||||
|
* @param bytes is updated in place
|
||||||
|
*/
|
||||||
|
virtual void encrypt(uint32_t fromNode, uint64_t packetNum, size_t numBytes, uint8_t *bytes)
|
||||||
|
{
|
||||||
|
if (keySize != 0) {
|
||||||
|
uint8_t stream_block[16];
|
||||||
|
static uint8_t scratch[MAX_BLOCKSIZE];
|
||||||
|
size_t nc_off = 0;
|
||||||
|
|
||||||
|
// DEBUG_MSG("ESP32 encrypt!\n");
|
||||||
|
initNonce(fromNode, packetNum);
|
||||||
|
assert(numBytes <= MAX_BLOCKSIZE);
|
||||||
|
memcpy(scratch, bytes, numBytes);
|
||||||
|
memset(scratch + numBytes, 0,
|
||||||
|
sizeof(scratch) - numBytes); // Fill rest of buffer with zero (in case cypher looks at it)
|
||||||
|
|
||||||
|
ctr->setIV(nonce, sizeof(nonce));
|
||||||
|
ctr->setCounterSize(4);
|
||||||
|
ctr->encrypt(bytes, scratch, numBytes);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
virtual void decrypt(uint32_t fromNode, uint64_t packetNum, size_t numBytes, uint8_t *bytes)
|
||||||
|
{
|
||||||
|
// For CTR, the implementation is the same
|
||||||
|
encrypt(fromNode, packetNum, numBytes, bytes);
|
||||||
|
}
|
||||||
|
|
||||||
|
private:
|
||||||
|
};
|
||||||
|
|
||||||
|
CryptoEngine *crypto = new CrossPlatformCryptoEngine();
|
|
@ -35,9 +35,6 @@ void cpuDeepSleep(uint64_t msecs) {
|
||||||
notImplemented("cpuDeepSleep");
|
notImplemented("cpuDeepSleep");
|
||||||
}
|
}
|
||||||
|
|
||||||
// FIXME - implement real crypto for linux
|
|
||||||
CryptoEngine *crypto = new CryptoEngine();
|
|
||||||
|
|
||||||
void updateBatteryLevel(uint8_t level) NOT_IMPLEMENTED("updateBatteryLevel");
|
void updateBatteryLevel(uint8_t level) NOT_IMPLEMENTED("updateBatteryLevel");
|
||||||
|
|
||||||
/** Dear pinetab hardware geeks!
|
/** Dear pinetab hardware geeks!
|
||||||
|
@ -93,5 +90,5 @@ void portduinoSetup() {
|
||||||
printf("Setting up Meshtastic on Porduino...\n");
|
printf("Setting up Meshtastic on Porduino...\n");
|
||||||
gpioBind(new R595PolledIrqPin());
|
gpioBind(new R595PolledIrqPin());
|
||||||
// gpioBind((new SimGPIOPin(LORA_RESET, "LORA_RESET")));
|
// gpioBind((new SimGPIOPin(LORA_RESET, "LORA_RESET")));
|
||||||
gpioBind((new SimGPIOPin(RF95_NSS, "RF95_NSS"))->setSilent());
|
// gpioBind((new SimGPIOPin(RF95_NSS, "RF95_NSS"))->setSilent());
|
||||||
}
|
}
|
||||||
|
|
|
@ -1,4 +1,4 @@
|
||||||
[VERSION]
|
[VERSION]
|
||||||
major = 1
|
major = 1
|
||||||
minor = 1
|
minor = 1
|
||||||
build = 31
|
build = 32
|
||||||
|
|
Ładowanie…
Reference in New Issue