mirror of
https://github.com/Xahau/xahaud.git
synced 2025-12-06 17:27:52 +00:00
Add sign and verify to NewcoinAddress.
This commit is contained in:
@@ -20,7 +20,31 @@ NewcoinAddress::NewcoinAddress()
|
|||||||
|
|
||||||
bool NewcoinAddress::isValid() const
|
bool NewcoinAddress::isValid() const
|
||||||
{
|
{
|
||||||
return !vchData.empty();
|
bool bValid = false;
|
||||||
|
|
||||||
|
if (!vchData.empty())
|
||||||
|
{
|
||||||
|
CKey key;
|
||||||
|
|
||||||
|
switch (nVersion) {
|
||||||
|
case VER_NODE_PUBLIC:
|
||||||
|
bValid = key.SetPubKey(getNodePublic());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VER_ACCOUNT_PUBLIC:
|
||||||
|
bValid = key.SetPubKey(getAccountPublic());
|
||||||
|
break;
|
||||||
|
|
||||||
|
case VER_ACCOUNT_PRIVATE:
|
||||||
|
bValid = key.SetPrivKey(getAccountPrivate());
|
||||||
|
break;
|
||||||
|
|
||||||
|
default:
|
||||||
|
nothing();
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
return bValid;
|
||||||
}
|
}
|
||||||
|
|
||||||
void NewcoinAddress::clear()
|
void NewcoinAddress::clear()
|
||||||
@@ -332,7 +356,47 @@ void NewcoinAddress::setAccountPrivate(const NewcoinAddress& generator, const Ne
|
|||||||
setAccountPrivate(privkey.GetPrivKey());
|
setAccountPrivate(privkey.GetPrivKey());
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<unsigned char> NewcoinAddress::accountPrivateEncrypt(const NewcoinAddress& naPublicTo, const std::vector<unsigned char>& vucPlainText)
|
bool NewcoinAddress::accountPrivateSign(const uint256& uHash, std::vector<unsigned char>& vucSig) const
|
||||||
|
{
|
||||||
|
CKey ckPrivate;
|
||||||
|
bool bResult;
|
||||||
|
|
||||||
|
if (!ckPrivate.SetPrivKey(getAccountPrivate()))
|
||||||
|
{
|
||||||
|
// Bad private key.
|
||||||
|
std::cerr << "accountPrivateSign: Bad private key." << std::endl;
|
||||||
|
bResult = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bResult = ckPrivate.Sign(uHash, vucSig);
|
||||||
|
if (!bResult)
|
||||||
|
std::cerr << "accountPrivateSign: Signing failed." << std::endl;
|
||||||
|
}
|
||||||
|
|
||||||
|
return bResult;
|
||||||
|
}
|
||||||
|
|
||||||
|
bool NewcoinAddress::accountPrivateVerify(const uint256& uHash, const std::vector<unsigned char>& vucSig) const
|
||||||
|
{
|
||||||
|
CKey ckPrivate;
|
||||||
|
bool bVerified;
|
||||||
|
|
||||||
|
if (!ckPrivate.SetPrivKey(getAccountPrivate()))
|
||||||
|
{
|
||||||
|
// Bad private key.
|
||||||
|
std::cerr << "accountPrivateVerify: Bad private key." << std::endl;
|
||||||
|
bVerified = false;
|
||||||
|
}
|
||||||
|
else
|
||||||
|
{
|
||||||
|
bVerified = ckPrivate.Verify(uHash, vucSig);
|
||||||
|
}
|
||||||
|
|
||||||
|
return bVerified;
|
||||||
|
}
|
||||||
|
|
||||||
|
std::vector<unsigned char> NewcoinAddress::accountPrivateEncrypt(const NewcoinAddress& naPublicTo, const std::vector<unsigned char>& vucPlainText) const
|
||||||
{
|
{
|
||||||
CKey ckPrivate;
|
CKey ckPrivate;
|
||||||
CKey ckPublic;
|
CKey ckPublic;
|
||||||
@@ -362,7 +426,7 @@ std::vector<unsigned char> NewcoinAddress::accountPrivateEncrypt(const NewcoinAd
|
|||||||
return vucCipherText;
|
return vucCipherText;
|
||||||
}
|
}
|
||||||
|
|
||||||
std::vector<unsigned char> NewcoinAddress::accountPrivateDecrypt(const NewcoinAddress& naPublicFrom, const std::vector<unsigned char>& vucCipherText)
|
std::vector<unsigned char> NewcoinAddress::accountPrivateDecrypt(const NewcoinAddress& naPublicFrom, const std::vector<unsigned char>& vucCipherText) const
|
||||||
{
|
{
|
||||||
CKey ckPrivate;
|
CKey ckPrivate;
|
||||||
CKey ckPublic;
|
CKey ckPublic;
|
||||||
|
|||||||
@@ -11,14 +11,14 @@ class NewcoinAddress : public CBase58Data
|
|||||||
{
|
{
|
||||||
private:
|
private:
|
||||||
typedef enum {
|
typedef enum {
|
||||||
VER_NONE = 1,
|
VER_NONE = 1,
|
||||||
VER_NODE_PUBLIC = 28,
|
VER_NODE_PUBLIC = 28,
|
||||||
VER_NODE_PRIVATE = 32,
|
VER_NODE_PRIVATE = 32,
|
||||||
VER_ACCOUNT_ID = 0,
|
VER_ACCOUNT_ID = 0,
|
||||||
VER_ACCOUNT_PUBLIC = 35,
|
VER_ACCOUNT_PUBLIC = 35,
|
||||||
VER_ACCOUNT_PRIVATE = 34,
|
VER_ACCOUNT_PRIVATE = 34,
|
||||||
VER_FAMILY_GENERATOR = 41,
|
VER_FAMILY_GENERATOR = 41,
|
||||||
VER_FAMILY_SEED = 33,
|
VER_FAMILY_SEED = 33,
|
||||||
} VersionEncoding;
|
} VersionEncoding;
|
||||||
|
|
||||||
void seedInfo(NewcoinAddress* dstGenerator, BIGNUM** dstPrivateKey) const;
|
void seedInfo(NewcoinAddress* dstGenerator, BIGNUM** dstPrivateKey) const;
|
||||||
@@ -26,6 +26,7 @@ private:
|
|||||||
public:
|
public:
|
||||||
NewcoinAddress();
|
NewcoinAddress();
|
||||||
|
|
||||||
|
// For public and private key, checks if they are legal.
|
||||||
bool isValid() const;
|
bool isValid() const;
|
||||||
void clear();
|
void clear();
|
||||||
|
|
||||||
@@ -87,11 +88,14 @@ public:
|
|||||||
void setAccountPrivate(uint256 hash256);
|
void setAccountPrivate(uint256 hash256);
|
||||||
void setAccountPrivate(const NewcoinAddress& generator, const NewcoinAddress& seed, int seq);
|
void setAccountPrivate(const NewcoinAddress& generator, const NewcoinAddress& seed, int seq);
|
||||||
|
|
||||||
|
bool accountPrivateSign(const uint256& uHash, std::vector<unsigned char>& vucSig) const;
|
||||||
|
bool accountPrivateVerify(const uint256& uHash, const std::vector<unsigned char>& vucSig) const;
|
||||||
|
|
||||||
// Encrypt a message.
|
// Encrypt a message.
|
||||||
std::vector<unsigned char> accountPrivateEncrypt(const NewcoinAddress& naPublicTo, const std::vector<unsigned char>& vucPlainText);
|
std::vector<unsigned char> accountPrivateEncrypt(const NewcoinAddress& naPublicTo, const std::vector<unsigned char>& vucPlainText) const;
|
||||||
|
|
||||||
// Decrypt a message.
|
// Decrypt a message.
|
||||||
std::vector<unsigned char> accountPrivateDecrypt(const NewcoinAddress& naPublicFrom, const std::vector<unsigned char>& vucCipherText);
|
std::vector<unsigned char> accountPrivateDecrypt(const NewcoinAddress& naPublicFrom, const std::vector<unsigned char>& vucCipherText) const;
|
||||||
|
|
||||||
//
|
//
|
||||||
// Family Generators
|
// Family Generators
|
||||||
|
|||||||
Reference in New Issue
Block a user