GithubHelp home page GithubHelp logo

Comments (6)

wanderer avatar wanderer commented on May 20, 2024 1

We always subtract 27 from seckp so we can think of v as 0 or 1 but v is valid if its 0, 1, 2 or 3 in seckp256k1. I wonder if this is a mistake in the YP.

from ethereumjs-util.

wanderer avatar wanderer commented on May 20, 2024

that should be caught by seckp256k1's verify I believe

from ethereumjs-util.

axic avatar axic commented on May 20, 2024

@wanderer r & s should I reckon, but v has a limitation set by the yellowpaper (the valid range should be 27 to 30 according to it)

from ethereumjs-util.

croqaz avatar croqaz commented on May 20, 2024

Hei guys, I have 1 question:

How can I simulate ecrecover function in Solidity? I know the function exists, but it doesn't seem to return the same result as your ecrecover.

Node example:

var ethUtils = require('ethereumjs-util');
var privkey = new Buffer('3c9229289a6125f7fdf1885a77bb12c37a8d3b4962d936f7e3084dece32a3ca1', 'hex');
var data = ethUtils.sha3('a');
var vrs = ethUtils.ecsign(data, privkey);
var pubkey = ethUtils.ecrecover(data, vrs.v, vrs.r, vrs.s);
// Check !
var check1 = pubkey.toString('hex') ==
    ethUtils.privateToPublic(privkey).toString('hex');
var check2 = ethUtils.publicToAddress(pubkey).toString('hex') ==
    ethUtils.privateToAddress(privkey).toString('hex');
// Check is ok !

Now, I'm trying this in Solidity:

// Sending ::
// "3ac225168df54212a25c1c01fd35bebfea408fdac2e31ddd6f80a4bbf9a5f1cb",
// 27
// "5caec23c6aa80c772fef1a52655cbb46ed5e017573b054ba8d3fa61d9d26df98",
// "48a8a544478726b4b2140b444831c2f0bbd97c819e1344482190c2ad265865ca"
contract Test {
    function check(bytes32 data, uint8 v, bytes32 r, bytes32 s) returns(address) {
      return ecrecover(data, v, r, s);
    }
}
// Result: "0x0000000000000000000000003432313261323563316330316664333562656266"

Any ideas how I can compare the result?
Also, the private key that I used, is from your tests; How can I obtain it from the keyfile, or from GETH ?

Thank you !!

from ethereumjs-util.

axic avatar axic commented on May 20, 2024

@croqaz Solidity's ecrecover returns an address and not a public key.

Re: the private keys. You can use ethereumjs-wallet (or probably keythereum supports that too?) to convert back-and-forth between keyfiles and private keys.

from ethereumjs-util.

axic avatar axic commented on May 20, 2024

With #27 merged we check for v = {27,28}

from ethereumjs-util.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.