Ошибки подписи и проверки для библиотеки 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;
}
Я делаю что-то неправильно?