50 lines
1.1 KiB
C++
50 lines
1.1 KiB
C++
|
#include "StarCurve25519.hpp"
|
||
|
#include "StarRandom.hpp"
|
||
|
#include "StarLogging.hpp"
|
||
|
|
||
|
#include "curve25519/include/curve25519_dh.h"
|
||
|
#include "curve25519/include/ed25519_signature.h"
|
||
|
|
||
|
namespace Star::Curve25519 {
|
||
|
|
||
|
struct KeySet {
|
||
|
PrivateKey privateKey;
|
||
|
PublicKey publicKey;
|
||
|
|
||
|
KeySet() {
|
||
|
SecretKey secret;
|
||
|
Random::randBytes(SecretKeySize).copyTo((char*)secret.data());
|
||
|
|
||
|
secret[0] &= 248;
|
||
|
secret[31] &= 127;
|
||
|
secret[31] |= 64;
|
||
|
|
||
|
ed25519_CreateKeyPair(privateKey.data(), publicKey.data(), nullptr, secret.data());
|
||
|
|
||
|
Logger::info("Generated Curve25519 key-pair");
|
||
|
}
|
||
|
};
|
||
|
|
||
|
static KeySet const& staticKeys() {
|
||
|
static KeySet keys;
|
||
|
|
||
|
return keys;
|
||
|
}
|
||
|
|
||
|
PrivateKey const& privateKey() { return staticKeys().privateKey; }
|
||
|
|
||
|
|
||
|
|
||
|
Signature sign(void* data, size_t len) {
|
||
|
Signature signature;
|
||
|
ed25519_SignMessage(signature.data(), privateKey().data(), nullptr, (unsigned char*)data, len);
|
||
|
return signature;
|
||
|
}
|
||
|
|
||
|
bool verify(uint8_t const* signature, uint8_t const* publicKey, void* data, size_t len) {
|
||
|
return ed25519_VerifySignature(signature, publicKey, (unsigned char*)data, len);
|
||
|
}
|
||
|
|
||
|
PublicKey const& publicKey() { return staticKeys().publicKey; }
|
||
|
|
||
|
}
|