mirror of
https://github.com/meshtastic/firmware.git
synced 2025-06-13 16:42:07 +00:00
Support for ATECCA608B Cryptographic Coprocessor
This commit is contained in:
parent
7f05298172
commit
a7fe69ed6b
@ -65,6 +65,7 @@ lib_deps =
|
|||||||
${env.lib_deps}
|
${env.lib_deps}
|
||||||
; Portduino is using meshtastic fork for now
|
; Portduino is using meshtastic fork for now
|
||||||
jgromes/RadioLib@5.4.1
|
jgromes/RadioLib@5.4.1
|
||||||
|
sparkfun/SparkFun ATECCX08a Arduino Library@^1.3.0
|
||||||
|
|
||||||
build_flags = ${env.build_flags} -Os
|
build_flags = ${env.build_flags} -Os
|
||||||
-DRADIOLIB_SPI_PARANOID=0
|
-DRADIOLIB_SPI_PARANOID=0
|
||||||
|
@ -110,6 +110,13 @@ along with this program. If not, see <http://www.gnu.org/licenses/>.
|
|||||||
#define INA_ADDR_ALTERNATE 0x41
|
#define INA_ADDR_ALTERNATE 0x41
|
||||||
#define QMC6310_ADDR 0x1C
|
#define QMC6310_ADDR 0x1C
|
||||||
#define QMI8658_ADDR 0x6B
|
#define QMI8658_ADDR 0x6B
|
||||||
|
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
// Security
|
||||||
|
// -----------------------------------------------------------------------------
|
||||||
|
|
||||||
|
#define ATECC608B_ADDR 0x35
|
||||||
|
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
// GPS
|
// GPS
|
||||||
// -----------------------------------------------------------------------------
|
// -----------------------------------------------------------------------------
|
||||||
|
@ -9,6 +9,39 @@
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
#if HAS_WIRE
|
#if HAS_WIRE
|
||||||
|
|
||||||
|
void printATECCInfo()
|
||||||
|
{
|
||||||
|
atecc.readConfigZone(false);
|
||||||
|
|
||||||
|
DEBUG_MSG("ATECC608B Serial Number: ");
|
||||||
|
for (int i = 0 ; i < 9 ; i++) {
|
||||||
|
DEBUG_MSG("%02x",atecc.serialNumber[i]);
|
||||||
|
}
|
||||||
|
|
||||||
|
DEBUG_MSG(", Rev Number: ");
|
||||||
|
for (int i = 0 ; i < 4 ; i++) {
|
||||||
|
DEBUG_MSG("%02x",atecc.revisionNumber[i]);
|
||||||
|
}
|
||||||
|
DEBUG_MSG("\n");
|
||||||
|
|
||||||
|
DEBUG_MSG("ATECC608B Config %s",atecc.configLockStatus ? "Locked" : "Unlocked");
|
||||||
|
DEBUG_MSG(", Data %s",atecc.dataOTPLockStatus ? "Locked" : "Unlocked");
|
||||||
|
DEBUG_MSG(", Slot 0 %s\n",atecc.slot0LockStatus ? "Locked" : "Unlocked");
|
||||||
|
|
||||||
|
if (atecc.configLockStatus && atecc.dataOTPLockStatus && atecc.slot0LockStatus) {
|
||||||
|
if (atecc.generatePublicKey() == false) {
|
||||||
|
DEBUG_MSG("ATECC608B Error generating public key\n");
|
||||||
|
} else {
|
||||||
|
DEBUG_MSG("ATECC608B Public Key: ");
|
||||||
|
for (int i = 0 ; i < 64 ; i++) {
|
||||||
|
DEBUG_MSG("%02x",atecc.publicKey64Bytes[i]);
|
||||||
|
}
|
||||||
|
DEBUG_MSG("\n");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
uint16_t getRegisterValue(uint8_t address, uint8_t reg, uint8_t length) {
|
uint16_t getRegisterValue(uint8_t address, uint8_t reg, uint8_t length) {
|
||||||
uint16_t value = 0x00;
|
uint16_t value = 0x00;
|
||||||
Wire.beginTransmission(address);
|
Wire.beginTransmission(address);
|
||||||
@ -79,6 +112,15 @@ void scanI2Cdevice(void)
|
|||||||
DEBUG_MSG("unknown display found\n");
|
DEBUG_MSG("unknown display found\n");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
if (addr == ATECC608B_ADDR){
|
||||||
|
keystore_found = addr;
|
||||||
|
if (atecc.begin(keystore_found) == true) {
|
||||||
|
DEBUG_MSG("ATECC608B initialized\n");
|
||||||
|
} else {
|
||||||
|
DEBUG_MSG("ATECC608B initialization failed\n");
|
||||||
|
}
|
||||||
|
printATECCInfo();
|
||||||
|
}
|
||||||
#ifdef RV3028_RTC
|
#ifdef RV3028_RTC
|
||||||
if (addr == RV3028_RTC){
|
if (addr == RV3028_RTC){
|
||||||
rtc_found = addr;
|
rtc_found = addr;
|
||||||
|
@ -80,6 +80,10 @@ uint8_t kb_model;
|
|||||||
// The I2C address of the RTC Module (if found)
|
// The I2C address of the RTC Module (if found)
|
||||||
uint8_t rtc_found;
|
uint8_t rtc_found;
|
||||||
|
|
||||||
|
// Keystore Chips
|
||||||
|
uint8_t keystore_found;
|
||||||
|
ATECCX08A atecc;
|
||||||
|
|
||||||
bool eink_found = true;
|
bool eink_found = true;
|
||||||
|
|
||||||
uint32_t serialSinceMsec;
|
uint32_t serialSinceMsec;
|
||||||
|
@ -6,18 +6,22 @@
|
|||||||
#include "PowerStatus.h"
|
#include "PowerStatus.h"
|
||||||
#include "graphics/Screen.h"
|
#include "graphics/Screen.h"
|
||||||
#include "mesh/generated/telemetry.pb.h"
|
#include "mesh/generated/telemetry.pb.h"
|
||||||
|
#include <SparkFun_ATECCX08a_Arduino_Library.h>
|
||||||
|
|
||||||
extern uint8_t screen_found;
|
extern uint8_t screen_found;
|
||||||
extern uint8_t screen_model;
|
extern uint8_t screen_model;
|
||||||
extern uint8_t cardkb_found;
|
extern uint8_t cardkb_found;
|
||||||
extern uint8_t kb_model;
|
extern uint8_t kb_model;
|
||||||
extern uint8_t rtc_found;
|
extern uint8_t rtc_found;
|
||||||
|
extern uint8_t keystore_found;
|
||||||
|
|
||||||
extern bool eink_found;
|
extern bool eink_found;
|
||||||
extern bool pmu_found;
|
extern bool pmu_found;
|
||||||
extern bool isCharging;
|
extern bool isCharging;
|
||||||
extern bool isUSBPowered;
|
extern bool isUSBPowered;
|
||||||
|
|
||||||
|
extern ATECCX08A atecc;
|
||||||
|
|
||||||
extern uint8_t nodeTelemetrySensorsMap[TelemetrySensorType_QMI8658+1];
|
extern uint8_t nodeTelemetrySensorsMap[TelemetrySensorType_QMI8658+1];
|
||||||
|
|
||||||
extern int TCPPort; // set by Portduino
|
extern int TCPPort; // set by Portduino
|
||||||
|
Loading…
Reference in New Issue
Block a user