* LocalIdentity:: writeTo( array ) and readFrom (array )
This commit is contained in:
@@ -330,6 +330,8 @@ void setup() {
|
|||||||
halt();
|
halt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
radio.setCRC(0);
|
||||||
|
|
||||||
#ifdef SX126X_CURRENT_LIMIT
|
#ifdef SX126X_CURRENT_LIMIT
|
||||||
radio.setCurrentLimit(SX126X_CURRENT_LIMIT);
|
radio.setCurrentLimit(SX126X_CURRENT_LIMIT);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -277,6 +277,8 @@ void setup() {
|
|||||||
halt();
|
halt();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
radio.setCRC(0);
|
||||||
|
|
||||||
#ifdef SX126X_CURRENT_LIMIT
|
#ifdef SX126X_CURRENT_LIMIT
|
||||||
radio.setCurrentLimit(SX126X_CURRENT_LIMIT);
|
radio.setCurrentLimit(SX126X_CURRENT_LIMIT);
|
||||||
#endif
|
#endif
|
||||||
|
|||||||
@@ -27,6 +27,7 @@ int ED25519_DECLSPEC ed25519_create_seed(unsigned char *seed);
|
|||||||
#endif
|
#endif
|
||||||
|
|
||||||
void ED25519_DECLSPEC ed25519_create_keypair(unsigned char *public_key, unsigned char *private_key, const unsigned char *seed);
|
void ED25519_DECLSPEC ed25519_create_keypair(unsigned char *public_key, unsigned char *private_key, const unsigned char *seed);
|
||||||
|
void ED25519_DECLSPEC ed25519_derive_pub(unsigned char *public_key, const unsigned char *private_key);
|
||||||
void ED25519_DECLSPEC ed25519_sign(unsigned char *signature, const unsigned char *message, size_t message_len, const unsigned char *public_key, const unsigned char *private_key);
|
void ED25519_DECLSPEC ed25519_sign(unsigned char *signature, const unsigned char *message, size_t message_len, const unsigned char *public_key, const unsigned char *private_key);
|
||||||
int ED25519_DECLSPEC ed25519_verify(const unsigned char *signature, const unsigned char *message, size_t message_len, const unsigned char *public_key);
|
int ED25519_DECLSPEC ed25519_verify(const unsigned char *signature, const unsigned char *message, size_t message_len, const unsigned char *public_key);
|
||||||
void ED25519_DECLSPEC ed25519_add_scalar(unsigned char *public_key, unsigned char *private_key, const unsigned char *scalar);
|
void ED25519_DECLSPEC ed25519_add_scalar(unsigned char *public_key, unsigned char *private_key, const unsigned char *scalar);
|
||||||
|
|||||||
@@ -14,3 +14,10 @@ void ed25519_create_keypair(unsigned char *public_key, unsigned char *private_ke
|
|||||||
ge_scalarmult_base(&A, private_key);
|
ge_scalarmult_base(&A, private_key);
|
||||||
ge_p3_tobytes(public_key, &A);
|
ge_p3_tobytes(public_key, &A);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void ed25519_derive_pub(unsigned char *public_key, const unsigned char *private_key) {
|
||||||
|
ge_p3 A;
|
||||||
|
|
||||||
|
ge_scalarmult_base(&A, private_key);
|
||||||
|
ge_p3_tobytes(public_key, &A);
|
||||||
|
}
|
||||||
|
|||||||
@@ -59,6 +59,29 @@ void LocalIdentity::printTo(Stream& s) const {
|
|||||||
s.print("prv_key: "); Utils::printHex(s, prv_key, PRV_KEY_SIZE); s.println();
|
s.print("prv_key: "); Utils::printHex(s, prv_key, PRV_KEY_SIZE); s.println();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
size_t LocalIdentity::writeTo(uint8_t* dest, size_t max_len) {
|
||||||
|
if (max_len < PRV_KEY_SIZE) return 0; // not big enough
|
||||||
|
|
||||||
|
if (max_len < PRV_KEY_SIZE + PUB_KEY_SIZE) { // only room for prv_key
|
||||||
|
memcpy(dest, prv_key, PRV_KEY_SIZE);
|
||||||
|
return PRV_KEY_SIZE;
|
||||||
|
}
|
||||||
|
memcpy(dest, prv_key, PRV_KEY_SIZE); // otherwise can fit prv + pub keys
|
||||||
|
memcpy(&dest[PRV_KEY_SIZE], pub_key, PUB_KEY_SIZE);
|
||||||
|
return PRV_KEY_SIZE + PUB_KEY_SIZE;
|
||||||
|
}
|
||||||
|
|
||||||
|
void LocalIdentity::readFrom(const uint8_t* src, size_t len) {
|
||||||
|
if (len == PRV_KEY_SIZE + PUB_KEY_SIZE) { // has prv + pub keys
|
||||||
|
memcpy(prv_key, src, PRV_KEY_SIZE);
|
||||||
|
memcpy(pub_key, &src[PRV_KEY_SIZE], PUB_KEY_SIZE);
|
||||||
|
} else if (len == PRV_KEY_SIZE) {
|
||||||
|
memcpy(prv_key, src, PRV_KEY_SIZE);
|
||||||
|
// now need to re-calculate the pub_key
|
||||||
|
ed25519_derive_pub(pub_key, prv_key);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
void LocalIdentity::sign(uint8_t* sig, const uint8_t* message, int msg_len) const {
|
void LocalIdentity::sign(uint8_t* sig, const uint8_t* message, int msg_len) const {
|
||||||
ed25519_sign(sig, message, msg_len, pub_key, prv_key);
|
ed25519_sign(sig, message, msg_len, pub_key, prv_key);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -76,6 +76,8 @@ public:
|
|||||||
bool readFrom(Stream& s);
|
bool readFrom(Stream& s);
|
||||||
bool writeTo(Stream& s) const;
|
bool writeTo(Stream& s) const;
|
||||||
void printTo(Stream& s) const;
|
void printTo(Stream& s) const;
|
||||||
|
size_t writeTo(uint8_t* dest, size_t max_len);
|
||||||
|
void readFrom(const uint8_t* src, size_t len);
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user