Мне нужно преобразовать открытый ключ в форму, пригодную для использования с BouncyCastle.
Для этого я открываю отладчик и пишу:
ListAddressGroupings
Затем я выбираю адрес и пишу
validateaddress 1HQCZTfr7V7WAMUcVHM21TLfLoeQWEtNmS
И получаю результат:
{
"isvalid" : true,
"address" : "1HQCZTfr7V7WAMUcVHM21TLfLoeQWEtNmS",
"ismine" : true,
"isscript" : false,
"pubkey" : "020ba3ebc2f55152df5653bb7aba6548f0615d67b072379bdd19e72bc63c052c50",
"iscompressed" : true,
"account" : "testDONOTUSE"
}
Однако я не уверен, в каком это формате.
pubkey
?Я задаю этот вопрос, чтобы определить значение «recId», необходимое для восстановления подписи при подписании сообщения UTF8. Другими словами, мне нужно преобразовать приведенный ниже открытый ключ в массив, который я могу использовать для этой цели.
Образец данных
Base58: 1HQCZTfr7V7WAMUcVHM21TLfLoeQWEtNmS
Public: 020ba3ebc2f55152df5653bb7aba6548f0615d67b072379bdd19e72bc63c052c50
SignMessage: Test
Output: IITRv4NdcaIgXP7DDNOkOrShBiJkBFoBqjXJXozKNClHnwSmNK3+QbT7ypKTkcc0F5UPsUCef5+gqhTb8sBZLuQ=
Дальнейшие попытки:
Когда я конвертирую общедоступное значение «020ba3ebc2f55152df5653bb7aba6548f0615d67b072379bdd19e72bc63c052c50» как шестнадцатеричное в байты, используя этот метод на SO, я получаю столбец ниже слева. Это неправильно. Однако когда я извлекаю открытый ключ из закрытого ключа , я получаю похожий, но другой результат справа.
public static byte[] publicKeyFromPrivate(BigInteger privKey, bool compressed)
{
X9ECParameters ecParams = Org.BouncyCastle.Asn1.Sec.SecNamedCurves.GetByName("secp256k1");
ECPoint point1 = ecParams.G.Multiply(privKey);
return point1.GetEncoded(compressed);
}
Открытый ключ имеет формат, возвращаемый OpenSSL, и представляет собой прямое шестнадцатеричное кодирование байтов. Если первый байт равен 0x04, то это несжатый ключ размером 65 байт (32 байта X и 32 байта Y). Если первый байт равен 0x02 или 0x03, это 33-байтовый сжатый ключ (32-байтовый X и один бит для знака Y).
recID кодируется как часть подписанного сообщения. Проверьте метод verifyMessage() в классе ECKey, чтобы увидеть, как он извлекается.
Столбец справа правильный и соответствует тому, что вы получили от validateaddress.
производитель вещей7