验证WAVES KEEPER身份验证签名

时间:2019-07-27 16:50:52

标签: php wavesplatform

我正尝试在身份验证调用中使用从WAVES KEEPER返回的以下数据:

address: "3Mzp4yJ3CGWTX5Wy1f67aLaTvxdCW2ZdyPj"
host: "localhost"
name: "waveslease"
prefix: "WavesWalletAuthentication"
publicKey: "43D71TX4bLGundDUYhp72vRQLd7rtA639nWK1WexfjFq"
signature: "3pzyjyUGrwgWfqsuZXdtiVsRjgGufsopas7KNqfazHnystPviDqv93ru5g1trLjXXwhKVsdBhy1jrAmk2heiXJKw"
version: 1

并使用WavesKit PHP(https://github.com/deemru/WavesKit)验证从WAVES KEEPER服务器端返回的签名

这是我的测试代码:

[...]
public function str_with_length( $data )
{       
    $string_length_bytes = bin2hex(pack('L', strlen($data)));
    $string_bytes = utf8_encode($data);
    return $string_length_bytes.$string_bytes;        
}

public function get_statistics( $address, $signature, $publickey )
{

    $wk = new deemru\WavesKit( 'T' ); 
    // Private key of a TEST address!       
    $wk->setSeed('fence twenty camera kid property acid original mixed dolphin cousin finish nominee unfold start utility');

    $msg = $this->str_with_length('WavesWalletAuthentication').$this->str_with_length('localhost').$this->str_with_length('test');        
    log_message('Info', "Message: {$msg}");
    // converto to bytes

    // Signing message with WAVESKIT
    $signedbywaveskit=$wk->sign($msg);        
    log_message('Info', 'WAVESKEEPER Signed message: ' . $wk->Base58Decode($signature));
    log_message('Info', 'WAVESKIT Signed message: ' . $signedbywaveskit);

    $waveskeepersignatureisok = $wk->verify($wk->Base58Decode($signature), $msg, $wk->Base58Decode($publickey));
    $waveskitsignatureisok = $wk->verify($signedbywaveskit, $msg, $wk->Base58Decode($publickey));
    log_message('Info', "WavesKeeper Signature OK: {$waveskeepersignatureisok}");
    log_message('Info', "WavesKit Signature OK: {$waveskitsignatureisok}");

虽然Waveskit签名检查正常,但从WAVESKEEPER传递的签名却不正确:这是日志:

INFO - 2019-07-28 07:24:13 --> Message: 19000000WavesWalletAuthentication09000000localhost04000000test
INFO - 2019-07-28 07:24:15 --> WAVESKEEPER Signed message: Á‡c·Žq´lž„L­KÏò°aЉª1S‘Þ*¢$ÛSÏóT”Õ;QrxͦýôÝðxBÃÉ›ŸÔqÒÆÂ?ä‚
INFO - 2019-07-28 07:24:15 --> WAVESKIT Signed message: ýÐÒ³‡Ú“ÜåuDØyrG[¤bÖ¨Ó˜i™ecIóÒ’ìÈãZb
w,š• ­üÁ¿\ §ìíÀäáþ¹‡
INFO - 2019-07-28 07:24:20 --> WavesKeeper Signature OK: 
INFO - 2019-07-28 07:24:20 --> WavesKit Signature OK: 1

我认为问题在于要签名的数据以及如何将字符串长度(以字节为单位)连接起来,有帮助吗?

1 个答案:

答案 0 :(得分:1)

只需检查以下示例:https://docs.wavesplatform.com/en/waves-api-and-sdk/client-api/auth-api.html

工作正常:

$wk = new WavesKit();
$msg = pack( 'n', strlen( 'WavesWalletAuthentication' ) ) . 'WavesWalletAuthentication';
$msg .= pack( 'n', strlen( 'example.com' ) ) . 'example.com';
$msg .= pack( 'n', strlen( '0123456789abc' ) ) . '0123456789abc';    
$verified = $wk->verify( 
    $wk->base58Decode( '2w7QKSkxKEUwCVhx2VGrt5YiYVtAdoBZ8KQcxuNjGfN6n4fi1bn7PfPTnmdygZ6d87WhSXF1B9hW2pSmP7HucVbh' ),
    $msg,
    $wk->base58Decode( '2M25DqL2W4rGFLCFadgATboS8EPqyWAN3DjH12AH5Kdr' ) );