- vendor orlp/ed25519 (lib/ed25519, MIT — the exact lib MeshCore uses) for Curve25519 ECDH key exchange; switch identity/advert signing to it (same seed -> same pubkey, so peers still recognise us; sigs are byte-identical) - store pubkeys from heard MeshCore adverts (contacts table) so a DM's 1-byte src_hash can be resolved to a full sender key - decode PAYLOAD_TYPE_TXT_MSG: ECDH shared secret, HMAC-SHA256 MAC check, AES-128-ECB decrypt, parse timestamp+text, drive the message modal - verified end-to-end: real MeshCore node -> "hello from HP Pro Desk" decoded Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
24 lines
561 B
C
24 lines
561 B
C
#include "ed_25519.h"
|
|
#include "sha512.h"
|
|
#include "ge.h"
|
|
|
|
|
|
void ed25519_create_keypair(unsigned char *public_key, unsigned char *private_key, const unsigned char *seed) {
|
|
ge_p3 A;
|
|
|
|
sha512(seed, 32, private_key);
|
|
private_key[0] &= 248;
|
|
private_key[31] &= 63;
|
|
private_key[31] |= 64;
|
|
|
|
ge_scalarmult_base(&A, private_key);
|
|
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);
|
|
}
|