mirror of
https://github.com/meshcore-dev/MeshCore.git
synced 2026-04-20 22:13:47 +00:00
Initial commit
This commit is contained in:
commit
6c7efdd0f6
59 changed files with 8604 additions and 0 deletions
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);
|
||||
}
|
||||
|
||||
}
|
||||
Loading…
Add table
Add a link
Reference in a new issue