add message signing.
This commit is contained in:
parent
53bffc378e
commit
c9ac2dd516
@ -107,6 +107,7 @@ extern std::string strWalletFile;
|
|||||||
extern CWallet *pwalletMain;
|
extern CWallet *pwalletMain;
|
||||||
#endif
|
#endif
|
||||||
extern int64_t nTransactionFee;
|
extern int64_t nTransactionFee;
|
||||||
|
extern const std::string strMessageMagic;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Node and Templates
|
* Node and Templates
|
||||||
@ -1527,12 +1528,45 @@ NAN_METHOD(WalletSignMessage) {
|
|||||||
"Usage: bitcoindjs.walletSignMessage(options)");
|
"Usage: bitcoindjs.walletSignMessage(options)");
|
||||||
}
|
}
|
||||||
|
|
||||||
// Parse the account first so we don't generate a key if there's an error
|
|
||||||
Local<Object> options = Local<Object>::Cast(args[0]);
|
Local<Object> options = Local<Object>::Cast(args[0]);
|
||||||
String::Utf8Value name_(options->Get(NanNew<String>("name"))->ToString());
|
|
||||||
std::string strAccount = std::string(*name_);
|
|
||||||
|
|
||||||
NanReturnValue(Undefined());
|
String::Utf8Value strAddress_(options->Get(NanNew<String>("address"))->ToString());
|
||||||
|
std::string strAddress = std::string(*strAddress_);
|
||||||
|
String::Utf8Value strMessage_(options->Get(NanNew<String>("message"))->ToString());
|
||||||
|
std::string strMessage = std::string(*strMessage_);
|
||||||
|
|
||||||
|
// EnsureWalletIsUnlocked();
|
||||||
|
if (pwalletMain->IsLocked()) {
|
||||||
|
return NanThrowError("Please enter the wallet passphrase with walletpassphrase first.");
|
||||||
|
}
|
||||||
|
|
||||||
|
CBitcoinAddress addr(strAddress);
|
||||||
|
if (!addr.IsValid()) {
|
||||||
|
return NanThrowError("Invalid address");
|
||||||
|
}
|
||||||
|
|
||||||
|
CKeyID keyID;
|
||||||
|
if (!addr.GetKeyID(keyID)) {
|
||||||
|
return NanThrowError("Address does not refer to key");
|
||||||
|
}
|
||||||
|
|
||||||
|
CKey key;
|
||||||
|
if (!pwalletMain->GetKey(keyID, key)) {
|
||||||
|
return NanThrowError("Private key not available");
|
||||||
|
}
|
||||||
|
|
||||||
|
CHashWriter ss(SER_GETHASH, 0);
|
||||||
|
ss << strMessageMagic;
|
||||||
|
ss << strMessage;
|
||||||
|
|
||||||
|
vector<unsigned char> vchSig;
|
||||||
|
if (!key.SignCompact(ss.GetHash(), vchSig)) {
|
||||||
|
return NanThrowError("Sign failed");
|
||||||
|
}
|
||||||
|
|
||||||
|
std::string result = EncodeBase64(&vchSig[0], vchSig.size());
|
||||||
|
|
||||||
|
NanReturnValue(NanNew<String>(result.c_str()));
|
||||||
}
|
}
|
||||||
|
|
||||||
NAN_METHOD(WalletVerifyMessage) {
|
NAN_METHOD(WalletVerifyMessage) {
|
||||||
|
|||||||
Loading…
Reference in New Issue
Block a user