DaoCasino / DCLib

⚙️ DApp toolkit
GNU General Public License v3.0
12 stars 3 forks source link

Invalid RSA-sign, RSA-verify #41

Open axdvdv opened 6 years ago

axdvdv commented 6 years ago

Модуль отвечающий за RSA подпись иногда выдает подпись с нечетным кол-вом бит. В этом случае необходимо доставлять в начале 0 для дальнейшей валидности подписи. предложение:

Так же предлагаю адаптировать модуль путем добавления '0x' при выдаче подписи, (и обрезке соотвественно при верификации)

    verify(message, signedMessage){
        if(signedMessage.substr(0,2) === '0x'){
            signedMessage = signedMessage.substr(2)
        }
       let msg        = parseBigInt(message, 16);
       let sigMsg     = parseBigInt(signedMessage, 16);
       msg            = msg.mod(this.RSA.n);
       let newMessage = this.RSA.doPublic(sigMsg);
       return(newMessage.equals(msg));
    }
    // Sign rawMsg
    signHash(message){
        let msg = parseBigInt(message, 16);
        msg = msg.mod(this.RSA.n);
        let _sign = this.RSA.doPrivate(msg).toString(16)
        if((_sign.length % 2) != 0) {
            _sign = '0' + _sign
        }
        return '0x' + _sign
    }
alexstep commented 6 years ago

Периодически вылетает ошибка - invalid random - типа банкроллер прислал неккоректный ранд, в общем RSA verify иногда срабатывает неккоректно, предположительно из-за этого бага.

Возможно, конечно, косячит erecover...