コード例 #1
0
ファイル: AddressController.php プロジェクト: CryptArc/xchain
 public function verifyMessage($address)
 {
     $input = Input::all();
     $output = array();
     $bitcoin = new BitcoinLib();
     if (!isset($input['message'])) {
         $output['error'] = 'Message required';
         $output['result'] = false;
         return new Response($output, 400);
     }
     if (!isset($input['sig'])) {
         $output['error'] = 'Address signature required';
         $output['result'] = false;
         return new Response($output, 400);
     }
     $result = false;
     try {
         $verify = $bitcoin->verifyMessage($address, $input['sig'], $input['message']);
         if ($verify) {
             $result = true;
         }
     } catch (Exception $e) {
         $result = false;
     }
     $output['result'] = $result;
     return new Response($output);
 }
コード例 #2
0
 /**
  * verify a message signed bitcoin-core style
  *
  * @param  string           $message
  * @param  string           $address
  * @param  string           $signature
  * @return boolean
  */
 public function verifyMessage($message, $address, $signature)
 {
     // we could also use the API instead of the using BitcoinLib to verify
     // $this->client->post("verify_message", null, ['message' => $message, 'address' => $address, 'signature' => $signature])['result'];
     try {
         return BitcoinLib::verifyMessage($address, $signature, $message);
     } catch (\Exception $e) {
         return false;
     }
 }
コード例 #3
0
 public function testSignMessageDataSetAgainstRPC()
 {
     if (!getenv('BITCOINLIB_TEST_AGAINST_RPC')) {
         return $this->markTestSkipped("Not testing against RPC");
     }
     // special case, when undefined we do 1, otherwise we do ENV * 5 (50 on travis)
     $cnt = getenv('BITCOINLIB_EXTENSIVE_TESTING') ? getenv('BITCOINLIB_EXTENSIVE_TESTING') * 5 : 1;
     $rpcHost = getenv('BITCOINLIB_RPC_HOST') ?: '127.0.0.1';
     $rpcUser = getenv('BITCOINLIB_RPC_USER') ?: 'bitcoinrpc';
     $rpcPassword = getenv('BITCOINLIB_RPC_PASSWORD') ?: '6Wk1SYL7JmPYoUeWjYRSdqij4xrM5rGBvC4kbJipLVJK';
     $rpc = new Jsonrpcclient(['url' => "http://{$rpcUser}:{$rpcPassword}@{$rpcHost}:8332"]);
     if ($rpc->getinfo() == null) {
         $this->fail("Can't connect to bitcoind");
     }
     $data = json_decode(file_get_contents(__DIR__ . "/data/signverify.json"), true);
     $data = array_map(function ($k) use($data) {
         return $data[$k];
     }, (array) array_rand($data, $cnt));
     foreach ($data as $row) {
         $privKey = BitcoinLib::WIF_to_private_key($row['wif']);
         $signature = BitcoinLib::signMessage($row['address'], $privKey);
         $this->assertTrue(!!$signature);
         $this->assertTrue(BitcoinLib::verifyMessage($row['address'], $signature, $row['address']));
         $this->assertTrue($rpc->verifymessage($row['address'], $signature, $row['address']));
     }
 }