Ошибки подписи и проверки для библиотеки Dart Ethereum

Я кодирую логику для подписи и проверки строки в Dart.

Я импортирую следующие библиотеки

         import 'package:web3dart/web3dart.dart';
   import 'package:eth_sig_util/eth_sig_util.dart';
   import 'package:collection/collection.dart';
   import 'package:web3dart/crypto.dart';

Я генерирую KeyPair, используя следующий код. я использую'package:web3dart/web3dart.dart';библиотека для него.

      var random_number = Random.secure();
EthPrivateKey keyPair = EthPrivateKey.createRandom(random_number);

Я запускал подпись и проверку несколько раз в цикле.

Когда я запускаю более 100 раз, я получаю 1-2 проверки, которые не проходят . И этот процент ошибок пропорционален, когда я запускаю его более 1000 раз. Примерно 1-2% ошибок проверки. Это моя логика подписи

      Future<String> sign (final String message) async
    {
            List<int>       message_list   = message.codeUnits;

            final Uint8List bytes_message  = Uint8List
                                                .fromList(message_list);

            String signature               = EthSigUtil.signPersonalMessage
                                                ( 
                                                    privateKey: bytesToHex(keyPair.privateKey), 
                                                    message: bytes_message
                                                );

            return signature;

    }

И код для проверки приведен ниже:

      Future<bool> verify (final String message, final String signature, String public_key) async
        {
                String recovered_address = '';

                List<int> message_list   = message.codeUnits;

                final Uint8List bytes_message  = Uint8List
                                                    .fromList(message_list);

                try {

                recovered_address            = EthSigUtil.recoverPersonalSignature
                                                        (
                                                            signature: signature, 
                                                            message: bytes_message
                                                        );
                }
                catch (e) 
                      {
                            return false;
                      }
                var given_address = publicKeyToAddress(hexToBytes(public_key));

                bool is_verified = const ListEquality()
                                .equals(
                                            hexToBytes(recovered_address), 
                                            given_address
                                        );
                return is_verified;
        }

Я делаю что-то неправильно?

0 ответов

Другие вопросы по тегам