Я пытаюсь реализовать код операции OP_CHECKSIG Биткойн и проверить, действительна ли подпись или нет. У меня есть подпись, которую я получаю из данных транзакции и открытого ключа (шестнадцатеричное поле транзакции P2PKH должно содержать и то, и другое). Я пытаюсь выяснить, что такое подписанный дайджест сообщения. Насколько я знаю, это обязательные предметы...
1. Номер версии (4 байта)
2. Количество входов (1 байт)
3. Хэш транзакции выкупаемых входных данных
4. Индекс выкупаемых выходных данных (4 байта)
5. ScriptPubKey выкупаемых выходных данных с предшествующим длина сценария
6. Порядковый номер (4 байта)
7. Количество выходов, которые мы подписываем (1 байт)
8. Общее значение вывода (8 байтов)
9. ScriptSig для вывода с добавленной длиной
10.locktime поле (4 байта)
11. тип хэш-кода (4 байта)
Итак, если я дважды хэширую эти данные в байтовом формате, используя алгоритм SHA256, пройдет ли проверка моей подписи? Я пытаюсь реализовать это с помощью Java, и это мой код -
public static boolean verifyUsingSecp256k1(byte[] pub, byte[] dataForSigning,
BigInteger[] rs) throws Exception {
ECDSASigner signer = new ECDSASigner();
X9ECParameters params = SECNamedCurves.getByName("secp256k1");
ECDomainParameters ecParams = new ECDomainParameters(params.getCurve(),
params.getG(), params.getN(), params.getH());
ECPublicKeyParameters pubKeyParams = new ECPublicKeyParameters(ecParams
.getCurve().decodePoint(pub), ecParams);
signer.init(false, pubKeyParams);
return signer.verifySignature(dataForSigning, rs[0].abs(), rs[1].abs());}
Однако, когда я пытаюсь проверить свою подпись, она возвращается как ложная. Я что-то пропустил здесь?
Все вышеперечисленные шаги верны, хотя. Единственная загвоздка здесь в том, что, кроме скриптов, все остальное записано в формате Little Endian (по каким-то причинам). Таким образом, за исключением шагов 5 и 9, все остальные данные хранятся в формате Little Endian. Мне потребовалось время, чтобы добраться до этого ответа! Просто небольшой совет, который следует учитывать при реализации!
Энтузиаст кодирования
шубхам саксена
Энтузиаст кодирования
CompactInt
размерSignatureScript
после его замены наPubkeyScript
,... Что касается проверки, вы должны проверить код, который вы используете, не уверен, что это за библиотека .шубхам саксена
Энтузиаст кодирования
c3b0386c0d990ab628ac505e8fb612f67d052c5f3cd0ac517854c2efc24ab3e7
шубхам саксена