13

Is there a js library or even just pure js where I can sign and verify I own an Ethereum address?

  • What are you trying to sign, a transaction, file, etc..? – o0ragman0o Apr 14 '17 at 6:30
  • just sign a message offline. i need a js library i can include in my app. i just want one file and the associated code to do verify. – Patoshi パトシ Apr 14 '17 at 13:01
12
+25

You can sign a string of data using web3.eth.sign

The address you use needs to be unlocked and you can sign text like this:

> web3.eth.sign(<your address>, web3.sha3("Some text"))

0x32f689696d855dd79c73acd94b2374461261b6f3d00e758fa23d35607c0be3175cbc7a7ea02c7f23cd7ef9334b4718a3363dfe12c1c1de24da5f94eb68a67b6000"

The returned 130byte string is the concatenated r,s,v ECDSA values with the mapping:

r = signature[0:64]
s = signature[64:128]
v = signature[128:130]

While web3.js has no verification functions, Solidity has ecrecover call in the form:

ecrecover([sha3 hash of data], v, r, s)

This question explores usage of ecrecover.

Further, there is another thread on the forum in which the OP uses the Python Bitcoin module to verify signed data.

4

You can now verify signatures in web3 1.0 using web3.eth.accounts.recover

const account = web3.eth.accounts[0];
const signature = await web3.eth.sign("Hello world", account);
const signingAddress = web3.eth.accounts.recover("Hello world", 
signature);
// account === signingAddress
  • What does the comment // account === signingAddress mean? – John Murphy Jul 25 '18 at 11:02
  • @JohnMurphy It's just a comment explaining that at the end, the variables account and signingAddress are equal addresses – David Mihal Jul 25 '18 at 14:47
2

Notice that web3js will always prefix the string with "\x19Ethereum Signed Message:\n" before signing it. If you want to create a signature without this prefix, you could use eth-crypto.

1

Yes, you can.

Proving or verifying that you own a public address is simply a matter of verifying that you have the private key for that address.

eth-lightwallet will do that for you in JavaScript.

This is done completely "offline", as in the sense that you do not need to be connected to the Ethereum network, and eth-lightwallet does not provide such a feature.

To communicate with the Etherum network one still needs a connection to a node. This can be done on a back-end server by using Web3js and Geth, or on the front-end by using Web3js and MetaMask.

-3

I dont think so.

So far, we have ethereum-lightwallet that relies on a RPC-open node to handle the block.

I think that there are some efforts to make a full-js client but, until now, you can't handle a wallet through pure JS.

Your Answer

By clicking “Post Your Answer”, you agree to our terms of service, privacy policy and cookie policy

Not the answer you're looking for? Browse other questions tagged or ask your own question.