Проблема при попытке проверить подпись

Я использую следующее, чтобы подписать сообщение

 var str="Trial with signature";
 text=web3.sha3(str);
 var sig=web3.eth.sign(eth.accounts[0],text);

Теперь, после получения хеш-значения из текста и подписи, чтобы проверить то же самое, я использую следующий контракт

contract signature
{
    event ret_addr(address addr);
    function sig_verify(bytes32 hash, bytes sig) returns(address)                       //verifying the signature
    {
        bytes32 r;
        bytes32 s;
        uint8 v;
        assembly 
        {
                r := mload(add(sig, 32))
                s := mload(add(sig, 64))
                v := byte(0, mload(add(sig, 96)))
            }
        if(v<27)
            v+=27;
        ret_addr(ecrecover(hash, v, r, s));
    }
}

Проблема в том, что я не верну правильный адрес. Почему это так? Раньше он работал нормально, но теперь он дает некоторые случайные адреса.

6 голосов | спросил Aravind_R 28 WedEurope/Moscow2016-12-28T21:15:49+03:00Europe/Moscow12bEurope/MoscowWed, 28 Dec 2016 21:15:49 +0300 2016, 21:15:49

1 ответ


1

Что-то не так с разделом assembly. Вы можете отлаживать, расширяя ваше событие следующим образом

event ret_addr(address addr, uint8 v, bytes32 r, bytes32 s);

и назовите его с соответствующими переменными

ret_addr(ecrecover(hash, v, r, s), v, r, s);

Мой результат:

[
    {
        "topic": "1171b064e2eda38d82ce5fadc8a911d493f2d22ff88013d965c9885638dee60d",
        "event": "ret_addr",
        "args": [
            "0x0",
            "97",
            "0x3078613963356435666332336333663762313130313134313262663536366432",
            "0x3638333437353534666561666665333164363662343539383739373435373562"
        ]
    }
]

Как вы можете видеть, v не является ни 27 и 28. r и s не являются шестнадцатеричными, но с префиксом 0x.

ответил Alexander 4 MonEurope/Moscow2017-12-04T15:02:10+03:00Europe/Moscow12bEurope/MoscowMon, 04 Dec 2017 15:02:10 +0300 2017, 15:02:10

Похожие вопросы

Популярные теги

security × 330linux × 316macos × 2827 × 268performance × 244command-line × 241sql-server × 235joomla-3.x × 222java × 189c++ × 186windows × 180cisco × 168bash × 158c# × 142gmail × 139arduino-uno × 139javascript × 134ssh × 133seo × 132mysql × 132