21#include <ed25519/ed25519.h>
22#include <openssl/pem.h>
36 *
this = std::move(right);
50 EVP_PKEY_up_ref(
_key);
59 _key = std::exchange(right._key, EVP_PKEY_new());
75 _key = EVP_PKEY_new();
76 if (!PEM_read_bio_PrivateKey(keyBIO.get(), &
_key,
nullptr,
nullptr))
91 const_cast<char*
>(keyPem.c_str()) ,
92 keyPem.length() + 1), BIO_free);
96 _key = EVP_PKEY_new();
97 if (!PEM_read_bio_PrivateKey(keyBIO.get(), &
_key,
nullptr,
nullptr))
111 _key = EVP_PKEY_new_raw_private_key(EVP_PKEY_ED25519,
nullptr, keyBytes.data(), keyBytes.size());
120 constexpr size_t KeySize = 32;
122 uint8 publicKey[KeySize] = {};
123 std::size_t keyLength = KeySize;
124 EVP_PKEY_get_raw_public_key(
_key, publicKey, &keyLength);
126 uint8 privateKey[KeySize] = {};
128 EVP_PKEY_get_raw_private_key(
_key, privateKey, &keyLength);
131 int result = ED25519_sign(output.data(), message, messageLength, publicKey, privateKey);
137 constexpr size_t KeySize = 32;
139 uint8 publicKey[KeySize] = {};
140 std::size_t keyLength = KeySize;
141 EVP_PKEY_get_raw_public_key(
_key, publicKey, &keyLength);
143 uint8 privateKey[KeySize] = {};
145 EVP_PKEY_get_raw_private_key(
_key, privateKey, &keyLength);
148 int result = ED25519_sign_ctx(output.data(), message, messageLength, publicKey, privateKey, context.data(), context.size());
bool LoadFromByteArray(std::array< uint8, 32 > const &keyBytes)
Ed25519 & operator=(Ed25519 const &right)
bool LoadFromFile(std::string const &fileName)
bool SignWithContext(std::array< uint8, N > const &message, std::vector< uint8 > const &context, std::vector< uint8 > &output)
bool Sign(std::array< uint8, N > const &message, std::vector< uint8 > &output)
bool LoadFromString(std::string const &keyPem)
auto make_unique_ptr_with_deleter(T ptr, Del &&deleter)