mirror of
https://github.com/IT4Change/gradido.git
synced 2025-12-13 07:45:54 +00:00
74 lines
2.2 KiB
C++
74 lines
2.2 KiB
C++
#ifndef __GRADIDO_LOGIN_SERVER_CRYPTO_ED25519_H
|
|
#define __GRADIDO_LOGIN_SERVER_CRYPTO_ED25519_H
|
|
|
|
#include "IKeyPair.h"
|
|
|
|
/*!
|
|
* \author: Dario Rekowski
|
|
*
|
|
* \date: 2020-06-04
|
|
*
|
|
* \brief: Key Pairs class for ed25519 keys, used for default gradido transactions
|
|
*/
|
|
|
|
#include "sodium.h"
|
|
#include "AuthenticatedEncryption.h"
|
|
|
|
class Passphrase;
|
|
|
|
class KeyPairEd25519 : public IKeyPair
|
|
{
|
|
public:
|
|
//! \param privateKey: take ownership, release after object destruction
|
|
//! \param publicKey: copy
|
|
KeyPairEd25519(MemoryBin* privateKey);
|
|
KeyPairEd25519(const unsigned char* publicKey);
|
|
|
|
~KeyPairEd25519();
|
|
|
|
//! \param passphrase must contain word indices
|
|
//! \return create KeyPairEd25519, caller muss call delete at return after finish
|
|
static KeyPairEd25519* create(const Passphrase* passphrase);
|
|
|
|
//! \return caller take ownership of return value
|
|
MemoryBin* sign(const MemoryBin* message) const;
|
|
|
|
inline const unsigned char* getPublicKey() const { return mSodiumPublic; }
|
|
|
|
inline bool isTheSame(const KeyPairEd25519& b) const {
|
|
return 0 == sodium_memcmp(mSodiumPublic, b.mSodiumPublic, crypto_sign_PUBLICKEYBYTES);
|
|
}
|
|
inline bool isTheSame(const unsigned char* pubkey) const {
|
|
return 0 == sodium_memcmp(mSodiumPublic, pubkey, crypto_sign_PUBLICKEYBYTES);
|
|
}
|
|
|
|
inline bool operator == (const KeyPairEd25519& b) const { return isTheSame(b); }
|
|
inline bool operator != (const KeyPairEd25519& b) const { return !isTheSame(b); }
|
|
|
|
inline bool operator == (const unsigned char* b) const { return isTheSame(b); }
|
|
inline bool operator != (const unsigned char* b) const { return !isTheSame(b); }
|
|
|
|
inline bool hasPrivateKey() const { return mSodiumSecret != nullptr; }
|
|
|
|
//! \brief only way to get a private key.. encrypted
|
|
MemoryBin* getCryptedPrivKey(const AuthenticatedEncryption* password) const;
|
|
|
|
protected:
|
|
|
|
KeyPairEd25519();
|
|
|
|
|
|
private:
|
|
// 64 Byte
|
|
//! \brief ed25519 libsodium private key
|
|
//!
|
|
//! Why it is a pointer and the public is an array?
|
|
//! TODO: replace MemoryBin by a memory obfuscation class which make it hard to steal the private key from memory
|
|
MemoryBin* mSodiumSecret;
|
|
|
|
// 32 Byte
|
|
//! \brief ed25519 libsodium public key
|
|
unsigned char mSodiumPublic[crypto_sign_PUBLICKEYBYTES];
|
|
};
|
|
|
|
#endif //__GRADIDO_LOGIN_SERVER_CRYPTO_ED25519_H
|