mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-03-31 21:15:49 +00:00
Initial commit
This commit is contained in:
70
src/Identity.cpp
Normal file
70
src/Identity.cpp
Normal file
@@ -0,0 +1,70 @@
|
||||
#include "Identity.h"
|
||||
#include <string.h>
|
||||
#define ED25519_NO_SEED 1
|
||||
#include <ed_25519.h>
|
||||
|
||||
namespace mesh {
|
||||
|
||||
Identity::Identity() {
|
||||
memset(pub_key, 0, sizeof(pub_key));
|
||||
}
|
||||
|
||||
Identity::Identity(const char* pub_hex) {
|
||||
Utils::fromHex(pub_key, PUB_KEY_SIZE, pub_hex);
|
||||
}
|
||||
|
||||
bool Identity::verify(const uint8_t* sig, const uint8_t* message, int msg_len) const {
|
||||
return ed25519_verify(sig, message, msg_len, pub_key);
|
||||
}
|
||||
|
||||
bool Identity::readFrom(Stream& s) {
|
||||
return (s.readBytes(pub_key, PUB_KEY_SIZE) == PUB_KEY_SIZE);
|
||||
}
|
||||
|
||||
bool Identity::writeTo(Stream& s) const {
|
||||
return (s.write(pub_key, PUB_KEY_SIZE) == PUB_KEY_SIZE);
|
||||
}
|
||||
|
||||
void Identity::printTo(Stream& s) const {
|
||||
Utils::printHex(s, pub_key, PUB_KEY_SIZE);
|
||||
}
|
||||
|
||||
LocalIdentity::LocalIdentity() {
|
||||
memset(prv_key, 0, sizeof(prv_key));
|
||||
}
|
||||
LocalIdentity::LocalIdentity(const char* prv_hex, const char* pub_hex) : Identity(pub_hex) {
|
||||
Utils::fromHex(prv_key, PRV_KEY_SIZE, prv_hex);
|
||||
}
|
||||
|
||||
LocalIdentity::LocalIdentity(RNG* rng) {
|
||||
uint8_t seed[SEED_SIZE];
|
||||
rng->random(seed, SEED_SIZE);
|
||||
ed25519_create_keypair(pub_key, prv_key, seed);
|
||||
}
|
||||
|
||||
bool LocalIdentity::readFrom(Stream& s) {
|
||||
bool success = (s.readBytes(pub_key, PUB_KEY_SIZE) == PUB_KEY_SIZE);
|
||||
success = success && (s.readBytes(prv_key, PRV_KEY_SIZE) == PRV_KEY_SIZE);
|
||||
return success;
|
||||
}
|
||||
|
||||
bool LocalIdentity::writeTo(Stream& s) const {
|
||||
bool success = (s.write(pub_key, PUB_KEY_SIZE) == PUB_KEY_SIZE);
|
||||
success = success && (s.write(prv_key, PRV_KEY_SIZE) == PRV_KEY_SIZE);
|
||||
return success;
|
||||
}
|
||||
|
||||
void LocalIdentity::printTo(Stream& s) const {
|
||||
s.print("pub_key: "); Utils::printHex(s, pub_key, PUB_KEY_SIZE); s.println();
|
||||
s.print("prv_key: "); Utils::printHex(s, prv_key, PRV_KEY_SIZE); s.println();
|
||||
}
|
||||
|
||||
void LocalIdentity::sign(uint8_t* sig, const uint8_t* message, int msg_len) const {
|
||||
ed25519_sign(sig, message, msg_len, pub_key, prv_key);
|
||||
}
|
||||
|
||||
void LocalIdentity::calcSharedSecret(uint8_t* secret, const Identity& other) {
|
||||
ed25519_key_exchange(secret, other.pub_key, prv_key);
|
||||
}
|
||||
|
||||
}
|
||||
Reference in New Issue
Block a user