首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从智能契约中的签名中获取公钥(注意,公钥,而不是地址)

问从智能契约中的签名中获取公钥(注意,公钥,而不是地址)
EN

Ethereum用户
提问于 2018-02-28 13:32:20
回答 3查看 844关注 0票数 3

是否有任何库可以从智能契约中的签名中获取公钥?ecrecover方法返回地址,而不是公钥,并执行需要从签名派生公钥的计算,其中公钥不为已知,并且不通过其他方式传递到契约中,当签名已知时,最好有一个从签名中获取公钥的库。

部分库在这里也会有所帮助。

EN

回答 3

Ethereum用户

回答已采纳

发布于 2018-03-06 06:36:32

有一个库https://github.com/jbaylina/ecsol在椭圆曲线上实现了一些坚实的操作。

我没有尝试,但它似乎有足够的实现公钥恢复。但我不确定汽油限额是否允许这样的操作。

无论如何,这个问题似乎很有趣,但它相当于从keccak获得一个预图像。

票数 0
EN

Ethereum用户

发布于 2018-02-28 13:36:20

没有一个内置的方式来做到这一点,而且我也不认为有一个库可以做到这一点。出于好奇,你为什么要拿到公钥而不是地址?

票数 1
EN

Ethereum用户

发布于 2022-10-20 09:35:59

一个新的库可用于从ECDSA签名的消息https://github.com/0xcyphered/secp256k1-solidity中恢复公钥。

示例:

代码语言:javascript
复制
//SPDX-License-Identifier: Unlicense
pragma solidity ^0.8.0;
import "@0xcyphered/secp256k1-solidity/contracts/SECP256K1.sol";
contract Example {
    function recoverPersonalSignPublicKey(
        bytes32 message,
        uint8 v,
        bytes32 r,
        bytes32 s
    ) public pure returns (bytes memory) {
        string memory header = '\x19Ethereum Signed Message:\n32';
        bytes32 _message = keccak256(abi.encodePacked(header, message));
        (uint256 x, uint256 y) = SECP256K1.recover(uint256(_message), v - 27, uint256(r), uint256(s));
        return abi.encodePacked(x, y);
    }
}
票数 1
EN
页面原文内容由Ethereum提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://ethereum.stackexchange.com/questions/41230

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档